求助:Dex合并失败,Program type already present冲突问题
解决Android Dex合并失败:Program type already present错误
这个Dex合并错误的核心原因是你的项目同时混用了AndroidX库和旧版Support Library依赖,导致android.support.v4.os.ResultReceiver$1这个类在多个依赖包中重复出现,Dex合并时无法处理重复类。
从你的依赖配置来看,问题出在这几个地方:
- Anko 0.10.5版本依赖的是旧版Support Library,而你已经在使用AndroidX的
androidx.appcompat、androidx.cardview等库; - 你用的
android.arch.persistence.room是旧版Support Library体系的Room,和AndroidX不兼容; lifecycle-extensions:2.0.0-alpha1也是旧版生命周期库,同样和AndroidX冲突。
下面是具体的解决步骤:
1. 升级依赖到AndroidX兼容版本
首先更新你的版本配置和依赖项,确保所有库都属于AndroidX体系:
ext { anko_version='0.11.0' // 这个版本开始支持AndroidX support_lib='1.6.1' // 改用稳定版的AndroidX库,避免alpha版本的兼容性问题 room_lib = "2.5.0" // AndroidX版本的Room } dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" implementation "androidx.cardview:cardview:$support_lib" implementation "com.google.android.material:material:$support_lib" implementation "androidx.appcompat:appcompat:$support_lib" implementation "org.jetbrains.anko:anko:$anko_version" implementation "androidx.lifecycle:lifecycle-extensions:2.2.0" // AndroidX版本的生命周期扩展库 implementation "androidx.room:room-runtime:$room_lib" // AndroidX版本的Room运行时 annotationProcessor "androidx.room:room-compiler:$room_lib" // AndroidX版本的Room编译器 }
2. 开启AndroidX自动迁移
在项目根目录的gradle.properties文件中添加以下配置,让Jetifier自动转换第三方库的旧版Support依赖为AndroidX:
android.useAndroidX=true android.enableJetifier=true
Jetifier会帮你处理Anko这类第三方库的依赖转换,不需要手动修改它们的源码。
3. 清理并重建项目
最后,清理项目缓存并重新构建,确保所有依赖都正确同步:
- 终端执行命令:
./gradlew clean - 在Android Studio中点击菜单栏的
Build -> Rebuild Project
这样操作后,重复类的冲突应该就能解决了。另外建议尽量避免使用alpha版本的库,稳定版的库兼容性和可靠性都会更好。
内容的提问来源于stack exchange,提问作者Anil Ugale
相关产品推荐
相关产品推荐

