开启R8/ProGuard时Debug构建正常,生成签名APK失败,已配置okhttp/retrofit规则
构建失败根因定位
核心错误触发逻辑
- 你在根目录
build.gradle中手动强制指定了R8版本为2.1.75,该版本存在已知兼容性bug,处理OkHttp 4.7.2的ConscryptPlatform伴生对象的desugaring逻辑时,会触发未定义寄存器的编译异常 - 手动覆盖AGP内置的匹配R8版本,打破了AGP与R8的官方适配关系,是本次构建失败的根本原因
非核心日志说明
以下日志不影响构建,无需额外处理:
R8: Ignoring option: -optimizations、R8: Ignoring option: -optimizationpasses:R8 2.x版本开始不再支持旧版ProGuard的优化参数,属于正常提示Type org.conscrypt.Conscrypt was not found:该类属于可选依赖,你已通过-dontwarn org.conscrypt.**规则抑制警告,不属于失败原因
修复步骤
1. 移除手动指定的R8依赖
打开根目录build.gradle的buildscript块,删除以下配置:
- 仓库配置中的
maven { url "http://storage.googleapis.com/r8-releases/raw/master" } - 依赖配置中的
classpath 'com.android.tools:r8:2.1.75'
保留AGP 4.1.2内置的默认R8版本即可,无需手动指定。
2. 清理冗余ProGuard规则
打开app模块下的proguard-rules.pro,删除以下冗余规则:
-dontwarn okhttp3.internal.platform.**
该规则与OkHttp官方混淆规则冲突,会导致R8处理内部平台类时出现异常,其余已配置的OkHttp、Retrofit规则保留即可。- 现有配置的
-dontobfuscate仅关闭代码混淆功能,不影响R8的收缩逻辑,无需修改
可选兼容方案
若修复后仍有构建问题,可在gradle.properties中临时添加android.enableR8.fullMode=false关闭R8全模式,验证是否为全模式兼容问题。
内容的提问来源于stack exchange,提问作者Alif Hasnain
相关产品推荐
相关产品推荐

