簡體   English   中英

在 Android 上使用最新的 gRPC 插件時出現組裝錯誤 -> Input 在 --proto_path (Gradle 7.0.1) 中有陰影

[英]Assemble error while using latest gRPC plugin on Android -> Input is shadowed in the --proto_path (Gradle 7.0.1)

我正在嘗試更新一個 Android 項目以使用它正在使用的當前 3.6.4 中的最新 gradle 插件 (7.0.1)。 為此,考慮到項目正在使用 protobuf,我需要更新 protobuf 和 gRPC 依賴項,因為當前的依賴項與最新的插件不兼容。

我已關注https://github.com/grpc/grpc-java以使用最新的依賴版本。 我將依賴項更新為以下版本:

implementation 'io.grpc:grpc-okhttp:1.40.1'
implementation 'io.grpc:grpc-protobuf-lite:1.40.1'
implementation 'io.grpc:grpc-stub:1.40.1'
compileOnly 'org.apache.tomcat:annotations-api:6.0.53'
protobuf "com.google.protobuf:protobuf-java:3.17.3"

我正在使用最新的 protobuf 插件

plugins {
    id 'com.google.protobuf' version '0.8.17'
}

並使用以下塊進行代碼生成

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.17.3"
  }
  plugins {
    grpc {
      artifact = "io.grpc:protoc-gen-grpc-java:1.40.1"
    }
  }
  generateProtoTasks {
    all().each { task ->
      task.builtins {
        java { option 'lite' }
      }
      task.plugins {
        grpc { option 'lite' }
      }
    }
  }
}

使用這些時 gradle 同步成功,問題是當我嘗試組裝項目時,出現以下錯誤:

任務 ':App:generateDebugProto' 執行失敗。 協議:標准輸出:。 標准錯誤:C:\\Users\\phantom\\AndroidStudioProjects\\Protobuf\\App\\build\\extracted-protos\\main\\google\\protobuf\\any.proto:輸入在 --proto_path 中被“C:/Users/phantom/AndroidStudioProjects/ Protobuf/App/build/extracted-include-protos/debug/google/protobuf/any.proto”。 要么使用后一個文件作為輸入,要么重新排序 --proto_path 以便前一個文件的位置在前。

根據我在閱讀錯誤時的理解,問題是現在在提取的原型提取的包含原型構建文件中都生成了 proto 文件,而后者掩蓋了第一個。 我已經檢查過,在以前的版本中,這些文件僅在提取的 protos構建文件中生成。 有沒有辦法跳過在extract-include-protos 中生成文件? 或者能夠組裝該項目的行動過程是什么?

我昨天遇到了同樣的問題。 這更像是一種解決方法,而不是完整的答案。 它讓我使用 Google 語音轉文本,但如果您添加文本轉語音的非測試版,它就不起作用,所以如果有人有更好的答案,請發布。

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.17.3'
    }
    plugins {
        javalite {
            artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0"
        }
        grpc {
            artifact = "io.grpc:protoc-gen-grpc-java:1.40.1"
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                // In most cases you don't need the full Java output
                // if you use the lite output.
                remove java
            }
            task.plugins {
                javalite {}
                grpc {
                    // Options added to --grpc_out
                    option 'lite'
                }
            }
        }
    }
}

implementation 'io.grpc:grpc-okhttp:1.40.1'
implementation 'io.grpc:grpc-protobuf-lite:1.25.0'
implementation 'io.grpc:grpc-stub:1.40.1'
compileOnly 'org.apache.tomcat:annotations-api:6.0.53'
protobuf "com.google.protobuf:protobuf-java:3.17.3"

implementation("com.google.cloud:google-cloud-speech:1.22.1") {
    exclude group: 'com.google.protobuf', module: 'protobuf-java'
    exclude group: 'com.google.api.grpc'
}

注意 grpc-protobuf-lite 和 google-cloud-speech 的版本。 我不得不將它們都從最新版本降級。

有同樣的問題,在嘗試了所有可能的 gradle 配置 2 天后。 我只是手動刪除了 ../build/extracted-include-protos/debug/google/protobuf/ 下的所有 proto 文件,錯誤消失了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM