笔者在windows下做Android开发中遇到了一些需要用到Protobuf nano版本的地方,但是下载到的nano版本默认编译出来的是C版本的代码,因为被误导了,下错了版本。
下面就是这个错误的nano下载地址,这个是针对c的一个实现,不是我们需要的,别下成这个。
nano版本的protobuf下载地址为http://koti.kapsi.fi/~jpa/nanopb/download/
如果c下面用上面这个版本的nano也不赖,直接引用他给提供的库就行了,但是咱们的java版本还是放弃吧,太恶心了,翻译出来的java代码用我后面编的包还不能依赖匹配
转载请注明出处(http://blog.csdn.net/itdashuiniu/article/details/39294625)
然后干货来了,正确的下载方式是去拉源码,然后自己编包出来用。
1、环境
Linux系统(Ubuntu13.04)(其实我想在windows下模拟linux来做的,但发现太恶心,总是出问题,就直接换虚拟机里面的ubuntu来干了)
已安装好git、g++、libtool、autoconf(如果没有就apt-get install安装),然后还需要gcc(默认就有的);
确认有没有Maven(这个也可以apt-get install,我的是直接从http://maven.apache.org/上下载的,这个配置有点麻烦,直接get-install简单);
JDK(这个大家肯定有吧,java --version确认一下,没有就百度教程去安装)
上面这些大家千万确认已经都有了,没有的话会有一些意外情况。
2、取protobuf源码
这里我们取的源码是整个protobuf的项目,这个项目里面包含nano还有micro版本的。(ID:IT大水牛)
git clone https://github.com/android/platform_external_protobuf.git android-protobuf
上面取到的是项目主干的代码,放在了你当前目录下,新建了android-protobuf来存放整个主干代码。
3、编译protobuf的C源码
首先要把C的编译了,编了以后的protoc可以用了翻译proto格式文件为你需要的各个版本代码,包括nano还有micro版本的java代码等等。
具体编完后用protoc -h来查看如何翻译proto文件为你所需要的格式。第四步中再编译出来一个protobuf的jar包来作为lib添加到你的项目中。
现在先说编译c源码,首先cd android-protobuf
进入到android-protobuf目录下,然后执行编译过程
$ ./configure
$ make
$ make check
$ make install
如果出现异常就是你那些lib没添加全,回去下载lib。如果说你权限不够,就加sudo来做操作(首次sudo没有开通root权限的话会失败,去百度咋开root权限吧)
好像make install是必须加sudo的。
完事以后,执行以下protoc -h,看看出没出结果,有结果就是编译安装成功,用编译出来的protoc就可以来翻译proto文件了(如何编,用protoc -h看具体的提示信息)。
4、编译protobuf的Jar包来做lib添加到项目中
最困惑我们的地方来了,我们怎么拿到java所依赖的jar包作为库添加到项目中。(ID:IT大水牛)
这里我们要先进入到java目录下,这个java就在android-protobuf目录下,cd进去。
在java目录下就该用到Maven了(要提前安装好)
首先Run the tests,执行命令
$ mvn test
然后安装库
$ mvn install
最后,打出来jar包
$ mvn package
执行完上面这些,我们就可以去java目录下的target目录里取到我们需要的jar包了,然后把这个jar包作为添加的lib到项目中,我们恶心的问题就解决了。
大家记得千万前面proto文件用我们c编译出来的的protoc来编译,笔者就用最开始前面说的那个错误的nano版本编了个java的代码,结果跟我们的jar包不匹配。
附件中就是编译出来的protobuf-java-2.3.0.jar,这个里面就有我们java代码需要依赖的库函数。(ID:IT大水牛)
附件protobuf-java-2.3.0.jar下载地址:http://download.csdn.net/detail/itdashuiniu/7932895
有用的话,你就给个评论或者赞呗,求刷分!真诚的求!