gRPC protobuf不能用kotlin编译(Android Studio 3.0)

我创建了一个gRPC项目,与https://github.com/grpc/grpc-java/tree/master/examples/android/helloworld中用于android项目的示例gRPC非常相似

我第一次得到我自己的项目与我自己的简单的.proto文件编译没有任何错误。 我只是复制和粘贴所有重要的build.gradle部分。 下面的版本改变了我的MainActivity Kotlin代码。

但现在,我已经添加了一些更多的我的.proto文件,Gradle无法建立我的项目。 .proto文件是正确的,我已经尝试添加它作为依赖compileDebugKotlin {}和compileReleaseKotlin {}但没有任何工作。 我得到以下错误消息,任务:generateDebugProto未定义。

但我很困惑,因为当我添加一个换行符到我的build.gradle并单击在Android Studio中立即同步时,Gradle同步成功完成,并在gradle日志中看到以下几行:

 :app:extractDebugProto :app:extractIncludeDebugProto :app:extractProto :app:generateDebugProto 

我做错了什么?


我的项目build.gradle

 // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { ext.kotlin_version = '1.2.0' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.google.protobuf:protobuf-gradle-plugin:0.8.3" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() mavenCentral() } } task clean(type: Delete) { delete rootProject.buildDir } 

我的模块级build.gradle

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.protobuf' android { compileSdkVersion 26 ext.buildType = "" defaultConfig { applicationId "com.my.appr" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { buildType = "Release" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { buildType = "Debug" } } sourceSets { debug.java.srcDirs += 'build/generated/source/proto/debug/java' debug.java.srcDirs += 'build/generated/source/proto/debug/grpc' debug.java.srcDirs += 'build/generated/source/proto/debug/javalite' release.java.srcDirs += 'build/generated/source/proto/release/java' release.java.srcDirs += 'build/generated/source/proto/release/grpc' release.java.srcDirs += 'build/generated/source/proto/release/javalite' main.proto.srcDirs += 'src/main/proto' } //preBuild.dependsOn(":generateDebugProto") } protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.5.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.8.0' // CURRENT_GRPC_VERSION } } generateProtoTasks { all().each { task -> task.plugins { javalite {} grpc { // Options added to --grpc_out option 'lite' } } } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation 'io.grpc:grpc-okhttp:1.8.0' // CURRENT_GRPC_VERSION implementation 'io.grpc:grpc-protobuf-lite:1.8.0' // CURRENT_GRPC_VERSION implementation 'io.grpc:grpc-stub:1.8.0' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' } //preBuild.dependsOn ":generate"+buildType+"proto" 

4个小时后,我可以解决问题!

由于一些奇怪的原因,我不得不添加这个代码块:

 task.builtins { remove java } 

到我的模块级build.gradle

 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'com.google.protobuf' android { compileSdkVersion 26 ext.buildType = "" defaultConfig { applicationId "com.my.appr" minSdkVersion 15 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { buildType = "Release" minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { buildType = "Debug" } } sourceSets { debug.java.srcDirs += 'build/generated/source/proto/debug/java' debug.java.srcDirs += 'build/generated/source/proto/debug/grpc' debug.java.srcDirs += 'build/generated/source/proto/debug/javalite' release.java.srcDirs += 'build/generated/source/proto/release/java' release.java.srcDirs += 'build/generated/source/proto/release/grpc' release.java.srcDirs += 'build/generated/source/proto/release/javalite' main.proto.srcDirs += 'src/main/proto' } //preBuild.dependsOn(":generateDebugProto") } protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.5.0' } plugins { javalite { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" } grpc { artifact = 'io.grpc:protoc-gen-grpc-java:1.8.0' // CURRENT_GRPC_VERSION } } generateProtoTasks { all().each { task -> task.builtins { ///////////////////////////////7 remove java // THIS IS THE SOLUTION // } /////////////////////////////// task.plugins { javalite {} grpc { // Options added to --grpc_out option 'lite' } } } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" implementation 'com.android.support:appcompat-v7:26.1.0' implementation 'com.android.support.constraint:constraint-layout:1.0.2' testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation 'io.grpc:grpc-okhttp:1.8.0' // CURRENT_GRPC_VERSION implementation 'io.grpc:grpc-protobuf-lite:1.8.0' // CURRENT_GRPC_VERSION implementation 'io.grpc:grpc-stub:1.8.0' // CURRENT_GRPC_VERSION implementation 'javax.annotation:javax.annotation-api:1.2' } //preBuild.dependsOn ":generate"+buildType+"proto"