【发布时间】:2020-03-02 17:29:09
【问题描述】:
R8 official documentation 表示要激活其他优化,我必须将其插入gradle.properties 文件中:
android.enableR8.fullMode=true
文档说,为了使应用程序工作,我必须设置一些保留规则,但没有关于它如何工作以及它执行什么操作的详细信息:
因为额外的优化使 R8 的行为不同于 ProGuard,他们可能会要求您包含额外的 ProGuard 规则以 避免运行时问题。例如,假设您的代码引用了 通过 Java 反射 API 类。默认情况下,R8 假定您 打算在运行时检查和操作该类的对象——甚至 如果你的代码实际上没有——它会自动保留类和 它的静态初始化器。
但是,当使用“完整模式”时,R8 不会做出此假设,并且, 如果 R8 断言您的代码否则永远不会使用该类 运行时,它会从应用程序的最终 DEX 中删除该类。也就是说,如果 你想保留类和它的静态初始化器,你需要 在你的规则文件中包含一个保留规则来做到这一点。
文档建议的常见问题解答中的link 仅说明了这一点:
R8 完整模式
在完整模式下,R8 表现更激进 优化,这意味着额外的 ProGuard 配置规则 可能需要。本节重点介绍了一些常见问题 使用完整模式时可见。
android.enableR8.fullMode 究竟是如何工作的?
非常感谢!
【问题讨论】:
-
不确定
really works,但您发布的示例很清楚,运行时无法访问的代码(显式代码)将被删除,因此如果您执行Reflection API,则必须添加keep class和@ 987654329@ 只能通过其他方式访问课程。最好的测试是激活它并测试您的应用。 -
@MarcosVasconcelos 这是它的一个例子,但我认为关于它的工作原理和作用的信息太少很奇怪。另外,我可以在激活后测试我的应用程序,但我已经对我的应用程序进行了深入测试,如果我在测试我的应用程序之前知道硬件 R8 可以工作,我可以节省大量时间,而不是测试我的整个应用程序以寻找“可能”的错误由于 R8
标签: android optimization obfuscation shrink android-r8