为了提供最佳用户体验,您应优化应用,使其尽可能小巧快速。我们的应用优化器(称为 R8)通过以下方式简化应用:移除未使用的代码和资源、重写代码以优化运行时性能等。对于您的用户,这意味着:
- 更快启动
- 提升了渲染和运行时性能
- ANR 数量减少
如需启用应用优化,请在发布 build 的应用级 build 脚本中设置 isMinifyEnabled = true(用于代码优化)和 isShrinkResources = true(用于资源优化),如以下代码所示。我们建议您始终同时启用这两项设置。我们还建议您仅在发布前测试的最终版应用(通常是发布 build)中启用应用优化,因为优化会增加项目的 build 时间,并且由于其修改代码的方式,可能会使调试更加困难。
Kotlin
android { buildTypes { release { // Enables code-related app optimization. isMinifyEnabled = true // Enables resource shrinking. isShrinkResources = true proguardFiles( // Default file with automatically generated optimization rules. getDefaultProguardFile("proguard-android-optimize.txt"), ... ) ... } } ... }
Groovy
android { buildTypes { release { // Enables code-related app optimization. minifyEnabled true // Enables resource shrinking. shrinkResources true // Default file with automatically generated optimization rules. proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') ... } } }
优化了资源缩减功能,以支持更小的应用
Android Gradle 插件 (AGP) 的 8.12.0 版本引入了优化的资源缩减功能,旨在集成资源和代码优化,以创建更小、更快的应用。
启用优化型资源缩减
如需为 9.0.0 之前的 AGP 版本启用新的优化资源缩减流水线,请将以下内容添加到项目的 gradle.properties 文件中:
android.r8.optimizedResourceShrinking=true
如果您使用的是 AGP 9.0.0 或更高版本,则无需设置 android.r8.optimizedResourceShrinking=true。在 build 配置中启用 isShrinkResources = true 后,系统会自动应用优化后的资源缩减。
验证并配置 R8 优化设置
如需使 R8 能够使用其完整优化功能,请从项目的 gradle.properties 文件中移除以下行(如果存在):
android.enableR8.fullMode=false # Remove this line from your codebase.
请注意,启用应用优化会使堆栈轨迹难以理解,尤其是在 R8 重命名类或方法名称的情况下。如需获取与源代码正确对应的堆栈轨迹,请参阅恢复原始堆栈轨迹。
如果启用了 R8,您还应创建启动配置文件,以进一步提升启动性能。
如果您启用了应用优化功能,但该功能导致了错误,可以尝试以下策略来解决这些错误:
如果您有兴趣优化构建速度,请参阅配置 R8 的运行方式,了解如何根据您的环境配置 R8。
AGP 和 R8 版本行为变更
下表概述了 Android Gradle 插件 (AGP) 和 R8 编译器的各个版本中引入的主要功能。
| AGP 版本 | 推出的功能 |
|---|---|
| 9.0 |
优化资源缩减:默认处于启用状态(使用 android.r8.optimizedResourceShrinking 进行控制)。优化资源缩减有助于将资源缩减与代码优化流水线集成,从而打造更小、更快的应用。通过同时优化代码和资源引用,它可以识别并移除仅从未使用过的代码引用的资源。与之前单独的优化流程相比,这是一个重大改进。对于在不同设备规格纵向共享大量资源和代码的应用,此功能尤其有用,可将应用大小缩减 50% 以上。这样一来,应用大小会减小,从而缩短下载时间、加快安装速度,并带来更好的用户体验,包括更快的启动速度、更出色的渲染效果和更少的 ANR。 库规则过滤:已弃用库消费者规则中对全局选项(例如 -dontobfuscate)的支持,应用将过滤掉这些选项。如需了解详情,请参阅添加全局选项。Kotlin null 检查:默认情况下已优化(使用 -processkotlinnullchecks 进行控制)。此版本还显著提升了构建速度。如需了解详情,请参阅用于进一步优化的全局选项。优化特定软件包:您可以使用 packageScope 优化特定软件包。此功能处于实验性支持阶段。如需了解详情,请参阅使用 packageScope 优化指定软件包。默认情况下已优化:已放弃对 getDefaultProguardFile("proguard-android.txt") 的支持,因为该功能包含 -dontoptimize,应避免使用。请改用 "proguard-android-optimize.txt"。如果您需要在应用中全局停用优化,请手动将相应标志添加到 ProGuard 文件。
|
| 8.12 |
资源缩减:添加了初始支持(默认处于关闭状态。启用使用 isShrinkResources)。资源缩减功能可与 R8 协同工作,有效识别并移除未使用的资源。Logcat 回溯:支持在 Android Studio Logcat 窗口中自动回溯。 |
| 8.6 |
改进了回溯功能:默认情况下,所有 minSdk 级别都包含文件名和行号回溯功能(之前在版本 8.2 中需要 minSdk 26 及更高级别)。更新 R8 有助于确保混淆构建的堆栈轨迹清晰易读。此版本改进了行号和源文件的映射方式,使 Android Studio Logcat 等工具能够更轻松地自动将崩溃重新追溯到原始源代码。 |
| 8.0 |
默认处于完整模式: R8 完整模式可提供更强大的优化功能。该功能默认处于启用状态。您可以使用 android.enableR8.fullMode=false 选择退出。
|
| 7.0 |
提供完整模式:作为选择启用功能,使用 android.enableR8.fullMode=true 引入。完整模式会更严格地假设代码如何使用反射和其他动态功能,从而应用更强大的优化。虽然它可以缩减应用大小并提高性能,但可能需要添加额外的保留规则,以防止必要的代码被剥离。
|