Android中的Protobuf怎么使用
Android中的Protobuf怎么使用
本篇内容介绍了“Android中的Protobuf怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
前言
Protobuf,类似于json和xml,是一种序列化结构数据机制,可以用于数据通讯等场景,相对于xml而言更小,相对于json而言解析更快,支持多语言。
一、Proto文件示例
Protobuf使用.proto
文件来定义数据格式,所以我们首先新建立一个person.proto
文件,并在文件中填下如下内容:
//指定proto的版本为proto3,不写的话默认为proto2.syntax="proto3";//包名packageproto;//引入包//import"";//指定生成类所在的Java包名optionjava_package="com.example.demowork1";//重命名,如果不写,默认为文件名的首字母大写转化生成,如本文件如果不写则是Personoptionjava_outer_classname="PersonProto";messagePerson{stringname=1;int32id=2;boolboo=3;stringemail=4;stringphone=5;}
这样我们就定义好了一个基本的Person对象,下面我们对文件中的关键字进行一一说明:
**syntax:**指定proto的版本,protobuf目前有proto2和proto3两个常用版本,如果没有声明,则默认是proto2.
**package:**指定包名。
**import:**导入包,类似于java的import.
**java_package:**指定生成类所在的包名
**java_outer_classname:**定义当前文件的类名,如果没有定义,则默认为文件的首字母大写名称
**message:**定义类,类似于java class;可以嵌套
**repeated:**字段可以有多个内容(包括0),类似于array
需要注意的是在声明了属性之后,需要对属性声明一个tag(示例代码中的:1,2,3)。
这个tag是ProtoBuf编码是使用来标识属性的,因此在定义了一个message的属性之后,最好不要再去修改属性的tag值以免造成旧数据解析错误。
二、在Android中的使用
protobuf可以在Android中进行使用,并且集成对应的Gradle Plugin能够快速的编译proto文件。
其基本的编译流程如下:
下面我们直接使用上面的person.proto文件来举例说明。
1、 plugin配置
首先我们需要在工程目录下的build.gradle
文件中引入protobuf,示例代码如下:
buildscript{ext.kotlin_version="1.3.72"repositories{google()jcenter()maven{url"https://jitpack.io"}mavenCentral()}dependencies{classpath"com.android.tools.build:gradle:4.1.0"classpath"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"classpath'com.google.protobuf:protobuf-gradle-plugin:0.8.8'//NOTE:Donotplaceyourapplicationdependencieshere;theybelong//intheindividualmodulebuild.gradlefiles}}
然后我们还需要在Module目录下的build.gradle
文件下添加配置,示例如下:
plugins{...id'com.google.protobuf'}android{...sourceSets{main{java.srcDirs=['src/main/java']jniLibs.srcDirs=['libs']assets.srcDirs=['assets']proto{//指定proto文件位置,你的proto文件放置在此文件夹中srcDir'src/main/proto'}}}}dependencies{...implementation'com.google.protobuf:protobuf-java:3.5.1'implementation'com.google.protobuf:protoc:3.5.1'}protobuf{protoc{artifact='com.google.protobuf:protoc:3.5.1'//也可以配置本地编译器路径}generateProtoTasks{all().each{task->task.builtins{removejava}task.builtins{java{}//生产java源码}}}}
在完成了上述配置之后,执行一下rebuild方法,这样我们就能够自动生成proto java class文件了。
2.、基本调用
下面我们在Module工程中调用一下我们生成的文件,我们先首先生成一个Person对象,然后把转换的byte[]再解析一下查看结果是否正确,代码如下:
varperson1=PersonProto.Person.newBuilder().setName("Tom").setId(111).setBoo(false).setEmail("123@123.com").setPhone("123456789").build()tvData.setOnClickListener{vardataTemp=PersonProto.Person.parseFrom(person1.toByteArray())LogUtil.instance.d(dataTemp.toString())//mHandler.sendEmptyMessage(1)}
执行运行之后,我们能看到正确的输出结果:
com.example.demowork1D/message:name:"Tom"id:111email:"123@123.com"phone:"123456789"
“Android中的Protobuf怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!
推荐阅读
-
怎么使用Android基准配置文件Baseline Profile方案提升启动速度
-
HTML5如何实现禁止android视频另存为
-
学java好还是学php好?
-
Android如何实现多点触控功能
-
android怎么实现多点触摸应用
-
Android怎么实现手势划定区域裁剪图片
-
android怎么实现简单的矩形裁剪框
-
Android单选多选按钮怎么使用
-
Android中如何利用oncreate获取控件高度或宽度
Android中如何利用oncreate获取控件高度或宽度本篇内容...
-
Android中怎么使用onSaveInstanceState()方法
Android中怎么使用onSaveInstanceState()方法...