如何将 protobuf 添加到 flutter/kotlin android 项目中
How to add protobuf into flutter/kotlin android project
我正在尝试将 protobuf 添加到我的 flutter 项目中。这是树 ls flutter_project
:
android docker ios protobuf Readme.md test
assets docs lib pubspec.lock
build gen oboe pubspec.yaml
.proto
个文件在 protobuf
文件夹中
我按照 https://github.com/google/protobuf-gradle-plugin 上的说明进行操作。这是我的 build.gradle 个文件:
flutter_project/android/build.gradle
:
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'
}
}
//...
flutter_project/android/app/build.gradle
:
//...
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
main {
proto {
srcDir '../../protobuf/proto_java/'
}
}
}
//..
项目同步正常,但我无法在 MainActivity.kt
中导入任何原型文件。比如protobuf文件:
syntax = "proto3";
package proto_pack
enum MessageResponseCode {
}
我无法在 MainActivity.kt
上执行 import proto_pack
,输入 MessageResponseCode
也没有任何提示。
首先,我没有看到您对 protobuf 编译器的配置,如果未设置,它将在系统路径中搜索(是否可用?)。通常为了避免出现问题,我通过在应用 gradle 构建文件中配置 protobuf 配置来使用编译器的分布式版本。我也在使用精简版运行时,因为它是 Android.
的推荐方式
dependencies {
implementation "com.google.protobuf:protobuf-javalite:3.10.0"
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.10.0"
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {
option 'lite'
}
}
}
}
}
尝试编译您的应用程序,您应该会在 flutter_project/build/app/generated/source/proto/debug/java/proto_pack
中看到 java 生成的文件
如果是这样,您的 class 应该在 MainActivity 中可用。
最后一点,您的原型文件在语法上不正确,但我认为它只是为了示例。
我正在尝试将 protobuf 添加到我的 flutter 项目中。这是树 ls flutter_project
:
android docker ios protobuf Readme.md test
assets docs lib pubspec.lock
build gen oboe pubspec.yaml
.proto
个文件在 protobuf
文件夹中
我按照 https://github.com/google/protobuf-gradle-plugin 上的说明进行操作。这是我的 build.gradle 个文件:
flutter_project/android/build.gradle
:
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.1'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.14'
}
}
//...
flutter_project/android/app/build.gradle
:
//...
apply plugin: 'com.android.application'
apply plugin: 'com.google.protobuf'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 29
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
main {
proto {
srcDir '../../protobuf/proto_java/'
}
}
}
//..
项目同步正常,但我无法在 MainActivity.kt
中导入任何原型文件。比如protobuf文件:
syntax = "proto3";
package proto_pack
enum MessageResponseCode {
}
我无法在 MainActivity.kt
上执行 import proto_pack
,输入 MessageResponseCode
也没有任何提示。
首先,我没有看到您对 protobuf 编译器的配置,如果未设置,它将在系统路径中搜索(是否可用?)。通常为了避免出现问题,我通过在应用 gradle 构建文件中配置 protobuf 配置来使用编译器的分布式版本。我也在使用精简版运行时,因为它是 Android.
的推荐方式dependencies {
implementation "com.google.protobuf:protobuf-javalite:3.10.0"
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:3.10.0"
}
generateProtoTasks {
all().each { task ->
task.builtins {
java {
option 'lite'
}
}
}
}
}
尝试编译您的应用程序,您应该会在 flutter_project/build/app/generated/source/proto/debug/java/proto_pack
如果是这样,您的 class 应该在 MainActivity 中可用。
最后一点,您的原型文件在语法上不正确,但我认为它只是为了示例。