【问题标题】:Gradle: Multiple dex files define LR [duplicate]Gradle:多个dex文件定义LR [重复]
【发布时间】:2018-01-08 16:21:08
【问题描述】:

所以我正在尝试使用 Tensorflow-lite 版本 0.1.1。

但是当我在 gradle 依赖项中添加库时,我得到:

错误:将字节码转换为dex时出错:原因: com.android.dex.DexException: 多个dex文件定义LR;

我使用的是 AGP 3.1.0-alpha5,但我在 alpha06、alpha07 中也遇到错误(不同的错误)...我使用的是 multidex,但它设置正确并且在没有 tensorflow 的情况下工作。

我试图删除 D8(这个东西 here)并更改 gradle 包装器版本......但仍然没有运气。

我不太明白这个错误是什么意思,所以谁能解释一下Multiple dex files define LR是什么意思?或者给出一些解决方案?

编辑1:

我更感兴趣的是什么是类/文件LR。我确实明白一个类在我的 dex 文件中定义了两次,但我不明白这个类是关于什么的。所以解决问题变得更加困难。

感谢任何帮助!

【问题讨论】:

  • LR 是重复的类。这实际上是因代码而异,但实际上是对该问题的欺骗^
  • 您好,佐伊,感谢您的帮助。尽管这些问题非常相似,但我相信我的问题有一些特殊性。另一个问题中的问题可以通过简单地在应用程序中设置 Multidex 来解决,但在我的情况下,Mutlidex 已经设置好了。异常也不同(DexException vs ProcessException)
  • 您知道大多数 NPE 问题都被标记为欺骗的 NPE 问题,对吧?堆栈跟踪不需要匹配 100%
  • 对于“LR;”,它是没有包名的资源类“R”。在 dex 文件中,开头的 L 和结尾的 ;是装饰品。
  • 这正是问题所在,伊莎贝拉。 Tensorflow lite 没有任何软件包。如果你发表一个回答,我可以接受它

标签: android gradle android-gradle-plugin tensorflow-lite


【解决方案1】:

当您将重复的 namespace.classname 编译到代码库中时会导致此错误。

这通常是由复制依赖项引起的。通常,罪魁祸首是“传递依赖”,也就是依赖的依赖。

您可以查看您的 gradle android 资源树以找到罪魁祸首。然后对包含它的依赖项使用transitive = false。

如果您只需要删除该子依赖项的部分传递依赖项,请改用 exclude。有很多例子可以说明如何做到这一点。

我相信还有一个 gradle 标志说“使用最新”并将其余部分搞砸,但这很糟糕,你应该故意使用你的版本。希望有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2018-07-08
    相关资源
    最近更新 更多