protobuf在Android下的使用

索引

      • 1. 介绍
      • 2. 配置环境
        • 1. 下载 “protoc”、“protoc-gen-javalite”:
        • 2. 编写xxx.proto文件:略
        • 3. 编译前准备:
        • 4. 编译
        • 5. 使用
      • 3.扩展:Java标准版、JavaLite版、JavaNano版、Wire版

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-maven、Protobuf-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缺点:兼容性略差

你可能感兴趣的:(android,数据)