ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

第268篇 代码混淆与 R8:压缩优化的坑

第268篇 代码混淆与 R8:压缩优化的坑

承接上一篇《资源瘦身:shrinkResources 与图片压缩》讲完的资源线,这一篇进入代码线:R8 与 ProGuard 规则。R8 是 AGP 默认的收缩工具,职责有三项——移除未被引用的代码、方法内联与去虚拟化、名字混淆与优化。这三项都会改变运行时的行为边界,而改变的方式往往是间接的:代码被移除、字段被改名、调用被内联,于是"反射拿不到"、"序列化字段名变了"、"跨进程接口对不上"。混淆类事故的特点是低频、难复现、堆栈不可读,这决定了排查方式必须前置到规则设计阶段。

R8 做了哪三件事

把三件事分开讲,才能定位问题归属:

能力做什么典型副作用
收缩(shrinking)删除不可达的类与方法反射/动态调用找不到类
优化(optimizing)内联、去虚拟化、常量传播、类合并堆栈被折叠、方法名合并
混淆(obfuscation)类名/方法名/字段名替换为短名序列化字段名变化、日志不可读
(伴随)资源收缩依据 R8 分析结果删资源
返回列表