ProGuard → R8

ProGuard → R8

老写法(Groovy --- ProGuard)

groovy 复制代码
buildTypes {
    release {
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                     'proguard-rules.pro'
    }
}

手动维护 proguard-rules.pro:

kotlin 复制代码
-keep class com.example.model.** { *; }
-keep class com.google.gson.** { *; }
-dontwarn okhttp3.**

问题在哪里

ProGuard 是第三方工具,被 R8 替代。R8 是 Google 自己的实现,编译期做代码收缩(shrink)、优化(optimize)、混淆(obfuscate),比 ProGuard 更快,产生的 DEX 更小。

新写法(R8)

R8 从 AGP 3.4+ 开始就是默认的代码压缩器,不需要额外配置。proguardFiles 的规则 R8 兼容读取------绝大多数 ProGuard 规则不需要改。

需要检查的点:

groovy 复制代码
// 确认 gradle.properties 里没有强制用 ProGuard
# android.enableR8=false  ← 删掉这行

如果某些库的 ProGuard 规则不兼容 R8(极其罕见),可以在 proguard-rules.pro 里针对调整:

csharp 复制代码
# R8 默认更激进,某些反射调用需要额外保留
-keep class com.oldlib.ReflectionHelper { *; }

一句话注意

R8 和 ProGuard 的 Keep 规则语法完全兼容,迁移时基本不需要改规则文件。R8 主要改进在内部------inline、class merging、dead code elimination 比 ProGuard 更彻底,同样的项目 R8 产出的 APK 平均小 5-10%。

如果开启了 isMinifyEnabled = true 但感觉没效果,检查有没有在 build 日志里看到 R8 运行信息。没有的话可能是 gradle.properties 里被某个配置禁用了。


Java Android 老项目迁移系列,持续更新中。

相关推荐
SL_staff28 分钟前
告别报表重复开发:JVS-BI 模板市场的参数化继承实践
java·数据分析·数据可视化
SL_staff2 小时前
从邮箱传文档到协同流重构:企业文档协作的系统性破局实践
java·开源·github
smallyoung3 小时前
告别N+1:Spring Boot 一键数据翻译框架体系
java·后端·架构
hai_android4 小时前
把 Android App 打包成系统应用(System App)
android·kotlin·android jetpack
JMchen5 小时前
【Jetpack 内核实战 01】开篇:Jetpack 组件全家桶核心逻辑与专栏完整规划
android·kotlin·android jetpack
Bazingga5 小时前
Java16 record 完整拆解——语法、语义、限制、反射
java·后端
SL_staff6 小时前
规则联动:给工厂装上‘自动化神经反射弧’——JVS·物联网平台规则引擎实战教程
java·人工智能·物联网
骑着蜗牛撵大象3277 小时前
Linux 进程间通信之管道:从 pipe() 的内核语义到 FIFO 落地排错
android·java·linux·系统编程·fifo·管道·进程间通信
WJ.Polar7 小时前
Java封装、继承、多态
java·开发语言
ly76897 小时前
PostgreSQL 备份恢复策略:pg_basebackup、WAL 归档与 PITR 在企业 Java 系统中的落地
java·数据库·postgresql·pitr·pg_basebackup·wal 归档