赞
踩
汇总:Android小白成长之路_知识体系汇总【持续更新中…】
在使用gradle构建的时候,gradle会对输出进行缓存,便于下一次构建时重用相同的输出,避免重复构建,可以节省大量的时间,对编译速度优化方面具有非常大的帮助,而且gradle新版本中也在逐步地完善缓存,提高命中率,因此使用缓存是非常有必要的优化手段,目前在Android Studio中可以使用本地缓存和远程缓存两种方式,接下来简单介绍一下最基本的配置,了解更多请点击附录中的链接查阅
默认情况下,未启用构建缓存,我们需要在gradle.properties中开启缓存,添加字段
org.gradle.caching = true
也可以在命令行进行构建的时候添加--build-cache
,例如
./gradlew build --build-cache
开启构建缓存后,默认开启了本地缓存,而本地缓存默认存储于gradle用户主目录中,但是可以根据需要进行手动配置。打开setting.gradle
文件,添加
buildCache{
local{
directory = new File(rootDir, 'build-cache')
removeUnusedEntriesAfterDays = 30
}
}
其中directory
设置的是目录,removeUnusedEntriesAfterDays
是多长时间后清除未使用的缓存
远程构建缓存应用于多人开发的场景,特别是使用了CI构建的场景,因为CI构建足够稳定,可以用作共享缓存,而本地机器则使用CI构建生成的缓存,就能避免一些问题,这些问题后续讲述。先了解如何配置远程构建缓存,同样的,打开setting.gradle
文件,添加
buildCache{
remote(HttpBuildCache){
url = 'http://example.com/cache'
}
}
url
是缓存的远程后端地址,会在下文中介绍如何简单地配置一个可用的cache后端
配置缓存后端最简单的方法是使用gradle
为我们提供的构建缓存结点gradle/build-cache-node
,此结点可以和Gradle Enterprise
配合使用,达到最佳效果,但Gradle Enterprise
是收费的,这里只单独使用gradle/build-cache-node
首先下载build-cache-node的jar包,下载地址:build-cache-node下载
配置java运行环境,不会配置的直接百度搜索即可,这里不做描述。需要注意,9.0以上的版本需要使用java 11
及以上的java环境
下载文件后,运行终端,直接进入它所在的文件夹,执行命令:
java -jar build-cache-node-9.11.jar start
其中版本号需要替换成你下载的版本
上面的启动方式的配置都是默认的,端口号是5071,访问节点主页就是localhost:5071,而在gradle中配置远程缓存的url就是http://localhost:5071/cache
推荐使用的启动方式:
java -jar build-cache-node-9.11.jar start --data-dir build-cache-node --port 80 --path my-path
节点未提供开机启动的功能,因此我们需要手动去配置开机自动运行上述的命令行,具体方法根据不同的系统而不同,感兴趣的可以去搜素如何开机自动执行
使用docker
启动节点可以更方便管理,同时不需要手动去下载jar包,也能配置开机自动执行
首先安装docker
,Windows
和macOS
推荐下载Docker Desktop
,Windows
系统需要开启虚拟化技术,因为Windows
安装docker
需要用到virtual box
在终端运行命令行启动镜像:
docker run --detach \
--user $UID \
--volume build-cache-node:/data \
--publish 80:5071 \
--restart always \
gradle/build-cache-node:9.11 \
start
--path my-path
$UID
指定为当前登录的用户build-cache-node
文件夹always
则为始终保持自动重启不使用CI时,gradle可以配置如下:
buildCache{
local{
enable = true
removeUnusedEntriesAfterDays = 30
}
remote(HttpBuildCache){
url = 'http://example.com/cache'
enable = true
push = true
}
}
该配置下同时使用本地缓存和远程缓存,构建时会首先检测本地缓存,没有时才会使用远程缓存,push = true
当前缓存会上传到远程缓存中,在没有使用CI构建的情况下只能每个人本地上传,但这会导致缓存经常改变,导致其他人命中率没那么高。可以定个规范,主导者创建分支后执行首次编译并且打开开关上传纯净的缓存,其他人关闭这个字段,不上传自己的缓存,只使用远程缓存。
使用CI时,就更加规范了,由于CI构建会保持最新并稳定的已合入代码的缓存,因此可以使用CI的缓存作为远程缓存,本地机器都不进行缓存的上传,gradle配置如下:
boolean isCiServer = System.getenv().containsKey("CI")
buildCache {
local{
enable = !isCiServer
}
remote(HttpBuildCache) {
url = 'https://example.com/cache/'
push = isCiServer
}
}
也就是判断当前环境是否是CI构建环境,如果是的话则关闭本地缓存,开启远程缓存推送,关闭本地缓存是为了保持缓存的纯净度。其他人的本地机器则由于不是CI环境,就不会上传缓存,只会使用远程缓存
localhost
本地地址访问,可以根据实际情况改为正确的地址。例如需要局域网内访问,就应该改为ip地址或者映射后的域名,外网访问则需要配置相关的外网地址localhost:5071
,可以在里面配置缓存大小或者访问用户控制,也可以看到缓存占用情况,还可以配置Gralde Enterprise
相关信息localhost:5071/cache
会遭到访问拒绝,返回一个错误页面,但可以在gradle配置中正常访问remote read time out
的信息,则需要排查网络,例如局域网的话需要查看是否在同一个局域网下,还需要排查是否挂了VPN导致访问不上。还有一个由于Android Studio导致的非常坑的问题,如果曾经在AS中配置了代理,记得在设置里去掉代理,同时一定要去全局的gradle.properties里查看是否有代理的配置写在里面,因为即使你在设置里不使用代理,这个文件里的代理配置字段也不一定会被清空,很多AS的网络问题都是因为这个引起的!!!Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。