如何将protobuf添加到Flatter/kotlin android项目中
我正在尝试将protobuf添加到我的颤振项目中。这是树如何将protobuf添加到Flatter/kotlin android项目中,android,flutter,kotlin,gradle,protocol-buffers,Android,Flutter,Kotlin,Gradle,Protocol Buffers,我正在尝试将protobuf添加到我的颤振项目中。这是树ls flatter\u项目: android docker ios protobuf Readme.md test assets docs lib pubspec.lock build gen oboe pubspec.yaml .proto文件位于protobuf文件夹中 我按照上面的指示去做。以下是我的build.gradle文件: flatter\u项目/an
ls flatter\u项目
:
android docker ios protobuf Readme.md test
assets docs lib pubspec.lock
build gen oboe pubspec.yaml
.proto
文件位于protobuf
文件夹中
我按照上面的指示去做。以下是我的build.gradle文件:
flatter\u项目/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'
}
}
//...
//...
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/'
}
}
}
//..
flatter\u项目/android/app/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'
}
}
//...
//...
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 {
}
我无法在
main activity.kt上执行import proto\u pack
,键入MessageResponseCode
也不会有任何提示。首先,我看不到protobuf编译器的配置,如果未设置,它将在系统路径中搜索它(是否可用?)。通常为了避免问题,我使用分布式版本的编译器,在appgradle构建文件中配置protobuf配置。我还使用lite运行时,因为它是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'
}
}
}
}
}
尝试编译应用程序时,您应该会在flatter\u项目/build/app/generated/source/proto/debug/java/proto\u包中看到java生成的文件
如果是这样的话,您的课程应该可以在MainActivity中使用
最后一点,您的proto文件在语法上不正确,但我假设它只是示例。我应该将protobuf源放在哪里?请记住,它们位于根目录中,而不是android目录。您已将proto源目录配置为项目根目录(flatter_project/)中的“protobuf/proto_java”,因此它应该放在您放置它们的位置。我应该保留多少gradle文件和您的文件?我迷路了我把你的代码粘贴到我的代码里,我得到了protoc:stdout:。stderr:datasets/google_message3/benchmark_message3_1.proto:未找到文件。
尝试编译我的应用程序后。请看,我打开了一个悬赏配置,您只需要在您的android/app/build.gradle文件中添加块,而无需更改您的配置。至于您的错误,似乎您正试图在proto文件中包含datasets/google\u message3/benchmark\u message3\u 1.proto
,但在配置的proto源目录中找不到它,或者您正试图使用一些包含datasets/google\u message3/benchmark\u message3\u 1.proto的文件,这些文件同样不存在。如果没有完整的proto文件,就很难进行调试。