升级Android Studio 3.1后出现Program type already present报错求助
这个问题我帮不少开发者排查过,核心原因就是项目中重复引入了Android Support库的同一类——具体到你这里是android.support.v13.view.DragAndDropPermissionsCompat被多个依赖包同时包含,导致D8工具合并DEX时出错,进而触发了transformDexArchiveWithExternalLibsDexMergerForDebug任务失败。
下面是一步步的解决办法:
第一步:定位重复依赖的来源
打开终端,在项目根目录执行命令查看完整依赖树,找出哪里重复引入了support-v13:# Mac/Linux环境 ./gradlew app:dependencies # Windows环境 gradlew app:dependencies在输出结果里搜索
support-v13,你会发现这个库可能是你主动引入的,也可能是某个第三方依赖间接带进来的。第二步:排除多余的重复依赖
如果是第三方库偷偷引入了support-v13,你可以在对应的依赖声明里排除它,比如:implementation('com.xxx.thirdparty:library:1.2.3') { exclude group: 'com.android.support', module: 'support-v13' }这样就能去掉第三方库带进来的重复依赖,只保留你项目需要的版本。
第三步:统一所有Support库的版本
Android Studio 3.0+强烈建议统一所有Support库的版本,避免不同版本之间的类冲突。你可以在根目录的build.gradle里定义全局版本变量:ext { supportLibVersion = '28.0.0' // 换成你项目实际使用的兼容版本 }然后所有Support库依赖都用这个变量声明:
implementation "com.android.support:appcompat-v7:$supportLibVersion" implementation "com.android.support:design:$supportLibVersion" // 除非你明确需要v13的特定功能,否则不要主动引入support-v13最后:清理缓存重新构建
执行命令清理项目缓存,避免旧缓存干扰新的依赖配置:./gradlew clean然后点击Android Studio的「Rebuild Project」按钮重新构建项目。
如果还是有问题,检查一下是不是module之间的依赖传递、或者本地jar包也包含了Support类,这些都可能导致隐藏的重复冲突。
内容的提问来源于stack exchange,提问作者Sobhy Elbhwashy

