开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
构建时间: 多模块vs单模块
简介
安卓社区的许多文章都说, 构建时间是模块化的好处之一. 他们说, 有了模块, 你的代码会被编译得更快.
甚至官方文档也这么说 developer.android.com/topic/modul…
但我有一些疑虑 — 添加模块意味着在编译应用程序时给Gradle增加了更多的工作要做. 所以我一直想自己检查一下, 了解这其中有多少是真的.
我已经检查过了, 而且准备分享我的结果.
我测量的内容
我测量了在工作期间最常使用的Gradle任务的执行时间.
这是同一个项目(源代码), 但分为不同数量的模块.
- 大量的模块.
- 较少的模块.
- 只有一个模块.
我测量的用例
./gradlew clean— 对我来说, 当我切换一个分支或想重建Hilt的依赖关系时, 这是一项重要的任务. 在启动clean任务之前, 我执行了assembleDevDebug任务, 所以有了要清理的东西../gradlew assembleDevDebug— 这是最重要的任务. 每次我在Android Studio中点击Make Project或Run app时, 它都会被执行. 运行这个任务后, 我用./gradlew clean清理了项目../gradlew assembleDevDebug –offline— 如果我不确定我的网络连接, 有时我会使用离线模式. 在运行任务后, 我清理了项目../gradlew assembleDevRelease— 这个任务是由我的CI在组装构建用于QA验证时使用的. 在运行这个任务后, 我清理了项目../gradlew assembleDevDebug但这次没有清理项目, 以便检查模块数量对增量构建的影响.
我查过的代码
我对我目前正在进行的项目obimy.com/进行了检查. 所以它并不是什么演示或样本应用程序, 而是已经在生产中运行的应用程序.
该项目有:
- 59个模块
- 864个kotlin文件和1个java文件
- 65个文件在assets中
- 1个proto文件
- 161个带资源的文件
模块结构:
下一步, 我做了一个副本, 将特征子模块合并为一个模块.
例如, feature-A有数据模块, 领域模块和UI模块. 我把数据和领域模块移到了UI模块中, 所以一个功能有3个模块, 我使用了一个模块.
在合并了所有我可以合并的模块后, 我得到了33个模块.
我得到的模块结构是:
最后, 我把所有东西都合并到一个app模块中(说实话, 这很有挑战性 - 我必须更新导入, 因为我的模块有自己的资源. 这真是一项艰巨的工作).
我得到的模块结构是😅:
检查的前置条件: 我使用的是MacBook Pro 15, i7和16Gb内存. 我关闭了笔记本电脑上的所有程序(网络浏览器, 通信软件等), 因此没有任何东西可以影响到运行任务.
要实现检查自动化, 我写了一个简单的python脚本, 来执行任务并测量任务运行时长. 每一个任务执行5次.
脚本的链接是: gist.github.com/o-vitaliy/d…
测试结果
1模块项目中的任务assembleDevDebug显示了最佳时间. 5次运行的平均时间是75.4秒. 有33个模块的项目多工作了19.6秒, 所以它多了26%. 而59个模块的项目工作时间长37%.
我很惊讶, 带有参数- offline的assembleDevDebug任务的执行时间比没有它的时长更长.
不过, 正如你所看到的, 1个模块的项目显示了最好的构建时间:
clean任务并没有被模块的数量显著影响.
assembleDevRelease任务运行时长被模块数量影响最大(我的指的是秒数绝对值). 你有的模块越多, 任务执行的时间就更长. 与只有一个模块的项目相比, 59个模块的项目组装发布构建的时间要长50%. 它多了近100秒的时间.
每次执行完assembleDevDebug任务后不运行clean, 显示在多模块项目中, 增量构建的时间明显更长.
结论
正如我之前提到的, 除了脚本, 笔记本上没有其他东西在运行. Gradle不需要与其他程序共享笔记本的资源.
通常, 当我工作时, 我有AndroidStudio, 浏览器, Figma和其他程序打开. 所以我很确定, 我检查的每一个任务都会运行得更久, 而且模块化对构建时间的影响也会更大(以绝对秒值为单位).
在运行这些测试后, 我发现尽管模块化有很多好处, 但对于构建MVP或演示项目来说, 它可能不是最好的选择. 多模块项目中的每个任务都需要更长的时间来构建, 因此与单模块项目相比, 我将在编译上花费更多的时间.
请注意, 模块化甚至会使你的速度变慢.
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情