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怎么使用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注恰卡编程网网站,小编将为大家输出更多高质量的实用文章!

    发布于 2022-02-07 23:14:26
    收藏
    分享
    海报
    0 条评论
    30
    上一篇:Node.js中module.exports和exports使用误区是什么 下一篇:怎么用Springboot +redis+Kaptcha实现图片验证码功能
    目录

      0 条评论

      本站已关闭游客评论,请登录或者注册后再评论吧~

      忘记密码?

      图形验证码