Proguard和R8有什么区别?

问题描述 投票:5回答:1

新版本的Android Studio(3.4)刚刚发布,并带来了对R8(而非Proguard)的默认支持。有人可以解释两者之间的主要区别以及使用R8的明显好处吗?

android proguard r8
1个回答
1
投票

Android构建过程的历史不断变化,开发人员一直在努力提高其构建时间和生成的.dex文件大小的效率。因此,在整个历史中,从.java文件生成.dex文件的过程有很多变化。

在R8或D8之前,Android构建过程涉及这四个步骤;

SourceCode(.java) --- javac ---> J ava Bytecode(.class) --- Proguard ---> 优化的Java字节码(.class) --- Dex ---> Dalvik优化字节码(.dex)

然后,Android开发人员决定将这两个步骤之间的所有步骤合并为一个名为Jack&Jill的步骤,以进行优化。但是,此方法于2015年推出,由于不够灵活,无法与所有增长的开发工具一起使用而于2017年被放弃。

然后,引入D8,这是使用优化的Dex变换还原为原始的4步构建过程。与dx相比,该实现产生了质量更好的字节码,指令更少,寄存器分配更好。

现在到R8,它的目标与Jack&Jill类似,将其中两个构建步骤合并为一个。 Proguard和Dex步骤。因此,R8合并了这两个步骤,并合并了这两个步骤,并接收了.class文件,返回了.dex文件,而不是先由Proguard处理.class文件再返回.class文件和Dex / D8处理器接收了.class文件并返回了.dex文件。该工具仍在不断完善,试图进一步优化构建过程。因此,现在将您的项目迁移到R8是很明智的,因为它仍在增长,它将很快成为默认的构建工具。 (如在Android Studio(3.4)的升级中默认启用所示)

此外,由于他们渴望获得反馈并希望完善此工具,因此Google问题跟踪工具中的开发人员非常快地返回了有关R8的报告问题。

据报道,使用R8可以生成较小的.dex文件,并且可以更有效地减少未使用的类。在某种程度上,这是一个正负。显然,这是一个加号,因为较小的大小总是更好(在编程中!),这是一个减号,因为您必须复杂地遍历代码,并检测入口点并相应地在proguard文件中重新实现keep规则,如R8所介绍的那样比Proguard更具侵略性的缩小。

有关更多信息,您可以查看本文,其中包括有关R8与Proguard:https://www.guardsquare.com/en/blog/proguard-and-r8的非常详细的解释>

此外,Google I / O 2018的官方演讲:https://www.youtube.com/watch?v=x9T5EYE-QWQ&t=1194s

希望这会有所帮助,

© www.soinside.com 2019 - 2024. All rights reserved.