你的AndroidStudio编译时是否很卡?你的Gradle编译时是否很慢,运行一次要等10分钟?如果你还没有遇到,那可能说明你的电脑配置够好,或者项目还不够大。
版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com
尤其像我这种公司电脑配置渣,还是机械硬盘的开发者肯定是忍不了的,太影响开发效率了,所以我们就想办法加快编译速度了,当然加快编译的手段有很多种,在Android官方Instant Run出来之前,很多开发者是使用第三方的一些库来提高开发效率,底层原理几乎都是apk热更新原理。在Instant Run出来之后,很多开发者都开始用这个被称为闪电编译的功能,但是它还是有很多不足的,具体大家可以看官网的说明:Instant Run。不过我相信Instant Run后来肯定会越来越好,我们就不用依赖什么第三方了,比如Jack和apt就不能一起用,导致使用了apt的开发者使用lambda就得用retrolambda,这些都是需要官方来优化和改进的。废话不多说下面正式开撸 。
Freeline介绍
今天向大家介绍一款Android平台的增量编译工具:Freeline。Freeline是由阿里巴巴蚂蚁聚宝Android团队开发的一款针对Android平台的增量编译工具,它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。
Freeline代码开源在Github:
https://github.com/alibaba/freeline
Freeline在云栖社区的原理说明:
https://yq.aliyun.com/articles/59122?spm=5176.8091938.0.0.1Bw3mU
介绍这款工具也是我本人使用了好几周以后觉得真心不错,所以来分享给大家,有什么使用上的问题欢迎来交流啊,自从使用了Freeline后真的省下了很多喝咖啡的时间,本人表示非常欢喜。
以下是从官网整理来的一些说明:
Freeline内部采用了类似Facebook的开源工具buck的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速效果,另外在class及dex,resources层面作了相应缓存策略,做到真正增量开发,另外引入并优化buck的部分加速组件dx,DexMerger,资源编译方面,深入改造了Aapt资源编译流程,当资源发生改变时候,秒级完成增量包编译,其中增量包仅含最小的变更集合(10Kb~数百Kb内),后期也被运用到线上进行资源/代码动态替换。
Freeline的特性:
- 支持调试
- 系统最低支持到api level 9
- 支持标准的多模块Gradle工程的增量构建
- 并发执行增量编译任务
- 进程级别异常隔离机制
- 支持so动态更新
- 支持resource.arsc缓存
- 支持retrolambda
- 支持DataBinding
- 支持各类主流注解库
- 支持Windows,Linux,Mac平台
当然每个事物都有自己的不足,现在已经Freeline的一些不足:
- 第一次增量资源编译的时候可能会有点慢
- 不支持删除带id的资源,否则可能导致aapt编译出错
- 暂不支持抽象类的增量编译
- 不支持开启 Jack 编译
- 不支持 Kotlin/Groovy/Scala
看了上面的这些介绍后不知道你有没有心动?什么,已经心动了?那么下面我们来看看它到底怎么用?
Freeline使用教程
1、在项目level的build.gradle中添加插件依赖
buildscript {
repositories {
jcenter()
}
dependencies {
...
classpath 'com.antfortune.freeline:gradle:0.8.3'
}
}
2、在项目主module的build.gradle中应用freeline插件的依赖
apply plugin: 'com.antfortune.freeline'
android {
...
}
3、一些注意点
修改了上面的gradle文件后,在你的编辑区域顶部会有一个黄色的警告条,警告条的右边有一个Sync Now
的超链接,嗯没错你必须点一下,来同步编译项目。
上面说过freeline最低支持到android level api 9,如果你在这里遇到提示minSdkVersion是14,你就得检查一下是否开启了Jack。
4、安装python、并配置系统环境变量
因为Freeline是用python写的,下面的的所有操作,包括编译等都要依赖python,所以我们要安装python,并且配置系统环境变量,因为每个同学的系统不一样,所以这里我给出python的下载页面,其它的自己去Google。
Python分2.x版本和3.x版本,但是Freeline目前只支持2.x版本的,以前学过一点点python,这里为大家推荐2.7.12版:
https://www.python.org/downloads/release/python-2712/
5、一句命令为你的项目下载安装Freeline
现在你必须已经安装好了python,然后在AndroidStudio中打开命令行,输入一下命令,将自动为我们下载freeline相关文件到项目下:
gradle initFreeline
如果你系统没有配置gradle的环境,将会提示你命令不存在,由于AndroidStudio已经为项目配置了默认的gredle,所以输入以下命名也是一样的:
gradlew initFreeline
先别急着输入:因为默认是从国外镜像地址下载,由于众所周知的原因,你很可能下载不到,所以我们可以使用国内镜像,所以如果上述命令没有通过,那么咱们在命令后面加一个-Pmirror
:
gradlew initFreeline -Pmirror
大概一分钟左右就下载好了,下载好之后你的项目结构大概是这样子:
6、运行项目
好了,一切准备就绪,下面就可以把你的手机连接运行项目了,当然这里就不是像以前一样点击那个绿色的Run
按钮了,而是使用命令。
第一次运行是需要全量编译,所以第一次的时间相对较长,甚至比gradle编译还要长,但是后期的运行会很快。
第一次全量编译,在命令行输入:
python freeline.py -f
如果我们后期修改了代码,秒秒钟就可以热更新到手机:
python freeline.py
如果你要调试应用,在命令行输入:
python freeline.py -d
常用命令帮助
python freeline.py -f —— cleanBuild 强制执行一次 clean build
python freeline.py -d —— 调试 打开debug模式
python freeline.py -h —— 帮助 显示帮助信息并退出
python freeline.py -v —— 版本 显示版本信息
python freeline.py -w —— 等待 让应用程序等待 debugger
python freeline.py -a —— 全部 在所有工程上强制执行clean build 并执行-f全量编译
python freeline.py -c —— 清空 清空缓存目录和工作空间
python freeline.py -i —— 初始化 对工程进行进行freeline初始化配置
Android Studio Freeline插件
一般我们开发的时候,想要运行项目时就点一下绿色的Run
按钮,几乎不用命令运行项目,所以FreeLine也有这样简单的操作方式,我们需要为AndroidStudio安装一个插件:
Setting → Plugins → 输入freeline → 点击Browse repositories → 点击Install → 重启AndroidStudio
下面来一个图解:
安装好之后根据提示重启AndroidStudio,然后会在绿色的Run按钮后面会多出来一个蓝色白心的Freeline Run按钮,如果要运行项目就点击下图中Freeline Run
按钮即可,如下图:
好啦到这里就全部结束啦,快去试试吧。
版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com