在Android中如何使用Protobuf上传协议

在 Android 中使用 Protobuf(Protocol Buffers)主要分为以下几个步骤:


✅ 1. 添加 Protobuf 插件和依赖

在项目的 build.gradle(Project 级)文件中添加 Google 的 Maven 仓库(通常默认已有):

复制代码
buildscript {
    dependencies {
        classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.4' // 最新版本可查 MavenCentral
    }
}

在模块级的 build.gradle(通常是 app/build.gradle)中:

复制代码
plugins {
    id 'com.android.application'
    id 'com.google.protobuf'
}

android {
    // ...
}

dependencies {
    implementation 'com.google.protobuf:protobuf-javalite:3.24.0' // 推荐使用 javalite 版本
}

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.24.0' // 对应版本
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                java {
                    option 'lite' // 使用 lite 版本更适合 Android
                }
            }
        }
    }
}

✅ 2. 创建 .proto 文件

src/main/proto/ 目录下创建 .proto 文件,例如:

person.proto

复制代码
syntax = "proto3";

option java_package = "com.example.myapp"; // 替换为你的包名
option java_outer_classname = "PersonProto"; // 生成的外部类名

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
}

✅ 3. 编译生成 Java 类

构建项目(Build > Rebuild Project./gradlew build)后,Gradle 会自动生成 Java 类(在 build/generated/ 目录下)。

你可以这样使用:

复制代码
// 创建对象
PersonProto.Person person = PersonProto.Person.newBuilder()
    .setName("Alice")
    .setId(123)
    .setEmail("alice@example.com")
    .build();

// 序列化
byte[] bytes = person.toByteArray();

// 反序列化
PersonProto.Person parsed = PersonProto.Person.parseFrom(bytes);

✅ 4. Protobuf 使用建议(在 Android 中)

  • 推荐使用 protobuf-javalite:因为它是为移动端优化的,体积更小,依赖更少。

  • 避免嵌套太多层次的 message:保持结构简单,便于维护和性能更好。

  • 可以结合 Room 使用 Protobuf 类型作为字段:需要自定义 TypeConverter。

相关推荐
聆春烟雨簌簌6 分钟前
LangChain4j使用文档
开发语言·python
程序员小羊!7 分钟前
12.Java 多线程编程
java·开发语言
xuhaoyu_cpp_java13 分钟前
项目学习(三)代码生成器
java·经验分享·笔记·学习
乐观勇敢坚强的老彭13 分钟前
C++信息学奥赛lesson1
java·开发语言·c++
San813_LDD18 分钟前
[深度学习] 数据序列化格式对比:以日志级别配置为例
xml·java·前端
jllllyuz20 分钟前
MATLAB实现滚动轴承故障诊断(外圈故障)
开发语言·人工智能·matlab
2601_9574188021 分钟前
告别OTG碎片化!Android MTP协议深度解析与高性能通信方案
android
故渊at22 分钟前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
github_czy22 分钟前
更加优雅的类型检查与传参---mcp源码分析
java·服务器·开发语言
专注_每天进步一点点27 分钟前
IDEA中,Apifox Helper 的 2.0.15-243版本的插件 导出指定的接口,入参的中文名为空,描述为空
java·ide·intellij-idea