在 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。