31

我想知道如何从ProGuard过渡/迁移到R8

我应该从我的 Gradle 文件中删除与 Proguard 相关的行并添加该android.enableR8 = true行吗?

谢谢。

4

1 回答 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 上,useProguard默认为false. 默认情况下启用 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

于 2018-10-22T01:53:23.173 回答