Gradle DPE实践|试试这样提升你的安卓系统构建速度

107 阅读4分钟

开发⼈员生产力工程大对决(DevProdEng Showdown)是由Gradle发起的⼀个特别的直播系列活动,汇集众多出色的行业专家,以类似于游戏节目的形式进行快速辩论与开发⼈员生产力工程和规模化软件工程有关的热门话题。

其中也是非常重要的⼀期—如何提升Android开发人员体验值得⼀看。本期Gradle邀请⼏位来自著名的全球技术和商业公司的Android 大师们分享了他们加速 Android 构建和测试反馈周期的最佳实践。他们来自摩根大通银行 (JP Morgan Chase) 、Twitch 、达美航空 (Delta Air Lines)和凯撒医疗(Kaiser Permanente)。本文整理了⼏位Android大师的精华发言,希望能给大家带来⼀些新思路。

  Heath Borders - Twitch “产品只会随着时间的推移而变大,所以要将构 建模块化,  以尽量减少变化的爆炸半径 。例如 , 我们过去有⼀个模块,  里面全是高度互联的GQL 代码,  对这个模块的任何改动都需要三分钟的重 建,  并阻塞我们应用程序的其他部分的构建 。因 此,  我们创建了⼀个单独的公共API 模块,  包含 GQL APIs 的 接 ⼝ 。这 使 我 们 能 够 解 耦 我 们 的 模 块,  从构建生成GQL的模块中消费API。我们后来 使用Apollos 多模块支持来并行构建我们生成的 GQL,  进⼀步减少了变化的爆炸半径。”
  Emma Tresanszki - 摩根大通银行 “从最基本的开始,  开始对你的构建进行分析 。 你可以通过分析Gradle执行构建生命周期的每个 阶段和每个构建任务所需的时间来做到这⼀点 , 这样你就可以发现瓶颈,  并可能为自定义构建逻 辑创建任务,  看看哪些任务可以并行运行 。另 ⼀ 个 提 示是 考 虑 使 用 静 态 依 赖版本 而 不 是 动 态 版 本,  因为动态版本会导致意外的版本更新,  这使 得解决版本差异很困难,  而且它们会进⼀步减慢 构建速度,  因为Gradle必须检查更新,  而默认情 况下,  更新的缓存时间只有24小时。”
  Daniel Duval - 达美航空 “针对你实际构建的基础进行相关优化 。在我们 目前的环境中,  我们正在向M1机器转移。因此 , 所有的东西都被优化了,  包括从我们正常的JDK转 移到Liberia,  以获得本地arm64支持。在此基础 上,  启用你的缓存和类似性质的东西 。另外,  开 始考虑减少你用来构建代理的数量,  而不光是不 断的扩展。这样你就可以 "专业化 "每个或每个类 型代理的工作,  最大限度地提高他们各自的缓存 能力。”
  Joshua Fenemore - 凯撒医疗 “模块化 、模块化 、模块化,  然后再模块化。   这 是 迄 今 为 止 我 们 所 能 做 的 最 好 、最 有 成 效 的 事 情。但它必须是独立的模块 。如果你让两个模块 相互依赖,  你就会使你所获得的任何好处化为乌 有 。我最近刚学会的另⼀个技巧是,  确保你所有 的JDK 实例都是⼀样的 。因此,  Android Studio 和终端需要指向同⼀个实例 。这⼀改变实际上为 我节省了很多时间 。另外,  Android Studio内置 的 Java 版 本 似 乎 也 比 其 他 版 本 有 性 能 上 的 改 进。”

总 结

以上是⼏位业界技术达⼈关于构建阶段优 化技巧的分享,  以提高Android 开发⼈员 的体验,  当然不仅仅是构建领域可以提高 开发体验,  还包括很多其他领域的技巧 , 比 如 单 元 测 试, 集成 测 试 等质 量 关 卡 实 践,  以及app 运行时健康检测等缩短反馈 周期,  在后续的文章中,  我们会引入更多 如 何 提 高 开 发 ⼈ 员 体 验 以 及 生 产 力 的 实 践。(前往官网了解更多