android 中使用protocolbuffer
1.什么是protobuf?
关于protobuf 网上都能搜到复制一段看下:Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。目前提供了 C++、Java、Python 三种语言的 API。文字看着空洞不实在,来点干的,我们公司之所以使用protobuf而不用json就是传输效率的问题,由于自己水平有限,之前也没有了解过这个解析方式,所以、花费了一周的时间才能真正运用它,这里写出来希望能多少帮助其他人。
2.安装接入
安装可以直接去官网下载安装,https://developers.google.com/protocol-buffers/docs/downloads
也许是我在网上找到的资源都是前辈写的,很多使用方式与我现在的不一样,我这里放出我使用的方式:
首页build中导入:与Android 平级导入,我这里使用的是3.0.0,这个版本可以使用map字段,2.5.0的不可以
配置Gradle
no1项目的build.gradle文件加入:
classpath'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
no2、模块的build.gradle
顶部添加protobuf插件
apply plugin:'com.google.protobuf'
android结点增加proto文件位置配置
sourceSets { main { proto { srcDir'src/main/proto'include'**/*.proto'} java { srcDir'src/main/java'} } }
no3.添加依赖
compile'com.google.protobuf:protobuf-java:3.1.0'
compile'com.google.protobuf:protoc:3.1.0'
增加protobuf结点
protobuf { protoc { artifact ='com.google.protobuf:protoc:3.1.0'} generateProtoTasks { all().each { task -> task.builtins { remove java } task.builtins { java {}// Add cpp output without any option.// DO NOT omit the braces if you want this builtin to be added.cpp {} } } } generatedFilesBaseDir ="$projectDir/src/generated"}
3 正式使用
语法说明略》》》
在使用前一定是要先了解语法的,这个网上都是可以直接搜到:这里我只是单纯的放出我的代码示例,看着这个例子应该会明白好多
(1)import 导入(2)类之间的嵌套
(3)请求参数为list具体贴出一个怎么使用,按照建造者模式创建请求的,我项目使用的是okhttp,,这段代码是把所有的请求参数转化为byte[]
请求成功后把得到的结果数组利用.parseFrom(),转化为我们需要的对象就可以了