Android Gradle 编译常见优化手段

2024-08-06 08:12:20 浏览数 (1)

本文主要分享常见的 Gradle 编译优化手段,并提供成本,收益,推荐度等维度供参考。以帮助大家快速找到最适合自己项目情况的优化项。

文章内容介绍

每个团队或许都有那么一个或两个比较关注工程编译耗时的同学,那么这篇文章就是分享给你的。

本文主要分享常见的 Gradle 编译优化手段,并提供成本,收益,推荐度等维度供参考。以帮助大家快速找到最适合自己项目情况的优化项。

可用的编译优化观察工具

工欲善其事,必先利其器。本章节介绍可以让你观测编译情况的工具。

Gradle Build Scan

Gradle Build Scan 是分析编译耗时不得不了解的一个官方工具。它提供了几乎所有你想了解的信息:

  • 编译耗时
Alt textAlt text
  • task 实现,task 的前后依赖关系
Alt textAlt text
  • task 缓存命中情况
Alt textAlt text
  • task 执行时间线
Alt textAlt text
  • 两个 gradle 执行对比,可用于对比两个构建之间无法复用缓存的 task 究竟是什么参数不同导致。这个功能最近收费了,可恶啊

如何使用

方式一:gradle 命令末尾加上 --scan 参数

方式二:在工程根目录 settings.gradle 增加如下声明:

代码语言:javascript复制
apply plugin: com.gradle.enterprise.gradleplugin.GradleEnterprisePlugin
gradleEnterprise {
    buildScan {
        termsOfServiceUrl = "https://gradle.com/terms-of-service"
        termsOfServiceAgree = "yes"

        // isOpenDebugLog 控制是否开启默认发布scan链接
        publishAlwaysIf(isOpenDebugLog)
    }
}

项目编译数据分享

在不同的时间段,我对产品的主工程编译进行了集中投入优化,效果还不错:

编译耗时中位数 1.5min -> 0.5min(中位数可以比较好的体现增量编译的耗时):

Alt textAlt text

编译平均耗时 2.5min -> 1.6min(本地)

Alt textAlt text

编译平均耗时 5.4min -> 4.1min (蓝盾)

Alt textAlt text

当然,项目是不断在增长和劣化的,停止优化后编译耗时又会开始缓慢上涨。

可行的优化项

1. 云编译——真正的工程学

电脑很卡,那就换台电脑。——鲁迅

这里云构建指的是:购买云开发机,通过 ssh 和 rsync 工具完成源码推送,编译,产物拉取。

Sickworm 锐评