新版本的Android (3.4)刚刚推出,并附带了对R8的默认支持,而不是Proguard。有人能解释一下两者之间的关键区别以及使用R8的明显好处吗?
发布于 2019-10-31 09:53:35
的历史在不断变化,开发人员一直在努力使其在构建时间和生成.dex文件大小方面更加高效。因此,纵观历史,从.dex文件生成.java文件的过程发生了许多变化。
在R8或D8之前,安卓的构建过程包括以下四个步骤;
---Proguard---> SourceCode(.java)
然后,Android开发人员决定将所有步骤合并到一个叫做Jack&Jill的步骤中进行优化。然而,这是在2015年推出的,2017年被放弃,原因是不够灵活,无法与所有不断增长的发展工具一起工作。
在此基础上,引入了D8,这是一个回归到原来的4步构建过程,并进行了优化的Dex变换。这种实现产生了比dx更高质量的字节码,指令更少,寄存器分配更好。
现在来看看R8,它有一个类似的目标,以Jack&Jill为起点,将这两个构建步骤合并为一个。护卫和德克斯的一步。因此,与第一次处理再次返回.class文件的.class文件和Dex/D8处理器接收.class和返回.dex文件不同,R8合并了这两个步骤,并接受.class文件,返回.dex文件。这个工具仍然在变得更好,试图更多地优化构建过程。因此,现在将您的项目迁移到R8是明智的,因为它是一个仍在增长的工具,它将很快成为默认的构建工具。(在Android (3.4)的升级中,默认情况下可以看到)
而且,谷歌问题跟踪器的开发人员很快就会回到关于R8的报道中来,因为他们渴望得到反馈,并且希望完善这个工具。
据报道,使用R8可以生成更小的.dex文件,并且可以更有效地减少未使用类的删除。这在某种程度上是正负的。这显然是一个好处,因为更小的大小总是更好(在编程中!),它是负的,因为您必须复杂地遍历您的代码,并相应地检测您的入口点并重新实现Proguard文件中的保持规则,因为R8引入了一个比proguard更具侵略性的小型化。
有关更多信息,您可以查看这篇文章,其中包括关于R8与Proguard:https://www.guardsquare.com/en/blog/proguard-and-r8的非常详细的说明。
另外,这是2018年谷歌I/O的官方讲话:https://www.youtube.com/watch?v=x9T5EYE-QWQ&t=1194s
希望这能帮上忙
https://stackoverflow.com/questions/55744477
复制相似问题