- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
添加 Square 的 Wire 后Android 项目中的 Protobuf 支持库,我在编译期间遇到以下 D8 异常:
D8: Program type already present: com.google.protobuf.DescriptorProto$ExtensionRange$ProtoAdapter_ExtensionRange
线路依赖:实现'com.squareup.wire:wire-runtime:2.2.0'
Gradle 的 dependencyInsight
揭示了我项目中的另一个依赖项,它传递地引入了 com.google.protobuf.nano:protobuf-javanano:3.1.0
。所以我添加了一个排除:
implementation ('com.google.vr:sdk-base:1.100.0'){
exclude group: 'com.google.protobuf.nano'
}
但这并没有解决问题。
是什么让 D8 悲伤,我怎样才能让它再次快乐?
更新
有问题的设置是:有 3 个模块 A
、B
、C
。 A
依赖于 B
和 C
。 B
和 C
都托管在内部 maven 服务器上,它们每个都依赖于具有以下 POM 条目的 wire-runtime
:
<dependency>
<groupId>com.squareup.wire</groupId>
<artifactId>wire-runtime</artifactId>
<version>2.3.0-RC1</version>
<scope>compile</scope>
</dependency>
我已经尝试过 Wire 版本 2.2 和 2.3.0。当 A
仅依赖于 B
或仅依赖于 C
时,一切都很好,但是当 A
依赖于两者时,D8 变得很糟糕B
和 C
。
那么如何依赖多个传递依赖于 Wire 的模块呢?
最佳答案
D8难过的原因
当您运行 Wire code gen 时,它会在您的项目中创建一些 Java 源文件,所有其他 Wire-code 生成的代码都依赖这些文件。 com.google.protobuf.DescriptorProto
就是这样一个文件。因此,当您依赖两个使用 Wire 的模块时,您有两个模块都包含一个具有相同名称和包的 Java 源文件,并以重复的 .class 文件结束。这些 .class 文件是你的库模块打包输出的一部分(不是传递依赖)所以再多的 gradle exclude
也无济于事(除非你知道一些我不知道的 Gradle 恶作剧?...) .
可能的解决方案
在库模块中设置打包选项以包含 java 源代码,这样您仍然可以编译,但在打包 aar 时排除 .class 文件。我试过了,但无法使打包选项真正排除 .class 文件。我对这种方法并不狂热,即使它有效,所以我放弃了它。
(未尝试,可能可行)将 Wire 生成的 com.google.protobuf
源文件 bundle 到您自己的单独库中,以便它们成为传递依赖项。您可能希望在运行 Wire 后编写一个 gradle 任务来处理此过程,以免每次都手动移动这些文件。在您的应用程序中包含上述库的单个副本,并使用 gradle exclude
忽略传递项。
最终,这感觉时间同步太多了,我选择使用 Protobuf Gradle Plugin
关于android - 使用 Square 的 Wire 时出现 D8 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51073505/
我一直在努力学习 TensorFlow,我注意到不同的函数用于相同的目标。例如,为了平方变量,我看到了 tf.square()、tf.math.square() 和 tf.keras.backend.
我正在创建一个应用程序,我需要在其中显示平方根符号和数字。例如 /¯¯¯¯¯¯¯¯¯¯¯ \/ (v^2) / T 我也希望显示数字的平方。任何人都可以帮助显示此类文本。此文本来自数据库并且可以
我自己无法解决以下问题,所以我搜索并找到了一个可行的算法。有人可以向我解释该算法背后的思维过程、数学或其他内容吗? 类型:https://www.codewars.com/kata/square-in
是否可以使用 Square Connect API 访问有关商家客户的任何信息?最理想的信息是客户为收据输入的电子邮件地址,但某些类型的唯一客户 ID 可以很好地确定回头客。 查看 Square Co
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在尝试使用 Font Awesome 堆叠来实现这一点 我试过两种方法,但都很丑。问题是 fa-square 和 fa-square-o 大小不同,所以当你堆叠它们时,它们不会对齐! my fid
这个惊人的code golf answer to 这个数字是 Loeschian 吗?整体而言: Python, 49 bytes lambda n:0in[(n-3*i*i+0j)**.5%1for
这个问题在这里已经有了答案: Is floating point math broken? (31 个回答) 去年关闭。 #include #include using namespace std
我有一个名为Complex的类,它具有实数和虚数的访问器方法,以及将复数表示为字符串的方法和获取复数大小的方法。我在实现最后三个方法 square()(对复数求平方)、modulusSquared()
有没有办法使用 Square Connect API 获取通过网络钩子(Hook)发送的付款 ID 并找到关联的订单 ID? 我发现文档中列出的付款对象 (https://docs.connect.s
你可以有一个父类(super class) Shape,Square 和 Rectangle 是两个子类,但是你可以有 Square 子类 Rectangle,因为 Square 是一个四边相等的特殊
我正在尝试在 Google Search Console 中为 Weebly/Square 网站使用 PageSpeed Insights 并收到错误消息: 灯塔返回错误:NOT_HTML。提供的页面
我有一个包含 A 列和 B 列的数据框。我想创建第三列,它是两列平方和的平方根。 以下是我的示例数据: A B 10 7 10 8 9 8 10 11 13 5 3 0 12 8
给定以下二维点: 213 106.8 214 189 214 293.4 213 324 223 414 我想找到穿过它们的最小二乘垂直轴线的方程。我的计划是得到一个线方程,这样我就可以测试后续点到最
我的 WPF 项目中有一个 UniformGrid 对象,它有 2 行和 3 列,其宽度和高度设置为自动(两个对齐方式都设置为拉伸(stretch))。 这个网格将容纳 6 个正方形,我想尽可能多地填
我发布此问题是因为,我的代码没有在正确的位置停止迭代。谁能让我确定哪里出了问题? 一切工作正常(我一直认为这是现实中的错误。) 问题: 1)在每次迭代中,我都在最小化不幸的是,它没有正确地最小化(非常
“方 block ” 输入 : 棋盘大小 m × n (m, n ∈ {1,...,32}),三元组列表 (i, j, k) , 其中 i ∈ {1,...,m}, j ∈ {1,...,n}, k
我正在尝试为 Square Connect API 开发一个包装器。我正在寻找沙盒帐户或将测试数据导入新帐户的方法,以便我可以快速开始开发方面的工作。 谢谢! 最佳答案 为了供从 Google 登陆这
我有一个任务,我发现它非常困难。任何帮助将不胜感激。 通过创建 Shape 类 Circle、Square 和 Triangle 来构建层次结构。对于这些派生类,创建默认构造函数和构造函数,其参数可以
题目地址: https://leetcode.com/problems/maximal-square/description/ 题目描述 Given a 2D binary matrix fill
我是一名优秀的程序员,十分优秀!