Android/java:从ProGuard到R8的过渡/迁移?

Reg*_*_AG 24 obfuscation android proguard android-proguard r8

我想知道如何从ProGuard过渡到R8.

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

谢谢.

shi*_*hen 32

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存档库(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'
           }
       }
       ...
   }
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

3.生成混淆的应用程序。

./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)

4.(可选)微调和故障排除

找到您<your-path>/full-r8-config.txt以微调配置或进行故障排除(如果有)。

参考文献:

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

  • 还有一件事是`useProguard`将从DSL中弃用。如果有人想继续使用proguard而不是R8,请在gradle.properties中设置android.enableR8 = false。请参阅:https://issuetracker.google.com/issues/129758703 (5认同)
  • 将此行添加到 gradle.properties (2认同)