一. freeline简介
Freeline的GitHub地址: https://github.com/alibaba/freeline
其官方介绍如下:
Freeline is a fast build and deployment tool for Android. Caching reusable class files and resource indices, it enables incrementally building Android apps, and optionally deploying the update to your device with hot swap.
Developed and used by Ant Fortune (about us) Android Team, Freeline has been significantly saving time in daily work. Inspiring by Buck and Instant Run but faster than ever, Freeline can finish an incremental build in just a few seconds. No more recompile and reinstall again and again before seeing your modifications, Freeline brings life-changing development experience for Android.
.
中文说明
下面是其原理说明
[Freeline原理] (https://yq.aliyun.com/articles/59122?spm=5176.8091938.0.0.1Bw3mU)
从中可以看出freeline加速的三驾马车是: 缓存、并行、Hot Swap (Instant Run原理)
二. 配置
- 配置根目录下的build.gradle文件
在项目根目录下的build.gradle文件中添加freeline插件:
classpath 'com.antfortune.freeline:gradle:0.8.1'
,
如下:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
classpath 'com.antfortune.freeline:gradle:0.8.1'
}
}
allprojects {
repositories {
jcenter()
}
}
- 配置主module下的build.gradle文件
a. 应用插件 (放在android插件之后)
apply plugin: 'com.antfortune.freeline'
b. 添加freeline配置
在android {}
中添加, 如下:
freeline {
hack true
//如果你定义了productFlavor, 记得把下面的注释放开, 把{Your-productFlavor}替换成你相应的productFlavor
//productFlavor '{Your-productFlavor}'
}
c. (**这一步可以和下面的"3"同时省略 --- [参考这里](https://github.com/alibaba/freeline/issues/280)**) 在dependencies块中添加对freeline的依赖, 如下:
```
dependencies {
// others
// ....
// dependencies for freeline
debugCompile 'com.antfortune.freeline:runtime:0.8.1'
//如果release包不想依赖freeline, 可以改成`releaseProvided com.antfortune.freeline:runtime-no-op:0.8.1'`, 后面会进行说明.
releaseCompile 'com.antfortune.freeline:runtime-no-op:0.8.1'
testCompile 'com.antfortune.freeline:runtime-no-op:0.8.1'
}
- (这一步可以和上面的"c"同时省略 --- 参考这里) 在代码中初始化freeline
在你自定义的Application的onCreate方法里面加上下面这句:
FreelineCore.init(this);
三. 运行
由于freeline依赖于python, 所以你首先要安装python2.7+的运行环境
-
始化你freeline (仅第一次), 在项目根目录下执行下列命令:
./gradlew initFreeline
这一步会下载freeline的相关依赖, 会在项目根目录下生成freeline.py文件和freeline目录
-
现在可以开始运行你的程序了, 执行命令
python freeline.py
, 首次运行 可以加上-f
选项 (python freeline.py -f
) ,
-f
选项会强制执行clean任务, 然后再执行build任务
当然你也可以查看freeline的帮助, 执行命令:python freeline.py -h
首次运行会比较慢, 因为需要读取项目信息, 生成文件, 计算依赖 ......
当然如果你觉得每次都输入命名来构建项目不方便, 你也可以安装freeline的插件, Preferences -> Plugin -> Browse repositories ... -> 输入freeline -> 安装插件, 操作如下图:
安装之后会在AS的工具栏多了个freeline的按钮, 如下, 以后运行点击这个按钮就可以了
第一次运行项目, 45秒, 输出如下:
页面如下:
然后我更改一下页面, 再用freeline运行只花了1.4秒!!!!! 输出如下:
更改后的页面, 如下:
四. release与debug区分 (不将freeline代码打包进release包中)
- 如果省略了上面"c"和"3"步骤, 那么代码对freeline就没有依赖了, 因此打debug可以使用freeline, 而release则用常规方法打包 (用常规的gradlew打包就行
./gradlew :app:assembleRelease
). 目前官方的使用教程里是没有"c"和"3"步骤的, 只有你在build.gradle里面设置了applicationProxy false
, 才需要"c"和"3"步骤, 参考: FreelineCore.init()的作用是什么,为什么调不调都可以? - 如果用了"c"和"3"步骤那么, 那么可以将release依赖改成下面这样:
releaseProvided 'com.antfortune.freeline:runtime-no-op:0.8.1'
这样打包的时候, freeline的库代码不会被打包进apk中.
.
代码初始化的地方改成这样:
if(BuildConfig.DEBUG) FreelineCore.init(this);
这这样打releae包时, BuildConfig.DEBUG是false, 编译器会优化掉这段代码, 因此去掉了代码中对freeline的依赖.
这样打出来的apk包也不会包含freeline相关的代码 !!
五. 总结