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 老项目迁移系列,持续更新中。

相关推荐
卓怡学长4 分钟前
w213基于Spring Boot框架的Web安全学习系统的设计与实现
java·spring boot·spring·web安全·intellij-idea
Zhou1411366 分钟前
MyBatisPlus_02_条件构造器与高级功能
java·开发语言·python
垚垚学技术_聚焦云原生10 分钟前
Ansible Role 生产环境标准目录结构与规范化实践
java·elasticsearch·ansible
霸道流氓气质11 分钟前
Spring AI Alibaba Graph Studio 入门指南:可视化Agent编排与调试平台
java·人工智能·spring
hi_LeTian11 分钟前
【Linphone】Ubuntu20.04 编译 Linphone5.2 Android SDK 适配RK3326硬解码完整教程(避坑版)
android
SimonKing14 分钟前
Stream-Nexus:我的轻量级推送中间件(sse、websocket)终于定下来了
java·后端·程序员
SoStraw16 分钟前
跨平台P2P通信SDK,Windows/Android/iOS/Linux/macOS一套API全兼容
android·linux·windows·跨平台·p2p·webrpc
边境悍匪30 分钟前
蜗牛学苑 Java 智能体学习 Day49|贯穿项目 5 订单下单业务 思维导图复盘
java·开发语言·spring boot·学习·阿里云
鬼手点金33 分钟前
Claude Code示范案例-修复 Bug 工作流
java·服务器·前端·javascript·bug·openclaw
一条破秋裤34 分钟前
Linux 进程通信介绍:内存隔离与 IPC 分类
java·linux·服务器