Android中protobuf的使用

日常的总结,留作备忘。

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

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

在project的bulid.gradle中增加:

classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'

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

apply plugin: 'com.google.protobuf'
android {

sourceSets {
    main {
        // 定义proto文件目录
        proto {
            srcDir 'src/main/proto'
            include '*.proto'
        }
        java {
            srcDir 'src/main/java'
        }
      }
   }
}
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'
               }
}
//构建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文件,放置在这里。如:

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,序列化和反序列化:

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();
        }

    }

}

输出结果:

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • protobuf在java, Android下的使用总结

    Protobuf可替代Json,支持Java、C++、Python等语言,简单好用还节省内存流量,可利用Protobuf进行改造,替换原有的Json或者XML存...

    特立独行的猫a
  • 我的小工具,java版串口读写卡测试工具

    工作过程中,经常需要和卡片打交道,如何快速的读写卡,提高些工作效率呢?业余时间,搞了个读写卡测试工具,

    特立独行的猫a
  • 借一个项目谈Android应用软件架构,你还在套用MVP 或MVVM吗

    在《Android开发进阶,从小工到专家》一书的第26页中有这么一段话,说Android之父Andy Rubin在被采访时说过,在设计Android之初他...

    特立独行的猫a
  • Android中使用protobuf的具体示例

    Google Protocol Buffers 简称 Protobuf,类似 json 或 XML,是一种序列化结构数据的机制,但是比它们更小、更快、更简单。同...

    砸漏
  • 腾讯云Java SDK maven使用方式的详细介绍

    ①比较VS2019和VS Code,Visual Studio 2019支持C#/C++/Python/Node.js,安装VS2019,腾讯云好几种SDK都能...

    shawyang
  • 震惊!最全PyCharm教程

    PyCharm是一个用于计算机编程的集成开发环境(IDE),主要用于Python语言开发,由捷克公司JetBrains开发,提供代码分析、图形化调试器,集成测试...

    超蛋lhy
  • 腾讯云Java SDK maven使用方式的详细介绍

    ①比较VS2019和VS Code,Visual Studio 2019支持C#/C++/Python/Node.js,安装VS2019,腾讯云好几种SDK都能...

    用户7118204
  • Windows下使用Docker编译Android系统源代码

    最近进行Andorid性能优化的前期调研,后面要修改Andorid源代码插一些桩,提前把编译环境搞起来。官方推荐使用ubuntu,公司网络限制等等不好弄,所以尝...

    J_J
  • http常见状态码

    204 No Content:表示客户端发送给客户端的请求得到了成功处理,但在返回的响应报文中不含实体的主体部分(没有资源可以返回);

    程序员养成日记
  • kotlin, 一种新的android平台一级开发语言

    今天看到一则科技新闻, 大致内容是google将kotlin语言作为android应用开发的一级语言, 与java并驾齐驱, 这是一个开发界的大事件大新闻, 连...

    用户1608022

扫码关注云+社区

领取腾讯云代金券