美文网首页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