最近开发APP插件,需要解析 proto buf的二进制文件,现在将遇到的几个坑总结一下。废话不多说。
首先,在Android studio中集成proto buf插件的过程,请参看下面的几个资料:
上面两篇参考资料中,详细介绍了: - 如何在 Android studio中安装和使用 gradle proto 插件。 - 根据 .proto文件生成对应的Javabean。 - 并从输入流中解析出数据来。
按照上面的步骤,一步一步做,应该能顺利的解析出数据。
下面总结在开发过程中遇到的一些问题,(使用Mac开发)。
问题 1 main' specified for property '$3' does not exist.
升级 protobuf-gradle-plugin 插件至最新版。我升级到了 0.8.8,
问题 2 Cannot resolve method 'parseFrom(java.nio.ByteBuffer)
原因:使用 protoc编译工具编译的版本和项目中依赖的版本不一致,如图。这两个位置要保持一致。
还有一个可能的原因是server端和Android studio 使用的 protoc 版本不一致的原因。参考: 参考这里4
问题 3 Protocol message end-group tag did not match expected tag.
原因:数据本身已损坏(或因编码器故障而损坏),或数据在读取时损坏,或数据很好,解码器出了问题。可以从这三个方面进行排查。
我遇到这个问题的排查思路:
1 尝试定义了一个 test.proto 文件,
2 用我这边集成的 编译 proto buffer的工具 , 生成了一个结果文件。
3 使用相同的解析工具解析是OK的。能解析出来。
4 最后发现是收到的文件有问题。
最后
下面这篇文章对Android Protobuf应用及原理 进行了分析,写的还是很不错的。参考链接: Android Protobuf应用及原理
既然用到了proto,那么他的语法还是要了解的:参考链接: Protobuf语言指南
最最重要的是下面这句: