protobuf在Android下的使用

1. 介绍

如果想在Android环境下,使用protobuf数据结构,可以直接使用protobuf 的Java版本,也可以使用 JavaLite版本。
这里推荐使用JavaLite版本,根据官方文档,JavaLite生成的文件小,并且对混淆的支持更好。

原文:

For Android users, it’s recommended to use protobuf Java Lite runtime because of its smaller code size. Java Lite runtime also works better with Proguard because it doesn’t rely on Java reflection and is optimized to allow as much code stripping as possible. You can following these instructions to use Java Lite runtime.

2. 配置环境

1. 下载 “protoc”、“protoc-gen-javalite”:

官方网址:Protobuf-mavenProtobuf-github

  1. 下载“protoc”

    两个下载地址,二选一即可:

    1. https://github.com/protocolbuffers/protobuf/releases

      这个下载地址下载的文件,后缀为.zip,解压,找到bin目录下的protoc即可

    2. https://repo1.maven.org/maven2/com/google/protobuf/protoc/3.6.1/

      这个下载地址下载的文件,后缀都是exe,可以根据需要,更改名称和后缀:
      Mac、Linux:protoc
      Windows:protoc.exe

  2. 下载“protoc-gen-javalite”

    1. https://repo1.maven.org/maven2/com/google/protobuf/protoc-gen-javalite/3.0.0/

      这个下载地址下载后,都是exe结尾,可以根据需要,更改名称和后缀:
      Mac、Linux:protoc-gen-javalite
      Windows:protoc-gen-javalite.exe

    2. 放置到系统的环境变量中,并确定可以读写访问

2. 编写xxx.proto文件:略
3. 编译前准备:

将 “protoc” 和 “xxx.proto” 文件,放置在同一目录下

如果不同文件夹,需要使用参数指定路径

4. 编译

在protoc所在目录下,执行:

protoc	--javalite_out=./	xxx.proto

=./ 表示输出目录为当前目录

5. 使用
  1. 拷贝上面生成的类,到指定包内

    备注:要和proto文件内定义的包名相符,否则会出错

  2. 添加解析依赖

     在app目录下 build.gradle 配置
     dependencies 
     {
     	……
     	compile 'com.google.protobuf:protobuf-lite:x.y.z'
     }
    

    解析库版本(x.y.z)最好和编译用的版本相同

  3. 撰写序列化和反序列化方法

     //使用示例:序列化
     TestProtos.Call.Builder callBuild = TestProtos.Call.newBuilder();
     callBuild.addUid(12);
     TestProtos.Call build = callBuild.build();
     byte[] bytes = build.toByteArray();
     
     //使用示例:反序列化
     try {
         TestProtos.Call call = TestProtos.Call.parseFrom(bytes);
     } catch (InvalidProtocolBufferException e) {
         e.printStackTrace();
     }
    

3.扩展:Java标准版、JavaLite版、JavaNano版、Wire版

Android中使用protobuf。

  1. 可以使用Google官方的protobuf:Java标准版,JavaLite版,JavaNano版。

  2. 还可以使用square出品的Wire:https://github.com/square/wire

    Wire优点:生成的类文件小,生成多个类文件,总方法数少
    Wire缺点:兼容性略差

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值