Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将protobuf添加到Flatter/kotlin android项目中_Android_Flutter_Kotlin_Gradle_Protocol Buffers - Fatal编程技术网

如何将protobuf添加到Flatter/kotlin android项目中

如何将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

我正在尝试将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项目/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文件,就很难进行调试。