Android Studio 3.1.2编译报错:Program type already present冲突求助
解决Android Studio 3.1.2中「Program type already present: com.google.android.gms.common.util.VisibleForTesting」错误
这个问题我之前踩过类似的坑,本质是Google Play Services相关依赖的版本冲突——不同依赖库(或者你自己引入的组件)分别带了不同版本的com.google.android.gms类,导致D8编译器在合并字节码时发现重复类,直接抛出错误。下面是亲测有效的解决步骤:
1. 统一Google Play Services所有组件的版本
这是最常见也最有效的解决方式,避免不同版本组件互相冲突:
- 打开项目根目录的
build.gradle,在buildscript块里定义统一的版本变量:buildscript { ext { // 选一个适配AS3.1.2的稳定版本,建议选17.x系列(太新的版本可能和旧AS不兼容) playServicesVersion = '17.0.0' } repositories { google() jcenter() maven { url "https://maven.google.com" } } dependencies { // 确保gradle插件版本和你的AS3.1.2匹配 classpath 'com.android.tools.build:gradle:3.1.2' // 其他classpath依赖... } } - 接着在app模块的
build.gradle里,所有Google Play Services相关依赖都使用这个统一版本:dependencies { implementation "com.google.android.gms:play-services-maps:$playServicesVersion" implementation "com.google.android.gms:play-services-location:$playServicesVersion" // 其他play services组件都按这个格式写 }
2. 排查并排除重复的依赖
如果统一版本后还是报错,可能是某个第三方库偷偷引入了旧版本的com.google.android.gms:
- 执行gradle命令查看完整依赖树,找到重复引入该类的库:
./gradlew app:dependencies - 找到冲突的依赖后,在app模块的
build.gradle里排除对应的冲突组,比如:implementation('com.example:some-third-party-lib:1.0.0') { // 排除整个google play services组的依赖 exclude group: 'com.google.android.gms' }
3. 清理重建项目
做完上面的修改后,一定要执行清理操作,避免缓存残留:
- 点击Android Studio菜单栏的
Build -> Clean Project - 然后点击
Build -> Rebuild Project - 也可以手动删除项目根目录的
.gradle文件夹和app模块的build文件夹,再重新同步gradle
4. 确认gradle插件与AS版本兼容
你的Android Studio是3.1.2,务必保证buildscript里的gradle插件版本也是3.1.2,不要盲目升级插件版本,否则会出现更多兼容性问题。
内容的提问来源于stack exchange,提问作者Liliana J
相关产品推荐
相关产品推荐

