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