引入android.arch.navigation导致Program type already present错误求助
解决Android导航组件与AndroidX的依赖冲突问题
这个错误的核心原因是依赖库的版本冲突:你使用的导航组件早期版本(1.0.0-alpha01)基于旧的Android Support库构建,但你的项目已经迁移到了AndroidX库,两者包含了重复的android.support.v4相关类,导致Dex合并时出现冲突。
为什么重构AndroidX提示“未找到使用情况”?
Android Studio的AndroidX重构工具主要检测项目中直接引用的Support库类,而导航组件的旧版本是间接引入Support库的,工具没有识别到这些隐藏的依赖,所以提示没有使用情况,但实际上这些类已经被添加到项目中了。
具体解决方案
1. 替换导航组件依赖为AndroidX版本
旧的android.arch.navigation包是基于Support库的,AndroidX对应的包是androidx.navigation。修改你的应用级build.gradle中的依赖:
// 替换之前的导航组件依赖 def nav_version = "1.0.0-alpha06" // 可选择适配AndroidX的版本,也可以使用更稳定的版本如2.5.3 implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"
2. 更新项目级gradle的Safe Args插件
同样,把项目级build.gradle中的Safe Args插件换成AndroidX版本:
buildscript { repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0-alpha14' // 替换旧的插件为AndroidX版本 classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version" } }
3. 清理缓存并重新构建
完成依赖替换后,执行以下步骤确保缓存被清理:
- 点击Android Studio菜单栏的
File -> Invalidate Caches / Restart,选择Invalidate and Restart - 重启后,执行
Build -> Clean Project - 最后执行
Build -> Rebuild Project
这样就能解决因Support库和AndroidX库重复类导致的Dex合并错误了。
内容的提问来源于stack exchange,提问作者Hector
相关产品推荐
相关产品推荐

