安卓/Java:从ProGuard迁移到R8的转换/迁移?

32
我想知道如何从 ProGuard 迁移到 R8
我应该只需从我的 Gradle 文件中删除与 ProGuard 相关的行,并添加 android.enableR8 = true 行吗?
谢谢。

大家好,你们可能会发现这个链接很有用 - https://dev59.com/8FMH5IYBdhLWcg3w6VQv#60786850 - Anoop M Maddasseri
1个回答

45

Proguard是由GuardSquare开发和维护的,而R8是由Android团队开发和维护的,这意味着它们是两个不同的产品,尽管R8兼容Proguard。

可以从这里看到:https://www.guardsquare.com/en/blog/proguard-and-r8

ProGuard和R8的兼容性

对开发者来说,好消息是 R8向后兼容ProGuard。如果您有一个工作的 ProGuard配置(可能是从Stackoverflow复制的), 你可以将其转移到R8。它当前仍然忽略一些 选项。值得注意的是,R8没有实现选项-whyareyoukeeping 和-addconfigurationdebugging,我们认为这些选项对于快速 得到工作配置至关重要,正如我们在先前的博客中所解释的那样。

是的,使用 android.enableR8=true 将启用R8功能。

还请注意,R8目前(截至Android Studio 3.2.1时)不支持Android Archive Library(AAR)项目。 它仅用于构建APK文件。


编辑#1

来自@Archie, 如果您正在使用Gradle插件版本 3.4.0 及以上,则默认启用 R8

请参见:https://developer.android.com/studio/releases#r8-default


编辑#2

对于从Proguard过渡到R8,您可以按照以下步骤进行:

1.禁用Proguard

更新buildTypes {} 配置以禁用Proguard,例如对于release 构建类型:

   android {
       ...
       buildTypes {
           release {
               useProguard false // <-- disable proguard
               minifyEnabled true // <-- enable minification
               proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
           }
       }
       ...
   }

在Android Studio 3.4中,默认情况下useProguardfalse,并且默认启用了R8。

2. (可选)设置完整的R8配置报告文件

将以下行添加到您的proguard-rules.pro文件中,以输出R8在构建项目时应用的所有规则的完整报告。

// You can specify any path and filename.
-printconfiguration <your-path>/full-r8-config.txt

3. 生成混淆应用程序。

./gradlew assembleRelease

4. (可选)微调和疑难解答

找到你的<your-path>/full-r8-config.txt文件,以便微调配置或进行疑难解答。

参考资料:

https://developer.android.com/studio/build/shrink-code.html#configuration-files


1
你知道在哪里启用 android.enableR8 = true 吗?我在一个“旧”的空项目中遇到了这个问题(只是进行了一系列的Android开发者更新)。我无法确定在哪里启用该设置,所以我清除了该项目并创建了一个新项目,希望我可以将该信息作为注释添加,但在搜索新文件后,我发现没有该行的条目。 - Carel
1
将此行添加到gradle.properties文件。 - shizhen
1
如果您使用的是Gradle版本3.3.0及以上,则R8默认已开启。请参见:https://developer.android.com/studio/releases#r8-default - Archie G. Quiñones
1
R8在3.4.0版本中默认开启,而不是3.3.0。您链接的变更日志部分是针对3.4.0的。如果您对ProGuard和R8之间的一些行为差异感兴趣,我所在的公司PreEmptive Solutions已经准备了一些文档,试图在这里进行涵盖:https://r8-docs.preemptive.com/。 - Peter Tefft
5
另外一件事是,useProguard 将会被从 DSL 中弃用。如果有人想继续使用 ProGuard 而不是 R8,请在 gradle.properties 文件中设置 android.enableR8=false。详情请见:https://issuetracker.google.com/issues/129758703 - Richard Chang
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接