Android项目引入TheoPlayer与Pushly SDK出现重复类错误的解决咨询
Android SDK重复类冲突解决指南
问题背景
项目中引入两个外部SDK:
// TheoPlayer Android SDK implementation ':theoplayerApi21@aar' // Pushly notification SDK implementation 'com.pushly.android:pushsdk:1.1.9'
运行时出现重复类错误:
Duplicate class a.a found in modules jetified-pushsdk-1.1.9-runtime (com.pushly.android:pushsdk:1.1.9) and jetified-theoplayerApi21-runtime (:theoplayerApi21:) Duplicate class b.a found in modules jetified-pushsdk-1.1.9-runtime (com.pushly.android:pushsdk:1.1.9) and jetified-theoplayerApi21-runtime (:theoplayerApi21:) Duplicate class c.a found in modules jetified-pushsdk-1.1.9-runtime (com.pushly.android:pushsdk:1.1.9) and jetified-theoplayerApi21-runtime (:theoplayerApi21:)
推测原因是两个SDK混淆后使用了相同的单字母类名(a.a、b.a等),且无法排除任一SDK,现针对你提出的方向及其他可行方案给出具体实施步骤:
方案一:规范SDK混淆规则(仅适用于可修改SDK源码/配置的场景)
如果能拿到其中一个SDK的混淆配置文件(ProGuard/R8规则),修改规则避免极简类名冲突:
- 添加重打包规则,指定混淆后的专属包前缀:
-repackageclasses 'com.theoplayer.obfuscated' # 或者针对Pushly SDK:-repackageclasses 'com.pushly.obfuscated' - 或者禁用单字母类名生成:
-dontusemixedcaseclassnames
如果是第三方闭源SDK,你无法修改其内部混淆规则,直接联系SDK官方反馈问题,要求他们调整混淆命名策略(正规SDK通常会用专属包名来避免这类冲突)。
方案二:绕开SDK自带混淆(项目未用ProGuard的情况)
SDK本身的混淆是发布前完成的,无法直接取消,但可以通过重打包工具修改SDK类名来解决冲突,以JarJar工具为例:
- 把冲突的SDK(比如
pushsdk-1.1.9.aar)解压,提取出内部的classes.jar文件 - 创建规则文件
rules.txt,将所有冲突的单字母类重命名到专属包下:rule a.** com.pushly.obf.a.@1 rule b.** com.pushly.obf.b.@1 rule c.** com.pushly.obf.c.@1 - 执行JarJar命令重打包:
java -jar jarjar.jar process rules.txt original-classes.jar renamed-classes.jar - 将重命名后的
renamed-classes.jar替换回原aar的对应位置,重新打包成aar,然后修改项目依赖为这个本地修改后的aar文件。
方案三:尝试禁用单个SDK的Jetifier
错误日志里的jetified-前缀说明项目启用了Jetifier(AndroidX兼容工具),可能是Jetifier处理后导致类名冲突,可以尝试禁用其中一个SDK的Jetifier:
在项目根目录的gradle.properties中添加:
# 禁用Pushly SDK的Jetifier android.jetifier.blacklist=pushsdk-1.1.9-runtime # 或者禁用TheoPlayer的Jetifier:android.jetifier.blacklist=theoplayerApi21-runtime
注意:禁用后要测试SDK功能是否正常,避免出现AndroidX兼容问题。
内容的提问来源于stack exchange,提问作者Makarand
相关产品推荐
相关产品推荐

