Android项目build.gradle报httpclient类冲突 由httpmime依赖引发
Android httpclient类冲突可行解决方案
该冲突由org.apache.httpcomponents:httpmime:4.5.12传递依赖的apache httpclient与Android系统内置类路径重复导致,可按优先级尝试以下方案:
- 方案1:排除传递依赖+引入官方兼容包
首先在httpmime依赖中排除冲突的httpclient组件,再引入Android官方提供的legacy兼容包:dependencies { // 排除httpmime传递的httpclient依赖 implementation ('org.apache.httpcomponents:httpmime:4.5.12') { exclude group: 'org.apache.httpcomponents', module: 'httpclient' } } android { defaultConfig { // 引入Android官方httpclient兼容库 useLibrary 'org.apache.http.legacy' } } - 方案2:改用Android适配版Apache依赖
Apache官方提供了专门适配Android平台的httpclient版本,不会和系统类产生冲突,直接替换原有依赖即可:dependencies { // 移除原有httpmime依赖,使用适配版组件 implementation 'org.apache.httpcomponents:httpclient-android:4.3.5.1' implementation('org.apache.httpcomponents:httpmime:4.3.5') { exclude group: 'org.apache.httpcomponents', module: 'httpclient' } } - 方案3:替换为OkHttp实现上传能力
如果允许业务代码调整,推荐使用OkHttp的Multipart功能完全替代httpmime,彻底移除Apache相关依赖,长期兼容性最好:// Java版本实现表单文件上传 MultipartBody requestBody = new MultipartBody.Builder() .setType(MultipartBody.FORM) .addFormDataPart("file", file.getName(), RequestBody.create(MediaType.parse("image/*"), file)) .addFormDataPart("param", "value") .build(); Request request = new Request.Builder() .url(UPLOAD_URL) .post(requestBody) .build(); new OkHttpClient().newCall(request).execute(); - 方案4:重打包冲突类(仅作为最终备选)
若上述方案均无法满足需求,可使用jarjar工具将httpclient相关类的包名重命名后重新打包引入,避开与系统类的路径冲突。
内容的提问来源于stack exchange,提问作者Kishan Solanki
相关产品推荐
相关产品推荐

