当前位置: 首页 > 知识库问答 >
问题:

在Android上使用最新gRPC插件时发生汇编错误->输入隐藏在--proto\u路径中(Gradle 7.0.1)

张伯寅
2023-03-14

我正在尝试更新一个Android项目以使用最新的gradle插件(7.0.1),从当前使用的3.6.4。为了做到这一点,考虑到该项目使用的是原型,我需要更新原型和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\u路径中被“C:/Users/phantom/AndroidStudioProjects/Protobuf/App/build/extracted include protos/debug/google/Protobuf/any.proto”隐藏。要么使用后一个文件作为输入,要么对--proto\u路径重新排序,使前一个文件的位置排在第一位。

从阅读错误时我所了解的情况来看,问题是现在在提取的proto和提取的include proto构建文件中都生成了proto文件,而后者将第一个文件隐藏起来。我已经检查过,在以前的版本中,文件仅在提取的protos构建文件中生成。有没有办法跳过在提取的include protos中生成文件?或者,为了能够组装项目,需要采取什么行动?

共有2个答案

商和雅
2023-03-14

遇到了同样的问题,在尝试了2天的每一个可能的gradle配置后。我只是手动删除了.../build/treted-prede-prededing-pros/debug/google/probuf/下的所有proto文件,错误消失了

薛烈
2023-03-14

我昨天遇到了同样的问题。这与其说是一个完整的答案,不如说是一个变通方法。这让我开始使用Google speech-to-text,但如果你添加了一个非测试版的文本到语音,这就行不通了,所以如果有人有更好的答案,请发帖。

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的版本。我不得不从最新的一次下调他们两人的评级。

 类似资料:
  • 我不能上传一个文件,我猜问题是因为输入对象是隐藏的! 对象结构为:

  • 问题内容: 我正在使用Selenium的WebDriver和Python编码。 有一个隐藏的输入字段,我试图在其中插入特定的日期值。该字段最初会产生一个日历,用户可以从中选择一个合适的日期,但是与直接插入合适的日期值相比,模拟起来似乎要复杂得多。 该页面的源代码如下所示: 我要在其中插入值的字段在哪里(它最初是空的,即:。 我了解WebDriver无法将值插入隐藏的输入中,因为常规用户无法在浏览器

  • 我面临一个棘手的问题。我用最新版本的cygwin在windows7/64位机器上运行PIG 0.11。 我是一个博客,我想按用户名排序,将同一用户的所有用户活动放在一起,以供下一行处理。 我正在启动commandprompt- 脚本是: 当我演示USERACTIVITIES_ORDERED时,我看到它进展顺利。但当我储存/倾倒垃圾时,我会面临一个棘手的问题。 它失败了,说:java。lang.Ru

  • 问题内容: 我有如下的bash脚本: 我希望当用户在终端上键入密码时,不应显示该密码(或应显示诸如*之类的内容)。我该如何实现? 问题答案: 只需向您的读取调用提供-s,如下所示:

  • 这意味着什么,我如何搜索我的字符串?

  • 我试图用依赖项混淆jar(尽管如果我将常规的单个jar设置为infle,同样的问题也会影响)。 我使用的是Java8,但我必须使用更新版本的Proguard和Proguard Maven插件,因为它涵盖了一些来自更高版本的jar依赖项(否则我会遇到“不支持的主要-次要版本”问题)。 当执行“mvn clean install”时,执行该步骤,但我得到一个“在pluginArtifacts中找不到p