生成签名APK遇Program type already present: android.support.v4.R错误求助
解决 "Program type already present: android.support.v4.R" 签名APK打包错误
我太懂这种憋屈感了——模拟器上跑的顺顺当当,一打包签名APK就卡在这里,开了multiDex、排除ai.api的support依赖都没效果。其实这个问题的核心是不同依赖库重复引入了相同的Android Support模块,尤其是ai.api:sdk的依赖可能嵌套了多个support子库,单纯的group排除根本没覆盖全。试试下面这几个实用步骤:
先揪出冲突的根源
先在终端里运行这个命令,打出完整的依赖树,把所有潜藏的重复依赖挖出来:# Mac/Linux环境 ./gradlew app:dependencies # Windows环境 gradlew app:dependencies重点盯着
android.support.v4相关的条目,看看除了ai.api之外,还有没有其他库悄悄引入了重复版本的support模块。精准排除ai.api里的所有support依赖
别只笼统地排除整个group,指定具体的module来排除,确保把ai.api带的所有support子库都清干净:implementation ('ai.api:sdk:2.0.7') { exclude group: 'com.android.support', module: 'support-v4' exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-compat' // 要是依赖树里还有其他重复的support子模块,继续在这里添加exclude }强制统一所有Support库版本
这是最稳妥的根治办法,不管其他依赖引入什么版本的support库,都强制用你项目里指定的版本。在app的build.gradle的android块里加上这段配置:android { compileSdkVersion 27 defaultConfig { // 保留你原有的配置内容 } buildTypes { // 保留你原有的配置内容 } // 新增这段版本统一配置 configurations.all { resolutionStrategy.eachDependency { details -> def requested = details.requested if (requested.group == 'com.android.support') { // 跳过multidex,其他support库统一用27.1.1版本 if (!requested.name.startsWith("multidex")) { details.useVersion '27.1.1' } } } } }清理缓存后重新构建
最后执行清理命令,把旧的构建缓存全清掉,再重新尝试打包:# Mac/Linux环境 ./gradlew clean # Windows环境 gradlew clean
按这个流程操作下来,应该就能解决重复类的问题,顺利生成签名APK了。
内容的提问来源于stack exchange,提问作者Chaitanya Reddy
相关产品推荐
相关产品推荐

