启用 R8 需要明确的规则来保留所有应用程序包

Enabling R8 requires explicit rule to keep all app package

我们已经使用指令

明确禁用了 R8
android.enableR8=false.

但是当我从我的 gradle.properties 中删除该指令时,我发现 R8 正在删除许多特定于应用程序的 类。

我能够成功编译并 运行 应用程序的唯一方法是在我的 config/proguard/proguard-project.txt

中包含以下语句
-keep class com.myapppackage.** { *; }

我的 gradle.properties 看起来像这样:

kotlin.incremental.usePreciseJavaTracking=true
android.useAndroidX=true
android.enableJetifier=true
android.uniquePackageNames=true

在 google 的文档 ( https://developer.android.com/studio/build/shrink-code ) 中没有提到我需要明确地拥有 keep 指令。

无论何时使用收缩器(R8 或 ProGuard),它都会使用提供的保留规则来确定程序的可能入口点。这些入口点包括应用程序中使用的任何反射。 Android Studio 有一组默认保留规则(由 getDefaultProguardFile('proguard-android-optimize.txt') 生成),与 aapt2 生成的规则一起适用于许多应用程序。但是,如果应用程序使用超出这些规则涵盖范围的反射,则需要额外的规则。您正在使用的保守规则(将所有内容都保留在应用程序包和子包中)适用于大多数应用程序,但您最终会保留比要求更多的内容。

您可以将 -printconfiguration <some file> 添加到您的 proguard-rules.pro 以查看实际传递给 R8 的所有规则。