📜  Android中Proguard和R8之间的区别

📅  最后修改于: 2021-05-09 18:01:28             🧑  作者: Mango

Proguard和R8都是相似的工具,用于减少APK的大小并通过缩小未使用的资源来提高APK的性能。在本文中,我们将看一下:

  • 什么是Proguard?
  • 什么是R8?
  • Proguard和R8之间的区别。

什么是Proguard?

Proguard是Android中的Java工具,可帮助执行以下操作:

  • 它会从您的应用程序中删除未使用的类和方法,这有助于减小APK的大小。
  • 通过混淆代码,使您的应用程序难以进行逆向工程。
  • 它减小了应用程序的大小。

如何在您的应用程序中启用Proguard?

要在您的应用程序中启用proguard,请导航至Gradle脚本> build.gradle(:app) ,然后您将看到一个名为buildTypes的方法。

在此代码块中,我们必须将minifyEnabled更改为true才能激活Proguard。 Proguard的这段代码写在release块下,因此仅适用于APK的发布版本。它将激活proguard,该proguard将从名为的文件中获取该文件。

什么是R8?

R8是另一个工具,它将Java字节代码转换为dex代码的优化格式。它将检查整个应用程序,并删除未使用的类和方法。它有助于我们减少APK的大小,并使我们的应用程序更安全。 R8使用类似的Proguard规则来修改其默认行为。

如何在您的应用程序中启用R8?

R8已存在于您的应用程序中,您只需启用它即可。要启用它,只需导航到Gradle脚本> build.gradle(:app) ,然后您将看到一个名为buildTypes的方法。

在此代码块中,我们必须将minifyEnabled更改为true才能激活R8。 R8的这段代码写在release块下,该块仅适用于APK的发行版。

Proguard和R8之间的区别。

  • 与Proguard相比,R8对Kotlin的支持更多。
  • R8具有比Proguard更快的处理时间,从而减少了构建时间。
  • R8提供比Proguard更好的输出结果。
  • R8将应用程序大小减小了10%,而Proguard将应用程序大小减小了8.5%。
  • android应用程序具有高于3.4.0或更高版本的Gradle插件,则该项目默认情况下仅使用Proguard规则使用R8。

保卫者

保卫者

在Proguard中, Java编译器将Apps代码转换为Java字节码,而Proguard会将此字节码转换为优化的Java字节码。然后,将此dex的Java字节码优化为Optimized Dalvik字节码。应用程序代码到优化的Dalvik字节码的转换过程分为四个步骤。

R8

R8

在R8中, Java编译器将Java字节码转换为Apps代码,然后R8将直接将Java字节码转换为Optimized Dalvik字节码。应用程序代码到优化Dalvik字节码的转换过程分为三个步骤,与proguard相比,该过程更快。

差异表

Proguard

R8

Proguard is having lesser speed in comparison with R8 which affects the build time. R8 is having a faster processing time which helps developers in reducing build time.
The output quality by using proguard is not superior.  The output quality using R8 is superior.
Proguard reduces app size by 8.5 %. R8 reduces app size by 10 %.

The conversion process of converting apps code to Optimized Dalvik bytecode is as follows : 

Apps Code > Java bytecode > Optimized java bytecode > Optimized Dalvik bytecode.

The conversion process of converting apps code to Optimized Dalvik bytecode is as follows : 

Apps code > Java bytecode > Optimized Dalvik bytecode.

Proguard is only supported for the gradle plugin which is below 3.4.0 R8 is only supported for the gradle plugin of 3.4.0 and above.
Peephole Optimizations in Proguard is around 520. Peephole Optimizations in R8 is around 6.
No of the steps in converting of Apps code to Optimized Dalvik code is 4. No of the steps in converting Apps code to Optimized Dalvik bytecode is 3. 
Proguard is not having Kotlin specific optimizations.  R8 is having Kotlin specific optimizations. 
Proguard does not propagate constant arguments.  R8 propagate constant arguments. 

结论

R8比proguard更快,因为步数更少。它使用默认的编译时优化器以优化的方式减小了应用程序的大小。

想要一个节奏更快,更具竞争性的环境来学习Android的基础知识吗?
单击此处前往由我们的专家精心策划的指南,以使您立即做好行业准备!