引言
随着业务的复杂度增加,项目也会越来越厚重,编译时间也随之而增加, 那么降低项目的编译速度,不仅可以提高工作效率,增加工作的流畅性, 当然对心情美丽也起到促进作用。
下面我们总结一下可以降低项目编译速度的几种方式:
1. dependencies中引入第三方库时尽量指定版本号,不要用+这种不确定版本的方式。
- 指定版本号Gradle只有在本地没有此库缓存的情况下,请求远程仓库下载并缓存在本地, 如果没有配置强制更新,则会一直使用本地缓存。
- 使用"+"不指定版本号,指的是获取远程仓库中最新库的版本并下载缓存, 就是每次编译都会与远程仓库做一次交互,如果没有比本地缓存版本更好的其他版本,就使用本地缓存, 如果有比本地缓存版本更好的版本,会自动下载最新版本并缓存在本地,在一般开发过程中,如果不是 本地库实在太老或存在bug的情况下,我们一般都会适应库的稳定版可能不是最新版。
2. 灵活使用offline work
如果使用的比较旧的Android Studio,在已经完整编译过一次项目之后, 可以在AS的Settings->compile->gradle 中设置offline work,gradle编译不会联网查询远程仓库的版本信息, 只会使用本地缓存进行编译。
3. 修改根目录下.properties文件,添加以下配置
-
配置大内存:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 -
守护进程
org.gradle.daemon=true -
并行编译
org.gradle.parallel=true -
开启缓存:
android.enableBuildCache=true -
促进Gradle初始化、加载 setting.gradle(|| setting.gradle.kts)、 加载各个模块的 build.gradle(|| build.gradle.kts)、执行一系列任务。
org.gradle.configureondemand=true
4. 分析build过程
Gradle任务时添加 --profile 标志来实现。当使用此标志时,Gradle会创建一个概要分析报告, 它可以告诉我们构建过程的哪些部分是最耗时的 一旦知道瓶颈在哪里,就可以进行必要的更改。 分析报告将作为HTML文件保存在模块的 build/reports/profile 目录下。
- Summary 栏显示执行任务期间在每个阶段中花费的时间的概览。
- Configuration 栏显示配置阶段花费了多少时间。
- Dependency Resolution 部分显示每个模块解析依赖所需的时间。
- Task Execution 部分包含非常详细的任务执行时间,这个部分具有每个任务的执行时序,按执行时间从高到低排序。
5. 启用Jack and Jill
android {
defaultConfig {
useJack = true
}
}
- 优化编译过程:
- 旧的编译过程
javac (.java –> .class) –> dx (.class –> .dex)- 使用Jack的编译过程
Jack (.java –> .jack –> .dex) - 对依赖库做 pre dex,且成果会被保存到 build/intermediates/jill/debug 目录。 之后的编译过程中,只要依赖库的数目和版本不变,之前的 pre dex 成果会被复用;Jack 只需要编译变化的源代码, 然后对多个 dex 进行 merge 即可,能够加速整个编译过程。
- 编译时会启动一个 Jack compilation server,并开启并行编译 。
6. 优化永无止尽,时刻准备着。。。😄😄😄😄
更多Android技术分享可以关注我的Android技术圈子添码猩球, 也可以加入QQ群号:690347536,学习交流Android开发技能。