使用 packageScope 优化指定软件包(实验性)

您可以使用 R8 和 packageScope 优化特定软件包。此功能旨在作为尚未使用 R8 的应用的可选第一步,不建议已使用 R8 的应用使用。

下的 R8 兼容。

考虑是否使用 packageScope

如果您的应用已使用 R8,请勿使用 packageScope,因为就性能和应用大小而言,这是一种次优配置。相反,您可以通过改进的 保留规则 来增强应用的 R8 配置,或者,如果使用 兼容模式,则可以迁移到 R8 的完整模式。

尚未使用 R8 但正在采用 R8 的应用可以使用 packageScope 来逐步管理过渡。由于 R8 会应用强大的优化,这些优化可能会改变应用的行为,因此将这些优化限定在可以安全优化的特定软件包(例如 AndroidX 和 Kotlin)中,可让您以最小的风险获得性能提升。在应用稳定后,您可以逐步将这些优化扩展到代码库和依赖项的其余部分,并在每个阶段测试稳定性。

前提条件

使用 R8 和 packageScope 需要满足以下条件:

配置优化

如需使用 packageScope 启用优化,请完成以下步骤。

选择要优化的库

确定要优化的库。我们建议您先从 AndroidX 和 Kotlin 库 androidx.**kotlin.**kotlinx.** 开始,因为这些库是已配置为与 R8 兼容的稳定库。

启用对使用 R8 和 packageScope 的支持

将以下内容添加到项目的 gradle.properties 文件中:

android.r8.gradual.support=true

设置优化块

在模块级 build.gradle.kts(或 build.gradle)文件中,将 optimization 块添加到发布 build 配置中。在此块内,使用 packageScope 列出要优化的特定软件包。在 build.gradle.kts 文件中,将软件包列表封装在 setOf() 中。

Kotlin

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**")
            }
        }
    }
}

Groovy

android {
    buildTypes {
        release {
            optimization {
                enable = true
                packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"]
            }
        }
    }
}

测试优化

应用或更新 packageScope 声明后,请全面 测试应用 以验证是否发生了意外崩溃或行为变更 。

从优化指定软件包过渡到优化整个应用

为了最大限度地提高优化效果,您应逐步从使用 packageScope 过渡到对整个应用使用 R8。此过程涉及逐步扩大优化范围:

  1. 从稳定库开始 。首先,仅在 packageScope 列表中包含与 R8 优化兼容的常用稳定库。从 AndroidX 和 Kotlin 库 androidx.**kotlin.**kotlinx.** 开始。
  2. 逐步添加软件包 。逐步向 packageScope 添加新的软件包前缀:
    1. 评估依赖项 。查看应用的库。适合添加到 packageScope 列表中的库包括 Google 官方库(例如 com.google.**)和其他可靠的库,例如 OkHttp(例如 okhttp3.**okio.**)。优先考虑不涉及大量反射、序列化或原生代码调用 (JNI) 的库。
    2. 根据软件包大小确定优先级 。使用 Android Studio 的 APK 分析器 找出导致应用大小增加的主要因素。
      1. 在关闭 R8 的情况下构建发布版 AAB 或 APK。
      2. 在分析器中打开它并检查 dex 文件。
      3. 按大小对软件包进行排序。最大的软件包可带来最高的投资回报率 (ROI)。只要这些库没有过于宽泛的保留规则,首先针对这些库进行优化即可在流程早期大幅减小应用大小。如需了解详情,请参阅 明智地选择库
  3. 验证行为变更 。添加每个新的软件包前缀后,请进行 全面测试,以检测并解决任何回归或 意外行为。
  4. 最后添加应用软件包 。如果您的应用软件包不使用大量反射,请将应用软件包包含在 packageScope 中,并根据需要逐步添加保留规则。如果您的应用软件包使用大量反射,请将软件包包含在 packageScope 中,并为所需的软件包添加软件包级保留规则。迭代保留规则以对其进行优化。
  5. 改用 R8 优化整个应用 。在 packageScope 声明中包含应用的大部分依赖项且应用稳定后,移除 packageScope 以在完整模式下优化整个应用。