美文网首页Android知识Android技术知识Android开发
Freeline,一个让你High的秒编译神器

Freeline,一个让你High的秒编译神器

作者: 皮球二二 | 来源:发表于2016-12-12 17:32 被阅读1680次

Freeline是由蚂蚁聚宝Android团队开发的一款针对Android平台的增量编译工具。它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。
Freeline能够为Android开发者节省很多喝杯咖啡的时间 : )
之前在其他渠道已经对freeline以及JRebel还有Instant Run有过了解。Instant Run不多说,亲儿子,但是效果不是很好,甚至让你的app莫名其妙整出其他bug出来。JRebel也不错,可以试试,就是需要付费这点比较头疼。介绍freeline的文章很多,但是我觉得使用过程写的都过于简单。虽然最后看看这玩意的集成并不复杂,但是初次集成还是有很多弯路要走

功能

  • 支持标准的多模块Gradle工程的增量构建
  • 并发执行增量编译任务
  • 进程级别异常隔离机制
  • 支持so动态更新
  • 支持resource.arsc缓存
  • 支持retrolambda
  • 支持DataBinding
  • 支持各类主流注解库
  • 支持Windows,Linux,Mac平台

以下列表为Freeline支持的热更新情况:

| | Java | drawable, layout, etc. | res/values | native so |
|:-------------:|:-------------:|:-------------:|:-------------:|
|add| √| √| √| √|
|change| √| √| √| √|
|remove| √| √| x| -|
Freeline已经分别在API 17,19,22,23的Android模拟器、Android 6.0 Nexus 6P以及Android 4.4锤子手机上经过测试。如果想要充分体验Freeline增量编译的速度的话,最好使用Android 5.0+的设备。

截止到目前0.8.3版本,还有几处限制要注意:

  • 不支持删除带id的资源,否则可能导致aapt编译出错。其实这里我发现只要对资源文件进行操作,都有可能发生资源文件的错乱,这个还是很尴尬的,只能手动全量更新了
  • 暂不支持抽象类的增量编译。可怜的base
  • 不支持开启 Jack 编译
  • 不支持 Kotlin/Groovy/Scala

使用

  1. 文件夹的添加
    首先把freeline工程下载好,注意里面的runtime文件夹。runtime的主要作用是在Application启动时重载ClassLoader,插入dex,从而实现增量修改的目的。来看看sample里面的settings.gradle对它的处理
includeFlat 'runtime'
include ':runtime:runtime'
include ':runtime:runtime-no-op'

去主工程的上一级目录去寻找runtime文件夹,然后引用其中的runtime与runtime-no-op库。这个环节官方并没有进行说明,我在使用Sample时一开始没有添加这个模块,然后就出问题了。

  1. gradle脚本的添加
    (1) settings.gradle添加,刚也说过了
    (2)工程目录下的build.gradle
classpath 'com.antfortune.freeline:gradle:0.8.3'

(3)项目主模块app下的build.gradle

apply plugin: 'com.antfortune.freeline'
freeline {
    hack true
    autoDependency false
}
debugCompile project(":runtime:runtime")
  1. 下载python 和二进制依赖
    在命令行中执行
gradle initFreeline -Pmirror

初始化成功,将配置信息写入json中


gradle initFreeline -Pmirror
文件下载成功之后项目目录结构

真正的打包等操作,均由python脚本来控制,所以这里一定要搭建python环境,且版本号低于3

  1. 保险起见,我们这时候clean Project然后Sync Project

  2. 第一次我们执行全量编译

python freeline.py -f

虽然上面写的是请等待1分钟,但是视项目的大小耐心等待下直到成功吧


python freeline.py -f

一般情况下成功之后,app就被启动了

  1. 增量编译
    我在使用增量编译的时候,当时是0.8.2,出现applicationId与packageName不一致出错的问题,现在0.8.3修复了,所以可以愉快的耍了
python freeline.py
一共花费2.9s搞定

其他

  1. 遇到问题请去freeline提issue,开发者还是很用心的,回复评论的速度都很快,这个必须赞
  2. freeline版本发生升级,务必需要执行gradle initFreeline -Pmirror下载新版本资源,runtime文件夹也要随更新一起更新
  3. 建议使用freeline的插件直接编译,免去手动敲命令的劳累,路径为Preferences → Plugins → Browse repositories
  4. gradle的任何改变都会触发全量更新
  5. freeline目前只支持debug buildType,并且不支持混淆
  6. freeline的编译与as的编译应该是不兼容的,至少我这里会报错,所以两者如果发生切换必须先Clean Project
  7. 不支持多设备,所以你一旦换上新设备,可能会提示找不到设备。这时候,你就Clean Project或者Sync Project或者插拔手机,肯定会成功的,这点其实相当让人苦恼

参考文章

AndroidStudio Freeline实现工程秒级编译

相关文章

网友评论

    本文标题:Freeline,一个让你High的秒编译神器

    本文链接:https://www.haomeiwen.com/subject/kmimmttx.html