Proguard 和 R8 都是类似的工具,用于减小 APK 的大小并通过缩小未使用的资源来提高 APK 的性能。在本文中,我们将了解:
- 什么是 Proguard?
- R8是什么?
- Proguard 和 R8 的区别。
什么是 Proguard?
Proguard 是 Android 中的一个Java工具,可帮助执行以下操作,例如:
- 它会从您的应用中删除未使用的类和方法,这有助于减小 APK 的大小。
- 它通过混淆代码使您的应用程序难以进行逆向工程。
- 它减少了应用程序的大小。
如何在您的应用程序中启用 Proguard?
在您的应用程序中启用 proguard 导航到Gradle Scripts > build.gradle(:app) ,然后您将看到一个名为 buildTypes 的方法。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android-optimize.txt’), ‘proguard-rules.pro’
}
}
在这段代码中,我们必须将 minifyEnabled 更改为 true 以激活我们的 Proguard。 Proguard 的这段代码写在 release 块下,所以它只适用于你的 APK 的 release 版本。它将激活 proguard,它将从名为的文件中获取它
‘proguard-android.txt’.
R8是什么?
R8 是另一个工具,它将您的Java字节码转换为 dex 代码的优化格式。它将检查整个应用程序并删除未使用的类和方法。它帮助我们减小 APK 的大小并使我们的应用程序更安全。 R8 使用类似的 proguard 规则来修改其默认行为。
如何在您的应用程序中启用 R8?
R8 已经存在于您的应用程序中,您只需启用它。要启用它,只需导航到Gradle Scripts > build.gradle(:app) ,然后您将看到一个名为 buildTypes 的方法。
buildTypes {
release {
minifyEnabled true
}
}
在这段代码中,我们必须将 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 中, 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 快,因为步数更少。它使用默认的编译时优化器以优化的方式减小应用程序的大小。