深入探索 Android Gradle 插件的缓存配置

什么是配置缓存?

配置缓存是一个提升 IDE 和命令行构建速度的基础构建块。这是 Gradle 6.6 版本提供的一个高度实验性功能,它可以使构建系统记录一次任务的图谱信息,并在接下来的构建中进行复用,从而避免再一次配置整个工程。这一功能也是配置阶段改进的延续,这些改进中引入了惰性配置 (lazy configuration),以避免在构建的配置阶段进行不必要的工作。这些改进对于快速迭代开发的重要性不言自明,而后者也是 Android Studio 团队所持续关注的一个用例。

 

  • 惰性配置 (lazy configuration)

    https://docs.gradle.org/current/userguide/lazy_configuration.html

性能改进

这一功能的主要目标便是提升构建速度。在 Android 版 Santa Tracker 工程的基准化分析中,对于启用了配置缓存的构建过程,我们测量出其在 Android Studio 中的总构建时间减少了 35% (从 688ms 到 443ms,测试平台为 Linux,使用 Intel® Xeon® Gold 6154 CPU @ 3.00GHz )。下图展示了使用和不使用配置缓存进行 100 次构建的平均总构建时间 (以毫秒为单位):

  • Santa Tracker
    https://github.com/gradle/santa-tracker-performance

对于一些工程,配置阶段可能会消耗 10 秒钟以上,节省时间的效果也因此更加显著。无论运行的是全新构建、增量构建还是更新构建,配置阶段的开销都是相同的。要衡量您的构建过程中配置阶段所消耗的时间,可以以空运行模式 (dry run mode) 运行任务,例如: ./gradlew :app:assembleDebug --dry-run。

 

为了进一步避免重复运行配置过程,配置缓存还允许来自同一工程的任务并行运行。以前,只有利用 Worker API 的任务可以同时运行,但是由于配置缓存可以确保任务独立且无法访问全局共享状态 (例如 Project 实例),因此可以默认启用此行为。而且,依赖关系解析结果可以在运行间进行缓存,从而有助于优化整体构建时间。

  • Worker API

    https://guides.gradle.org/using-the-worker-api/

  • Project

    https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html

如何试用?

配置缓存功能现在还处于实验阶段,我们希望您可以尝试它并向我们提供反馈。为了在您的构建中使用它,需要保证所有工程所应用的所有插件都是兼容的,这是为了安全地 (反) 序列化任务图。您可能需要更新某些 Gradle 插件。您可以通过此 issue 来获取受支持插件的完整列表,如果您使用的插件不在其中,请在它们的问题跟踪器中提交问题,并从 Gradle 问题中链接至该 issue。 

  • issue

    https://github.com/gradle/gradle/issues/13490

最新版的 Android Gradle 插件版本为 4.1 (目前为 4.1.0-rc03),但如果您希望获取所有的错误修复,请尝试最新的 4.2 版本 (目前为 4.2.0-alpha13)。Gradle 的版本应为 6.6,同时如果您正在使用 Kotlin,请将 Kotlin Gradle 插件更新为最新的 1.4 版 (相关 Kotlin issue)。最后使用以下代码更新 gradle.properties:

org.gradle.unsafe.configuration-cache=true
# 小心使用这一标记,因为有些插件还没有完全兼容
org.gradle.unsafe.configuration-cache-problems=warn
  • Kotlin issue

    https://youtrack.jetbrains.com/issue/KT-33908

查看所有 Android Gradle 插件版本,请参考如下页面:

https://maven.google.com/web/index.html#com.android.tools.build:gradle

如果启用了配置缓存,您应该可以在第一次运行时通过 Android Studio 的 Build 输出窗口或命令行看到 "Calculating task graph as no configuration cache is available for tasks…" (由于当前任务没有可用配置,正在生成任务图谱...) 字样;而在第二次运行中会复用配置缓存,所以输出中会包含 "Reusing configuration cache. (复用配置缓存)"。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值