构建Release包时遇Duplicate class a.a冲突问题求助
Android Release构建重复类冲突解决方案
问题说明
构建Release版本时触发以下错误:
Duplicate class a.a found in modules jetified-android-sdk-1.7.26-runtime (com.cashfree.pg:android-sdk:1.7.26) and jetified-adsdk-AN-1.15.16-runtime (adsdk-AN-1.15.16.aar)
对应的App级build.gradle配置片段:
implementation 'com.cashfree.pg:android-sdk:1.7.26' implementation files('libs/adsdk-AN-1.15.16.aar') //Dependencies used by all payment modes implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'com.android.volley:volley:1.1.1' implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
关于a.a的解释:这是因为两个库在Release构建阶段开启了代码混淆,原本的类名被混淆工具压缩成了a.a这类极简名称,巧合的是两个库中都有类被混淆成了这个名字,最终导致重复类冲突。
解决办法
1. 排除重复依赖模块
先通过Gradle命令查看完整依赖树,定位重复类所属的具体模块:
./gradlew app:dependencies
找到冲突模块后,在依赖声明中排除该模块。比如发现Cashfree SDK包含了和aar重复的模块,修改依赖为:
implementation ('com.cashfree.pg:android-sdk:1.7.26') { exclude group: '冲突模块的group名', module: '冲突模块的name名' }
如果暂时无法定位具体模块,也可以临时尝试直接排除冲突类(不推荐长期使用,可能引发其他运行时问题):
android { packagingOptions { exclude 'a/a.class' } }
2. 避免二次混淆已混淆的库
如果引入的aar包本身已经是混淆过的成品,可以在混淆规则文件proguard-rules.pro中添加规则,不对该库的类进行二次混淆:
-keep class com.adsdk.actual.package.** { *; }
(需要替换成aar包实际的包名,可通过解压aar文件查看内部目录结构获取)
3. 升级库版本尝试解决
尝试将Cashfree SDK或广告SDK升级到最新稳定版本,新版本可能修复了混淆导致的类名碰撞问题。例如升级Cashfree SDK:
implementation 'com.cashfree.pg:android-sdk:最新稳定版本号'
内容的提问来源于stack exchange,提问作者WISHY
相关产品推荐
相关产品推荐

