Protobuf 通信 ,android示范

Protobuf 通信 ,android示范_第1张图片

Protocol Buffers 通信:
//感觉跟自定义私有协议差不多,只是proto使用起来会更方便一点,比如数据的转换和拓展...

 1、引入辅助插件protobuf-gradle-plugin 
// 最新版本请参考官网 https://github.com/google/protobuf-gradle-plugin 
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.12'   // (项目最外层build.gradle)
 
 2、导入 protocol库 (考虑到文件大小,Android采用精简版 protobuf-lite)
// 具体版本请参考 https://search.maven.org/artifact/com.google.protobuf/protobuf-lite
compile "com.google.protobuf:protobuf-lite:3.0.1"    //app层build.gradle

3、应用插件
apply plugin: 'com.google.protobuf'   // app层build.gradle

4、其他配置
// app层build.gradle
protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite { }
            }
        }
    }
}

5、编写.proto文件
在src\main\  目录下新建proto文件夹 ,新建 xxx.proto文件
// 版本号为3
syntax = "proto3";
//自动生成的对应的Java文件放这个目录下
option java_package = "com.myProto.pack";
// java_multiple_files 为true时,生成的Java类将是包级别的,否则会在一个包装类中。
option java_multiple_files = true;
// 该文件对应的Java类名,不用写了,因为 message Person已经写了
//option java_outer_classname = "Person";

message Person {
     //proto3 已经取消了默认值的设置。
     // 这里的1 2 3是字段号,不是默认值
      string name  =1;
      bool isMan   =2;
      int32 age    =3;
      double money =4;
      string phone =5 ;
}
6、编译工程,系统就会自动生成对应的Java文件。
7、Java层使用和解析数据
private void test(){
    Person person =  Person.newBuilder().
            setName("aivin666")
            .setIsMan(true)
            .setAge(20)
            .setMoney(1000)
            .setPhone("13650909087")
            .build();
    byte[] dataSend =  person.toByteArray();
    // 对象转byte[]
    WkLogTool.showLog(WkByteBitTools.byte2HexStr(dataSend));

    Person result  = Person.parseFrom(dataSend);
    //byte[]转对象
    WkLogTool.showLog( result.getName());
}

代码下载 https://gitee.com/hnyer/Proto_android_Demo/blob/master/ReadMe.md

你可能感兴趣的:(智能家居,android)