您可以将 R8 与 packageScope 搭配使用,以优化特定软件包。此功能旨在为尚未使用 R8 的应用提供可选的第一步,不建议已使用 R8 的应用使用。
考虑是否使用 packageScope
如果您的应用已使用 R8,请勿使用 packageScope,因为就性能和应用大小而言,这是一种次优配置。您可以改为使用改进的 keep 规则来增强应用的 R8 配置,或者,如果使用的是兼容模式,则迁移到 R8 的完整模式。
对于尚未采用 R8 但正在采用 R8 的应用,请使用 packageScope 逐步管理过渡。由于 R8 会应用可能会改变应用行为的强大优化,因此将这些优化限定在可以安全优化的特定软件包(例如 AndroidX 和 Kotlin)中,可让您以最小的风险获得性能提升。在应用稳定后,您可以逐步将这些优化扩展到代码库和依赖项的其余部分,并在每个阶段测试稳定性。
前提条件
将 R8 与 packageScope 搭配使用需要 Android Gradle 插件 9.0 或更高版本。
配置优化
如需使用 packageScope 启用优化,请完成以下步骤。
选择要优化的库
确定要优化的库。建议您先使用 AndroidX 和 Kotlin 库 androidx.**、kotlin.** 和 kotlinx.**,因为这些是已配置为与 R8 兼容的稳定库。
启用对将 R8 与 packageScope 搭配使用的支持
将以下内容添加到项目的 gradle.properties 文件中:
android.r8.gradual.support=true
设置优化块
在模块级 build.gradle.kts(或 build.gradle)文件中,向发布 build 配置添加 optimization 代码块。在此块内,使用 packageScope 列出要优化的特定软件包。在 build.gradle.kts 文件中,将软件包列表封装在 setOf() 中。
Kotlin
android { buildTypes { release { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
测试优化效果
应用或更新 packageScope 声明后,请全面测试您的应用,以验证是否发生了意外崩溃或行为变化。
从优化指定软件包过渡到优化整个应用
为了最大限度地发挥优化优势,您应逐步将整个应用从使用 packageScope 过渡到使用 R8。此过程涉及逐步扩大优化覆盖范围:
- 从稳定版库开始。首先,在
packageScope列表中仅添加与 R8 的优化功能兼容的常用稳定库。首先使用 AndroidX 和 Kotlin 库androidx.**、kotlin.**和kotlinx.**。 - 逐步添加软件包。逐步向
packageScope添加新的软件包前缀:- 评估依赖项。查看应用的库。适合添加到
packageScope列表中的库包括官方 Google 库(例如com.google.**)和其他可靠的库(例如OkHttp,包括okhttp3.**和okio.**)。优先考虑不涉及大量反射、序列化或原生代码调用 (JNI) 的库。 - 根据软件包大小确定优先级。使用 Android Studio 的 APK 分析器来确定导致应用大小增加的主要因素。
1. 构建发布版 AAB 或 APK,并关闭 R8。
1. 在分析器中打开该文件,然后检查
dex文件。 1. 按大小对软件包进行排序。最大规模的套餐可实现最高的投资回报率 (ROI),以便进行优化。只要这些库没有过于宽泛的保留规则,优先定位这些库就能在流程早期实现最显著的大小缩减。如需了解详情,请参阅明智地选择库。
- 评估依赖项。查看应用的库。适合添加到
- 验证行为变更。添加每个新软件包前缀后,请进行全面的测试,以检测并解决任何回归或意外行为。
- 最后添加应用软件包。如果您的应用软件包不使用大量反射,请在
packageScope中包含应用软件包,并根据需要逐步添加保留规则。如果您的应用软件包使用大量反射,请在packageScope中包含这些软件包,并为所需的软件包添加软件包级保留规则。迭代处理保留规则以对其进行优化。 - 改用 R8 处理整个应用。在应用的大部分依赖项都包含在
packageScope声明中且应用稳定后,移除packageScope以在完整模式下优化整个应用。