9-4构建速度优化
来源:9-4 构建速度优化

qq_背靠背沉默_1
2021-01-12
这一模块里面讲的离线模式可以加速构建速度,那么请问下非离线模式大概有什么会影响构建速度呢,视频里面讲的select show 又是什么,没听清?
1回答
-
allenfeng
2021-01-13
同学你好~ 针对上面几个问题进行解答:
一、"select show"是什么?
结合上下文,视频中指的是“SNAPSHOT”。
在发布AAR到Maven仓库的时候,有快照版本和正式版的区别,若版本号后跟着"-SNAPSHOT"后缀,就是快照版本,反之,则是正式版。如"1.0.2-SNAPSHOT" 、"1.0.2"。
它们的区别在于:在Maven仓库中,已发布的AAR是否允许被覆盖。SNAPSHOT版本在开发调试阶段的协作场景下比较实用,对于Maven仓库中同一个版本号的快照版本,是可以被不断更新覆盖的,快照版AAR的使用者不需要更新工程的版本号就可以获取到最新的代码改动,减少联调的成本。而正式版的AAR在Maven仓库中,则是不可被覆盖的,一个版本号用掉后,需要改变版本号才能发布新版本,意味着使用者也需要更新版本号才能用到最新的AAR。正式版一般适用于APK的灰度、发布等阶段,确保多次构建之间AAR的一致性,以免引入未经测试的代码改动。
二、离线模式为何可以加速构建?
Gradle在构建过程中需要通过网络去下载来自于远程仓库中的第三方依赖包。若某个库使用的是SNAPSHOT版本,那么Gradle就会在每次构建的过程中,通过网络请求,去检查远程maven服务器中是否有此库的更新版本。整个网络请求、依赖解析的过程,再结合网络环境等因素,是具有一定耗时的。开启offline模式后,就可以强制Gradle跳过这个过程,使用本地缓存的库,从而节省编译耗时。需要注意的是,开启offline的前提是,工程此前已经编译通过,将所需依赖已经缓存到本地了。也就是说,若后续修改了版本号,那么需要关闭offline模式再重新构建。
三、还有哪些因素会影响构建速度?
这个问题需要结合Gradle构建的整个流程,自上而下去分析,我们可以从Gradle生命周期的角度来看(第二章的知识):
(1)初始化阶段:此阶段主要执行settings.gradle 脚本,脚本中若包含过多的子工程或者其他耗时操作,会拖慢这个阶段的执行。
(2)配置阶段:解析执行各个子工程的build.gradle脚本,若脚本中、或者使用的插件的apply方法中等地方存在耗时操作,则可能会导致这个阶段耗时过长,此外,工程依赖的下载和解析,也会占用一定时长。
(3)执行阶段:主要是执行前一阶段配置好的所有的Task。这个流程其实就涉及到了APK的构建流程。过程中会分为资源编译、javac/kotlinc、proguard、dex、打包签名等步骤。这里每一个步骤都有可能会导致耗时慢,例如代码量庞大的时候,javac/kotlinc等阶段的耗时自然也就随之上升。
了解上述几个阶段后,就可以了解有哪些因素会影响构建速度了,例如网络环境差、工程代码量庞大等因素,都会有影响,更多的因素可以尝试继续去发掘下。
我们课程里面介绍的几种较为通用的优化手段,其实都是围绕这几个阶段展开。例如offline模式,是为了减少配置阶段的耗时;使用增量编译、提升minSdkVersion、推行模块化/组件化开发等,是为了减少第第三阶段的耗时。
对于实际项目的构建速度优化,还是需要具体问题具体分析,建议使用Gradle的profile工具,去生成一份耗时的报告,结合起来优化构建耗时。
对这块兴趣较大的话,推荐阅读课程电子书里面提供的一些参考链接,继续深入学习。
有其他疑问欢迎继续提出探讨~
10
相似问题