开启minifyEnabled后Proguard未混淆类名及方法的原因咨询
第三方依赖注入了全局Keep规则
不少常用库(如Google Play Services、Retrofit、Glide)会自带consumer-rules.pro或proguard-rules.pro,其中可能包含范围极广的--keep规则,甚至会保留所有相关类。你可以打开Proguard输出的configuration.txt,搜索所有--keep条目,查看规则来源的文件路径,就能定位到是哪个依赖在搞鬼。Android Gradle插件的自动保留逻辑异常
AGP本身会自动为四大组件、Manifest声明的类、注解处理器生成的类添加--keep规则,但如果所有类都被标记保留,大概率是插件的自动配置出了问题。检查build.gradle里的proguardFiles配置,看是否引入了非默认的全局规则文件,或者有没有误写的配置导致插件过度保留类。minifyEnabled未在目标构建变体生效
你可能只在release构建类型里开了minifyEnabled true,但实际构建的是debug包;或者配置层级写错了(比如把minifyEnabled写在了android根节点而非buildTypes.release下)。执行./gradlew assembleRelease(对应你要构建的变体命令),确保构建的是开启混淆的包。自定义脚本/CI流程覆盖了混淆规则
项目里的自定义Gradle脚本、第三方插件,或者CI构建中的额外配置,可能动态添加了--keep class * { *; }这种极端规则,直接保留所有类。检查模块和项目根目录的build.gradle,看proguardFiles是否引入了其他未注意的规则文件,有没有动态修改混淆规则的代码。混淆工具为R8而非传统Proguard
当前Android默认用R8做代码压缩和混淆,它的逻辑和Proguard有差异,可能在某些场景下更保守地保留类结构。如果你一定要用Proguard,需要在gradle.properties里加android.enableR8=false强制切换。
内容的提问来源于stack exchange,提问作者geikov

