Android:两个依赖,每个依赖同一个组件,触发DexArchiveMergerException

标签 android gradle dependencies dex

我有一种情况,我的项目由两个不同的库组成,这些库显然依赖于同一组件:

客户端应用程序的 gradle.build:

android {
...
}

dependencies {
...
implementation <dependency # 1>
implementation <dependency # 2>
...
}

我看到的错误:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:transformDexArchiveWithExternalLibsDexMergerForDebug'.

有问题的Android问题:
Program type already present: <package name>.<Component>

我们最近对这些依赖项之一进行了 gradle 更改,以期消除此错误:

build.gradle - 依赖#1
android {
...
}

dependencies {
...
api <dependency # 1>
api <dependency # 2>
...
}

但这种变化显然对结果没有影响。

我们启用了 multidex。该属性也对结果没有影响。

我什至将这段代码添加到我的客户端应用程序的 gradle 文件中:
configurations {
    runtime.exclude group: "<package name>", module: "<problem module>"
}

根据此处提供的示例:https://docs.gradle.org/current/userguide/dependency_types.html

我开始缺乏选择。

是否可以对一个、多个或所有 gradle 文件进行 gradle 配置更改以阻止这种情况?如果是这样,我有什么选择?

最佳答案

如果一个依赖项存在于单个模块的两个不同依赖项中,从而存在相同的包名称,则您可以忘记构建客户端应用程序。例如:

Dependency # 1 -> classes.jar -> <some package name> -> Component
Dependency # 2 -> classes.jar -> <THE SAME package name> -> Component

如果您有权修改这两个库,您将被迫更改其中一个的包名称。没有办法绕过它,没有办法摆脱它。

关于Android:两个依赖,每个依赖同一个组件,触发DexArchiveMergerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50008929/

相关文章:

android - 我如何将 Flutter (Dart) 连接到我的 Oracle 服务器?有人试过这个吗?

android - 适用于 Android 版本 2.3+ 的 WiFi 直连

maven - Gradle build.gradle 到 Maven pom.xml

spring - 此应用程序没有明确的/错误映射,因此您将其视为后备。 Spring Boot中的Thymeleaf解析异常

.net - 将 bindingRedirect 添加到 .Net 标准库

java - 用于 jar 依赖检测和可能的安全删除的 Eclipse 插件

java - Maven Spring 依赖库

android - 如何以编程方式在 Android 设备上处理 "install"文件

android - 如果手动迁移失败则删除 Realm

gradle - 如何使用 gradle 脚本 Kotlin 构建文件构建可运行的 ShadowJar?