ProtoBuf使用初体验-Android Studio配置及J

2018-08-24  本文已影响0人  zizi192

最近参与一个新项目的开发,才用了ProtoBuf作为前端和后台之间的通信协议。关于ProtoBuf的知识我就不细说了,具体可参考官网https://developers.google.com/protocol-buffers/docs/proto3#json

Android Studio配置

作为google的亲儿子,可以通过配置,直接在Android Studio中根据proto文件生成java代码并使用。在移动端,推荐使用protobuf-lite版本以节省资源。
一、在project的build.gradle中添加如下内容

buildscript {
    repositories {
        jcenter()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.1'
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.6'
    }
}

二、在project中增加一个proto的module,用于管理proto及生成的java文件。在其build.gradle中增加以下内容

...
apply plugin: 'com.google.protobuf'
...
android{
...
sourceSets {
        main {
            java {
                srcDir 'src/main/java'
            }
            proto {
                srcDir 'src/main/proto'
                include '**/*.proto'
            }
        }
    }
}
protobuf {
    //这里配置protoc编译器
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            // The codegen for lite comes as a separate artifact
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    //这里配置生成目录,编译后会在build的目录下生成对应的java文件
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                // In most cases you don't need the full Java output
                // if you use the lite output.
                remove java
            }            
            task.plugins {
                javalite {}
            }
        }
    }
}
dependencies {
    ...
    compile 'com.google.protobuf:protobuf-lite:3.0.0'
    ...
}

三、在proto模块的src/main目录下创建proto目录,用于放置.proto文件。java文件中可放置处理protobuf的一些代码,报名与.proto文件中的package保持一致。


image.png

四、编译,可在proto模块的build/generated/source/proto路径看到生成的java文件。


image.png

ProtoBuf与JSON互转

Android Studio中可使用protobuf-java-format工具实现JSON和ProtoBuf之间的转换。
1、在proto模块的build.gradle文件中增加protobuf-java-format的编译依赖

...
dependencies {
   ...
    api 'com.googlecode.protobuf-java-format:protobuf-java-format:1.2'
}
...

2、ProtoBuf转Json

String jsonFormat = JsonFormat.printToString(protoMsg);

3、Json转ProtoBuf

JsonFormat.merge(jsonFormat, protoMsgBuilder)

注意,在protobuf中另有一个util工具库提供转化,但是测试中发现性能不及上面的JsonFormat库。该util库的编译依赖如下:

 api 'com.google.protobuf:protobuf-java-util:3.6.0'

代码可参考 com.google.protobuf.util.JsonFormat.java,使用方法与上面的有所不同。

参考文档:
Protocol Buffer 3 学习笔记
Mac下protobuf安装,并用maven编译导出jar包
https://stackoverflow.com/questions/15723099/where-to-find-protobuf-jar-for-using-google-protocol-buffers-in-java
https://stackoverflow.com/questions/28545401/java-json-protobuf-back-conversion

https://proandroiddev.com/how-to-setup-your-android-app-to-use-protobuf-96132340de5c

上一篇下一篇

猜你喜欢

热点阅读