gpt4 book ai didi

java - 添加第三方.aar文件后无法合并dex

转载 作者:行者123 更新时间:2023-12-03 05:49:54 30 4
gpt4 key购买 nike

我遇到了unable to merge dex许多帖子似乎提示的问题。经过一番研究,我想我找到了问题的根源,但我不知道如何着手解决它。

我目前正在整合各种第三方组件来创建一个 Android 应用程序。它由以下部分组成:

  • app : 应用程序本身,它是一个最小的应用程序,带有从 Android Studio
  • 创建的 Kotlin Activity
  • libs : 两个 .aar 文件,A.aar 和 B.aar,其中 A.aar 依赖于 B.aar
  • base : 第三方 java 模块,提供一些接口(interface)、辅助函数并包含它们的一些依赖项。这个模块有它自己的 build.gradle 文件。

  • 我按照以下步骤集成了它们:
  • 如果我添加 base作为 app 的依赖项, 一切都建立
  • 当我在应用程序的 build.gradle 中添加 A.aar 作为依赖项时,它仍然会构建
  • 然后,当我添加 B.aar 作为应用程序的依赖项( implementation B.aar )时,gradle 构建失败并出现错误:Unable to merge dex .

  • 查看 Gradle 堆栈跟踪,我发现它在提示多个 dex 文件定义 Lcom.google.common.io.ByteSink ,这似乎是 Google 的 Guava 库。

    使用 Android Studio 中的 Project View ,B.aar 似乎实际上在其中包含 18.0 版的 Guava(在“classes.jar”部分下)。我认为这与 base 冲突的 implementation guava 20.0 在其 build.gradle 中的依赖行。

    因此,我想我已经找到了冲突的根源(2 个不同版本的 Guava 碰撞),但我不知道如何继续。第三方将 Guava 打包到 .aar 中是错误的吗?如果是这样,除了要求第三方将其删除之外,我是否有任何解决此问题的方法?

    我们尝试过但没有奏效的事情:
  • 使用 exclude implementation 中的声明包含 AAR 的语句(我怀疑它可能仅适用于外部依赖项,不适用于 AAR 中内置的代码)
  • 使用 preDexLibraries (true 为我们中的一些人工作,false 为其他人工作——这不是解决方案!)

  • 我更像是一个 C++/C 人,所以我可能需要掌握一些特定于 Java 的概念。我提前感谢您的帮助。

    最佳答案

    我们找到的唯一解决方案是对第三方 AAR 执行以下操作:

  • 使用 .zip 文件编辑器打开 AAR 文件(例如:7-zip)
  • 在 AAR
  • 中打开 classes.jar
  • 导航到 com目录
  • 删除google子目录

  • 然后我们在 gradle 文件中添加了 guava 作为依赖项
    它有效,这是正确的做法,我们正在等待第三方提供商的同意。

    关于java - 添加第三方.aar文件后无法合并dex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48361618/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com