升级Android Studio Flamingo+JDK17+AGP8后R8混淆报错求助
解决Android Studio Flamingo + AGP 8下R8报错:Library class android.net.http.AndroidHttpClient implements program class org.apache.http.client.HttpClient
问题背景
升级到Android Studio Flamingo(搭配JDK17、AGP8)后,release构建时触发R8报错:
ERROR: R8: Library class android.net.http.AndroidHttpClient implements program class org.apache.http.client.HttpClient
执行./gradlew buildEnvironment未找到org.apache.http.client.HttpClient的直接引用。
解决建议
1. 排除间接引入的Apache HttpClient依赖
部分第三方库可能间接引入了Apache HttpClient,在app模块的build.gradle中添加依赖排除规则:
android { // 保留原有配置 configurations { all { exclude group: 'org.apache.httpcomponents', module: 'httpclient' exclude group: 'org.apache.httpcomponents', module: 'httpcore' } } }
2. 添加R8规则忽略冲突
如果排除依赖会影响功能,在proguard-rules.pro中添加规则告诉R8忽略该冲突:
-dontwarn org.apache.http.** -keep class org.apache.http.client.HttpClient { *; } -keep class android.net.http.AndroidHttpClient { *; }
也可在build.gradle的release构建配置中添加打包规则:
android { buildTypes { release { // 保留原有配置 packagingOptions { pickFirst 'org/apache/http/client/HttpClient.class' } } } }
3. 迁移到AndroidX推荐的网络库
Android已弃用Apache HttpClient,建议替换为OkHttp或HttpURLConnection,从根源解决依赖冲突。示例替换:
// 原Apache HttpClient代码 HttpClient client = new DefaultHttpClient(); HttpGet request = new HttpGet(url); HttpResponse response = client.execute(request); // 替换为OkHttp实现 OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder().url(url).build(); Response response = client.newCall(request).execute();
4. 调整AGP8的兼容性配置
AGP8对R8规则更严格,优化build.gradle配置:
android { compileSdk 33 // AGP8+无需手动指定buildToolsVersion,会自动匹配 defaultConfig { minSdkVersion 21 // 根据项目需求调整,建议不低于21 } buildTypes { release { minifyEnabled true shrinkResources true // 可选,配合代码混淆使用 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } }
内容的提问来源于stack exchange,提问作者Matheus Mesquita
相关产品推荐
相关产品推荐

