前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android中protobuf的使用

Android中protobuf的使用

作者头像
杨永贞
发布2020-08-04 10:54:12
4.1K0
发布2020-08-04 10:54:12
举报

日常的总结,留作备忘。

Protobuf是一种灵活高效可序列化的数据协议,相于XML,具有更快、更简单、更轻量级等特性。支持多种语言,只需定义好数据结构,利用Protobuf框架生成源代码,就可很轻松地实现数据结构的序列化和反序列化。一旦需求有变,可以更新数据结构,而不会影响已部署程序。

使用Android studio3.2,在gradle中中配置:

在project的bulid.gradle中增加:

代码语言:javascript
复制
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'

在APP目录下的buid.gradle中,增加:

代码语言:javascript
复制
apply plugin: 'com.google.protobuf'
代码语言:javascript
复制
android {

sourceSets {
    main {
        // 定义proto文件目录
        proto {
            srcDir 'src/main/proto'
            include '*.proto'
        }
        java {
            srcDir 'src/main/java'
        }
      }
   }
}
代码语言:javascript
复制
dependencies {
//protobuf
implementation "com.google.protobuf:protobuf-java:3.1.0"
implementation ('com.squareup.retrofit2:converter-protobuf:2.2.0') {
    exclude group: 'com.google.protobuf', module: 'protobuf-java'
               }
}
代码语言:javascript
复制
//构建task
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.
            }
        }
    }
    //生成目录
    generatedFilesBaseDir = "$projectDir/src/generated"
}

在src/main的目录下,建立文件夹proto,所有的proto文件,放置在这里。如:

代码语言:javascript
复制
syntax = "proto3";
option java_package = "com.newcapec.protobuf";
message gps_data {
    int64 id = 1;
    string terminalId = 2;
    string dataTime = 3;
    double lon = 4;
    float speed = 6;
    int32 gpsStatus = 9;
}

protobuf数据类型:

然后,点击Sync Project就可以在 Generate/debug/文件夹下自动生成GpsData.java文件啦。这个文件不要改动也无需改动。

最后给个使用的demo,序列化和反序列化:

代码语言:javascript
复制
package com.newcapec.testsqllite.protobuf;

import com.google.protobuf.InvalidProtocolBufferException;
import com.newcapec.protobuf.GpsData;
public class Test {

    public static void main(String[] args){
        GpsData.gps_data.Builder build =  GpsData.gps_data.newBuilder();
        build.setId(1);
        build.setDataTime("20191018105706");
        GpsData.gps_data info = build.build();
        byte[] bt = info.toByteArray();
        System.out.println(bt);
        try {
            info =  GpsData.gps_data.parseFrom(bt);
            System.out.println(info);
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }

    }

}

输出结果:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-10-18 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档