Android Studio升级后Release签名APK的Proguard构建失败问题
我之前升级AS和Gradle版本后也碰到过几乎一模一样的ProGuard报错,结合你的配置和日志信息,给你几个针对性的解决步骤:
1. 优先升级Firebase依赖版本
你的Firebase依赖停留在11.8.0,这个版本和你升级后的Android Gradle Plugin 3.1.2(对应Gradle 4.4)兼容性很差。旧版本的Firebase库和新的构建工具链会出现类引用不匹配的问题,直接导致ProGuard解析失败。
建议把所有Firebase相关依赖统一升级到兼容的版本,同时更新Google Services插件:
项目根目录的build.gradle:
buildscript { dependencies { // 对应Firebase 15.x版本的插件 classpath 'com.google.gms:google-services:4.0.1' } }
App模块的build.gradle:
implementation 'com.google.firebase:firebase-messaging:15.0.2' implementation 'com.google.firebase:firebase-appindexing:15.0.2' implementation 'com.google.firebase:firebase-core:15.0.2'
2. 补全ProGuard规则
你添加-dontwarn没效果,大概率是没覆盖到具体的未解析类或包。结合日志里的警告,需要给Firebase、Multidex以及你自己的模块添加对应的规则:
在proguard-rules.pro中添加:
// Firebase相关规则 -keep class com.google.firebase.** { *; } -keep class com.google.android.gms.** { *; } -dontwarn com.google.firebase.** -dontwarn com.google.android.gms.** // Multidex规则 -keep class android.support.multidex.** { *; } // 保护你自己的quayosolution模块(替换成实际包名) -keep class com.xxx.quayosolution.** { *; } -keep interface com.xxx.quayosolution.** { *; }
如果之后还是有特定类的警告,可以把具体类的-dontwarn加上,比如日志里提示某个com.example.xxx类未解析,就加-dontwarn com.example.xxx.**。
3. 清理Gradle缓存并重建
升级后Gradle缓存可能残留旧版本的类文件,导致解析冲突。执行以下命令清理缓存:
# Mac/Linux ./gradlew clean # Windows gradlew clean
然后重新执行Release构建任务。
4. 检查依赖冲突
用命令查看App模块的依赖树,排查是否有重复或冲突的依赖:
./gradlew app:dependencies
如果发现某个库有多个版本,在依赖声明里用exclude排除掉旧版本,比如:
implementation('some.library:xxx:1.0.0') { exclude group: 'com.android.support', module: 'support-v4' }
为什么关闭minifyEnabled能打包?
当你把minifyEnabled设为false时,ProGuard不会执行类压缩、混淆和优化操作,自然不会触发那些类引用未解析的警告,但代价是APK体积会大幅增加——这也是为什么我们必须解决ProGuard问题的原因。
内容的提问来源于stack exchange,提问作者mLamaa

