Android编译错误:Program type already present 问题求助
解决 "Program type already present: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat$AccessibilityServiceInfoVersionImpl" 错误
这个错误本质是依赖冲突——你的项目里重复引入了Android Support Library v4的不同版本,导致同一个类被多次编译,最终打包时触发冲突。结合你给出的Gradle配置(compileSdkVersion 19,buildToolsVersion "27.0.3"),我帮你拆解问题和对应的解决方案:
一、错误核心原因
- SDK版本不匹配:你用了针对Android 4.4(API 19)的
compileSdkVersion,但搭配了适配API 27的buildToolsVersion,这种版本错位会让Gradle在解析依赖时拉取不兼容的Support Library版本,埋下冲突隐患。 - 重复依赖引入:项目中可能直接/间接引入了多个包含
android.support.v4包的依赖(比如你配置的paho maven库内部也依赖了旧版support-v4),不同版本的同个类被打包到一起,就会触发这个错误。
二、具体解决方案
1. 统一SDK与Build Tools版本(优先操作)
建议把compileSdkVersion升级到和buildToolsVersion匹配的版本(Build Tools 27对应SDK 27),修改你的Gradle配置:
apply plugin: 'com.android.application' android { compileSdkVersion 27 buildToolsVersion "27.0.3" repositories { maven { url "https://repo.eclipse.org/content/repositories/paho-snapshots/" } // 其他仓库配置... } // 其余android配置... }
低版本的compileSdk搭配高版本Build Tools很容易引发依赖解析混乱,因为Support Library的版本是和compileSdkVersion强绑定的,统一版本能减少大部分冲突。
2. 强制统一Support Library版本
在app模块的build.gradle中添加依赖解析策略,强制所有依赖使用相同版本的support-v4:
configurations.all { resolutionStrategy { // 版本号要和compileSdkVersion对应,SDK 27对应support-v4 27.1.1 force 'com.android.support:support-v4:27.1.1' } }
你还可以通过Gradle命令查看完整依赖树,精准定位重复引入的依赖:
./gradlew app:dependencies
如果发现某个第三方库(比如paho的mqtt库)依赖了旧版support-v4,直接在依赖声明中排除重复模块:
implementation('org.eclipse.paho:mqtt-android:xxx') { exclude group: 'com.android.support', module: 'support-v4' }
3. 迁移到AndroidX(可选但长期推荐)
如果你的项目允许,建议彻底迁移到AndroidX——它是Support Library的官方替代方案,从根源上解决版本冲突问题:
- 在项目根目录的
gradle.properties中添加:
android.useAndroidX=true android.enableJetifier=true
- 把所有Support Library依赖替换为对应的AndroidX库,比如
com.android.support:support-v4替换成androidx.core:core:1.10.1
内容的提问来源于stack exchange,提问作者Miki193
相关产品推荐
相关产品推荐

