升级Gradle至最新版本后项目构建失败:Program type already present错误
这个问题我碰到过好多次,本质就是你的项目里重复引入了info.hoang8f.fbutton这个库的BuildConfig类。Gradle升级后,新的D8编译器对重复类的检测变得更严格,之前可能被忽略的重复依赖问题现在直接触发了构建失败。
下面是一步步的解决办法:
先定位重复依赖的来源
打开终端,在项目根目录运行命令:# macOS/Linux系统 ./gradlew app:dependencies # Windows系统 gradlew.bat app:dependencies搜索
info.hoang8f:fbutton,你会发现要么是你自己直接引入了这个库,同时某个第三方依赖也间接包含了它;要么是多个第三方依赖都偷偷引入了它。排除重复的依赖
根据上面的排查结果,选择对应的方式处理:- 如果是某个第三方依赖间接引入了fbutton,而你自己也直接加了这个库,就在第三方依赖里排除它:
implementation('com.example:your-third-party-lib:1.0.0') { exclude group: 'info.hoang8f', module: 'fbutton' } - 如果是多个依赖都引入了不同版本的fbutton,你可以强制统一使用某个稳定版本:
configurations.all { resolutionStrategy.force 'info.hoang8f:fbutton:1.0.5' // 替换成你想用的具体版本 }
- 如果是某个第三方依赖间接引入了fbutton,而你自己也直接加了这个库,就在第三方依赖里排除它:
检查多模块项目的依赖重复
要是你的项目是多模块结构,看看子模块是不是也单独引入了fbutton。这种情况下,建议只在基础模块用api引入,其他模块通过依赖基础模块来使用,避免重复添加。清理构建缓存重试
有时候缓存会搞出奇怪的问题,运行下面的命令清理后重新构建:# macOS/Linux系统 ./gradlew clean build # Windows系统 gradlew.bat clean build
额外提一句:info.hoang8f.fbutton是个比较老的库,好像已经停止维护了。如果上面的方法都搞不定,不如考虑替换成Material Components库的按钮组件,既能解决版本兼容问题,还能获得更好的维护支持。
内容的提问来源于stack exchange,提问作者Liam Wilkinson
相关产品推荐
相关产品推荐

