📜  Android 中 Proguard 和 R8 的区别

📅  最后修改于: 2021-09-14 02:07:42             🧑  作者: Mango

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

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

什么是 Proguard?

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

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

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

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

在这段代码中,我们必须将 minifyEnabled 更改为 true 以激活我们的 Proguard。 Proguard 的这段代码写在 release 块下,所以它只适用于你的 APK 的 release 版本。它将激活 proguard,它将从名为的文件中获取它

R8是什么?

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

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

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

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

Proguard 和 R8 的区别。

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

混淆器

混淆器

在 Proguard 中, Java编译器将 Apps 代码转换为Java字节码,proguard 会将此字节码转换为优化的Java字节码。这个Java字节码然后被dex优化成优化的Dalvik字节码。应用程序代码到优化的 Dalvik 字节码的转换过程是一个四步过程。

R8

R8

在 R8 中, Java编译器将 Apps 代码转换为Java字节码,然后 R8 将直接将Java字节码转换为优化的 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 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!