You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android编译遇DexArchiveMergerException:重复类问题求助

解决Android Dex合并时的重复类冲突问题

你遇到的核心问题是SA.aar和com.google.ar:core:1.12.0两个依赖包包含了完全重复的类——不管是混淆后的短类名如a.a.a,还是Google的内部类com.google.a.a.a,这直接导致D8合并Dex文件时抛出冲突错误。下面是几个可行的解决思路,按优先级从高到低排列:

1. 先理清依赖关系,排查重复来源

首先用Gradle命令查看项目依赖树,确认AR Core是直接引入还是间接依赖的,以及SA.aar是否内置了AR Core的代码:

# macOS/Linux
./gradlew app:dependencies

# Windows
gradlew.bat app:dependencies

在输出里搜索com.google.ar:core,看看它的引入路径。如果SA.aar本身已经依赖了AR Core,那你可能不需要再单独引入AR Core,直接去掉项目中对com.google.ar:core的依赖即可。

2. 排除重复的依赖模块

如果必须同时保留两个依赖,可以在引入其中一个时排除重复的包。比如如果是直接引入AR Core,就排除和SA.aar重复的类所在的包:

implementation 'com.google.ar:core:1.12.0' {
    // 排除Google内部重复的包
    exclude group: 'com.google.a', module: 'a'
}

⚠️ 注意:混淆后的a.a.a这类类通常没有明确的包组信息,这种方法可能不适用,需要用下面的pickFirst规则。

3. 使用Gradle的pickFirst规则强制选择其中一个类

在你的app模块的build.gradle文件的android块中添加packagingOptions,告诉构建工具遇到重复类时优先选择第一个找到的版本:

android {
    // 其他已有配置...
    packagingOptions {
        pickFirst 'a/a/a.class'
        pickFirst 'a/a/b.class'
        pickFirst 'com/google/a/a/a.class'
        pickFirst 'com/google/a/a/b.class'
    }
}

使用前要确认这两个依赖中的重复类是完全一致的,或者你选择的版本更适配项目,否则可能会导致运行时的类版本不兼容问题(比如方法找不到、逻辑错误等),一定要做好全面测试。

4. 升级AR Core版本到最新稳定版

旧版本的AR Core可能包含一些已经被移除或重构的内部类,尝试升级到最新的稳定版本,大概率能解决重复类的问题:

implementation 'com.google.ar:core:1.32.0' // 替换为最新稳定版,可根据官方信息调整

新版本的AR Core通常会优化内部结构,避免这类和第三方库的冲突。

5. 优化SA.aar的打包方式(如果可控)

如果SA是你们团队内部开发的模块,或者你能联系到提供者,建议让他们修改SA模块的构建配置:不要将AR Core的代码直接打包进aar,而是改为通过Gradle依赖引入AR Core。比如在SA模块的build.gradle中:

// 不要把AR Core的class文件打包进aar,而是用依赖
implementation 'com.google.ar:core:xxx'

这样你的主项目引入SA时,会通过传递依赖获取AR Core,不会出现重复打包的问题。


内容的提问来源于stack exchange,提问作者Nouman Shah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:54:07