启用 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 的所有规则。
我们已经使用指令
明确禁用了 R8android.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 的所有规则。