在 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("[email protected]")
.build();
// 序列化
byte[] bytes = person.toByteArray();
// 反序列化
PersonProto.Person parsed = PersonProto.Person.parseFrom(bytes);
✅ 4. Protobuf 使用建议(在 Android 中)
-
推荐使用
protobuf-javalite
:因为它是为移动端优化的,体积更小,依赖更少。 -
避免嵌套太多层次的 message:保持结构简单,便于维护和性能更好。
-
可以结合 Room 使用 Protobuf 类型作为字段:需要自定义 TypeConverter。