本文会不定期更新,推荐watch下项目。如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request。本文意在分享作者在实践中掌握的关于gradle的一些技巧。
本文固定连接:github.com/tianzhijiex…
本文有部分关于加速配置的内容在Android打包提速实践已经有所涉及,如果有想了解打包加速的内容,可以移步去阅读。
需求
随着android的发展,新技术和新概念层出不穷。不同的测试环境、不同的分发渠道、不同的依赖方式,再加上各大厂家“优秀”的插件化方案,这些给我们的开发工作带来了新的需求。我希望可以通过gradle这个令人又爱又恨的东西来解决这些问题。
实现
调整gradle的编译参数
gradle.properties中允许我们进行各种配置:
配置大内存:
org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8复制代码
- 1
守护进程
org.gradle.daemon=true复制代码
- 1
并行编译
org.gradle.parallel=true复制代码
- 1
开启缓存:
android.enableBuildCache=true复制代码
- 1
开启孵化模式:
org.gradle.configureondemand=true复制代码
- 1
以上的配置需要针对自身进行选择,随意配置大内存可能会出现oom。如果想了解这样配置的原理,请移步官方文档。
写死库的版本
dependencies {
compile 'com.google.code.gson:gson:2.+' // 不推荐的写法
}复制代码
- 1
- 2
- 3
这样的写法可以保证库每次都是最新的,但也带来了不少的问题:
- 每次build时会向网络进行检查,国内访问仓库速度很慢
- 库更新后可能会更改库的内部逻辑和带来bug,这样就无法通过git的diff来规避此问题
- 每个开发者可能会得到不同的最新版本,带来潜在的隐患
推荐写成固定的库版本:
dependencies {
compile 'com.google.code.gson:gson:2.2.1'
}复制代码
- 1
- 2
- 3
即使是jar包和aar,我也期望可以写一个固定的版本号,这样每次升级就可以通过git找到历史记录了,而不是简单的看jar包的hash是否变了。
全局设定编码
allprojects { repositories { jcenter() }
tasks.withType(JavaCompile){ options.encoding = <span class="hljs-string">"UTF-8"</span> }
- 1
- 2
- 3
- 1
- 2
- 3
- 4
- 5