R8
Google 开发的 Android 代码压缩、优化和混淆工具,用于替代 ProGuard,支持 full mode 等激进优化模式,可显著减小 DEX 体积并提升应用性能。
时间轴 (近 90 天)
代码混淆(如 ProGuard、R8)仅增加阅读难度,无法隐藏明文字符串常量,不能阻止逆向工程提取硬编码凭证。
在 release 模式下测量性能,并结合 R8 压缩工具与 Baseline Profile,相比常规可调试构建可带来约 6 倍的性能差异。
团队今年引入的一项优化(结合 R8 等工具)让性能提升了一倍。
R8 负责缩减和优化字节码,Baseline Profile 负责决定哪些代码被提前编译,两者职责不同但可叠加使用。
R8 full mode 是 R8 的一种更激进的优化模式,假设所有代码都遵循标准的 Java/Kotlin 语义,从而启用更全面的类合并、方法内联和成员重写。
Keep 规则(ProGuard/R8 规则)用于告诉优化器哪些类、方法或字段不能被移除或重命名,例如 `-keep class com.example.** { *; }` 会保留整个包下的所有成员。
Grab 在采用 R8 full mode 并精炼 keep 规则后,实现了 78% 优化、79% shrinking 和 82% obfuscation;结合 baseline profiles,ANR 降低了 32%,启动速度提升了 35%。
头部应用首次启用 R8 时,平均 DEX 体积下降 38%,用户感知 ANR 下降 16%。
已经使用 R8 的应用若进一步把优化、收缩、混淆水平提升到 50% 以上,平均还能再获得 25% 的 DEX 体积下降、4% 的启动时间下降和额外 17% 的用户感知 ANR 下降。
混淆(如 ProGuard/R8 将类名、方法名替换为无意义的短标识符)、加固(如梆梆、爱加密等对 DEX 进行加密壳保护)、反调试(检测 ptrace、调试器端口、模拟器环境等)是 Android 逆向中三类最常见的对抗手段。
全部知识事实 (10)
代码混淆(如 ProGuard、R8)仅增加阅读难度,无法隐藏明文字符串常量,不能阻止逆向工程提取硬编码凭证。
50%待验证在 release 模式下测量性能,并结合 R8 压缩工具与 Baseline Profile,相比常规可调试构建可带来约 6 倍的性能差异。
50%待验证团队今年引入的一项优化(结合 R8 等工具)让性能提升了一倍。
50%待验证R8 负责缩减和优化字节码,Baseline Profile 负责决定哪些代码被提前编译,两者职责不同但可叠加使用。
50%待验证R8 full mode 是 R8 的一种更激进的优化模式,假设所有代码都遵循标准的 Java/Kotlin 语义,从而启用更全面的类合并、方法内联和成员重写。
50%待验证Keep 规则(ProGuard/R8 规则)用于告诉优化器哪些类、方法或字段不能被移除或重命名,例如 `-keep class com.example.** { *; }` 会保留整个包下的所有成员。
50%待验证Grab 在采用 R8 full mode 并精炼 keep 规则后,实现了 78% 优化、79% shrinking 和 82% obfuscation;结合 baseline profiles,ANR 降低了 32%,启动速度提升了 35%。
50%待验证头部应用首次启用 R8 时,平均 DEX 体积下降 38%,用户感知 ANR 下降 16%。
50%待验证已经使用 R8 的应用若进一步把优化、收缩、混淆水平提升到 50% 以上,平均还能再获得 25% 的 DEX 体积下降、4% 的启动时间下降和额外 17% 的用户感知 ANR 下降。
50%待验证混淆(如 ProGuard/R8 将类名、方法名替换为无意义的短标识符)、加固(如梆梆、爱加密等对 DEX 进行加密壳保护)、反调试(检测 ptrace、调试器端口、模拟器环境等)是 Android 逆向中三类最常见的对抗手段。
50%