Android开发工具编译痛点
现在Android开发工具应该大部分都是Android Studio吧,对于一个大型App来说,动辄就是十几个工程相互依赖,稍微改几行代码,跑一下都得好几分钟,当然这跟电脑的配置也有关系。虽然目前google推出InstantRun,在AS 2.0上使用的一个插件,用于提高编译速度,但是就我使用后的感觉来说,并不是很理想,可能是我们这边工程较为复杂,编译完完整的工程也得需要一两分钟。在这里羡慕下Xcode秒级编译速度,肯定的是,很多Android开发友们也有这样的感觉。
为了解决这个痛点,最近公司有一个同事调研了Freeline这个工具,结果是非常惊喜的,增量编译是秒级别的,在这里,我不骗大家!!很荣幸可以认识使用它。
Freeline介绍
Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队在Android平台上的量身定做的一个基于动态替换的编译方案,稳定性方面:完善的基线对齐,进程级别异常隔离机制。性能方面:内部采用了类似Facebook的开源工具buck的多工程多任务并发思想, 并对代码及资源编译流程做了深入的性能优化。
简单来说,就是阿里提供的一个增量编译方案,主要是为了加快日常开发过程中的项目编译速度,但是目前只支持debug模式非混淆的开发。
Pros
支持大多数场景的增量编译
支持retrolambda与注解
支持so动态替换
支持Windows/Linux/macOS
App crash后,仍然可以通过增量编译来修复
大多数情况下增量编译可以在10s内完成
Cons
初次接入可能存在一定的问题,需要稍微花点时间来解决
在简单的工程上,与其他构建方案相比,没有明显的优势
不支持删除带id的资源,会报错
不支持Kotlin
这边直接进入Freeline的使用方法讲解,使用其实也很简单,请跟着司机走~
Freeline使用
1.Freeline接入
- 在根目录的build.gradle中添加classpath 'com.antfortune.freeline:gradle:${latest-version}',目前最新版本为0.8.2
- 在主工程(application工程)的build.gradle中添加 apply plugin: 'com.antfortune.freeline'
- ./gradlew initFreeline -Pmirror:初始化Freeline相关依赖, 也可以使用参数-PfreelineVersion={your-specific-version}来下载特定版本的 freeline 依赖,在所在项目的终端运行以上命令行即可。
Ps:
- 项目路径不能包含中文、空格;
- 命令行符号有误,应该是./gradlew initFreeline -Pmirror “-”是减号,并且建议还是要加上镜像-Pmirror否则下载很慢
上面配置可见下图:
2.日常开发-增量编译与全量编译
- 增量编译:python freeline.py
- 全量编译:python freeline.py -f
Ps:
- 第一次必须全量编译,记录设置工程文件的修改信息,后面才可以增量编译,第一次全量编译都比较慢,所以大家要耐着心等待编译完成.
- 如果删除带id的资源则必须手动强制全量更新,增量更新会报错
- Freeline目前只支持debug buildType,并且不支持混淆
- gradle的改变都会触发全量更新
- 从Freeline的编译切换到as的编译,必须先clean build一次
- 增量更新有可能启动不了关闭的app,但修改已经更新到app里,手动启动app即可看到
全量编译:
当全量编译完成,我改动二十几行代码,进行增量编译:
结果表示,这个工具很强大,让我们开发效率直线上升,不用再苦苦等着缓慢编译的完成,使用方法简单。为了不加班,大家赶紧用起来吧!
源码可见:https://github.com/alibaba/freeline
如果你的工程结构较为复杂,在第一次使用freeline编译的时候报错了的话,你可以添加一些freeline提供的配置项,来适配你的工程。具体可以看Freeline DSL References。
么么哒!