Android项目更新后Gradle构建失败,报Program type already present错误
解决Gradle构建错误:Program type already present: org.apache.http.auth.AuthSchemeProvider
这个错误的核心原因是多个依赖库引入了相同的Apache HttpClient相关类,导致D8编译器遇到重复类冲突。咱们一步步来解决:
1. 先定位重复依赖的来源
首先在Android Studio的Terminal中运行Gradle依赖树命令,找出到底哪个库还在引入冲突的类:
- Mac/Linux用户执行:
./gradlew app:dependencies - Windows用户执行:
gradlew app:dependencies
在输出结果里搜索org.apache.http,找到所有包含这个路径的依赖项,就能确定是哪个库没排除掉HttpClient。
2. 针对性解决方法
方法一:全局排除重复的HttpClient依赖
在模块的build.gradle文件的android代码块中添加全局排除规则,强制移除所有依赖中的Apache HttpClient相关库:
android { // 保留你已有的其他配置... configurations { all { exclude group: 'org.apache.httpcomponents', module: 'httpclient' exclude group: 'org.apache.httpcomponents', module: 'httpclient-android' } } }
这个方法可以一次性解决所有依赖带来的重复问题,适合快速排查。
方法二:替换可能引入冲突的本地Jar
注意到你使用了本地的volley.jar,旧版本的Volley依赖Apache HttpClient,建议替换为官方维护的远程依赖版本(该版本已移除对HttpClient的依赖):
// 移除本地Jar依赖 // implementation files('libs/volley.jar') // 添加官方远程依赖 implementation 'com.android.volley:volley:1.2.1'
方法三:针对单个依赖排除
如果通过依赖树找到了具体的冲突库(比如某个第三方SDK),可以在该依赖的声明中单独排除HttpClient:
implementation '冲突依赖库的完整坐标' { exclude group: 'org.apache.httpcomponents', module: 'httpclient' }
3. 额外适配(针对Android P及以上版本)
如果你的项目目标SDK是28及以上,Android系统已移除内置的HttpClient,还需要在AndroidManifest.xml的<application>标签内添加:
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
完成以上操作后,同步Gradle并重新构建项目,应该就能解决这个重复类的错误了。
内容的提问来源于stack exchange,提问作者user9848703
相关产品推荐
相关产品推荐

