前言
本文介绍了freeline的相关的使用和总结,关于具体的使用,在 github上的freeline相关文档 上已经写的很详细了,这里做了些总结。
简介
Freeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品,也可以从 Freeline 官方主页来获取更多的信息。
Freeline 由蚂蚁聚宝 Android 团队开发,它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时。
Freeline能够为Android开发者节省很多喝杯咖啡的时间 : )
必要环境
Freeline的使用依赖于python2.7,不同与Linux/Mac,Windows系统需要手动搭建python环境,注意是2.7+的版本,而不支持python3.0环境,因为这两大版本python在语法上不兼容!!! 安装python2.7的介绍请点这里
关于使用
添加依赖
第一步
在Android Studio中的project的build.gradle里添加依赖,如下:
dependencies {
……
classpath 'com.antfortune.freeline:gradle:0.8.4'
}
第二步
在主module中添加应用 freeline 插件的依赖:
apply plugin: 'com.antfortune.freeline'
android {
...
}
第三步
如果进行了多渠道打包的配置,就需要对freeline进行如下配置,不然会导致编译失败:
productFlavors {
umeng {}
}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
freeline {
hack true
productFlavor 'umeng' //指定flavor
}
第四步
在命令行执行以下命令来下载 freeline 的 python 和二进制依赖。
- Windows[CMD]: gradlew initFreeline -Pmirro
- Linux/Mac: ./gradlew initFreeline -Pmirro
运行freeline
使用FreeLine有两种方法,一种是通过android studio添加插件构建来实现一键编译功能,另外一种是中间通过python命令行执行:
插件
在 Android Studio 中,通过以下路径:
- MacOS
Android Studio → Preferences... → Plugins → Browse repositories...
- Windows 和 Linux
File → Settings... → Plugins → Browse repositories...
并搜索“freeline”,并安装。
image
python指令
如下例子:
git clone git@github.com:alibaba/freeline.git
cd freeline/sample
./gradlew initFreeline
python freeline.py
gitignore
参考freeline在github上的ignore文件,需要手动在gitignore中添加以下几个字段:
/.freeline_cache
*.pyc
实际效果
以下时miss项目中使用freeline进行增量编译的使用效果,首先打开app,进入到二级页面(话题详情页),通过代码修改话题颜色,使用freeline部署,可以看到直接更新了当前activity。
freeline_test.gif
潜在问题
阿里团队已将freeline开源,在github中可以查看其源码,截至17年1月12,一共存在575个issue,其中549个closed,26个open,大致看了下issue,总结了一些已修复的常见issue以及一些未closed的issue:
新版本的支持:
比如sdk中support:design:25.1.0,会导致aapt报错
机型兼容问题:
issue已修复的bug中,存在个别机型如小米,三星,一加等增量编译出错的情况。
resource相关的:
可能出现资源编译后错乱,打包时出错,增量报错等问题。并且不支持删除带 id 的资源,否则可能导致 aapt 编译出错
多设备同时连接PC:
freeline暂不支持多个设备同时连接PC端。也就是说无法开模拟器的情况下同时连接测试机。
其它:
在使用过程中,存在增量编译无反应的情况。同时不支持debug模式。
总结
freeline确实能在开发工程中很大的提高开发效率,在你修改java代码或相关xml布局时,通过freeline的增量编译,可以很快的部署到目标设备进行运行,并会在部署完成后类似刷新浏览器一样刷新当前页面。但是其缺少对debug模式的支持,因此你无法进行断点测试,必须重新使用gradlew来进行构建(当然log党可以忽略)。在实际使用的过程中,第一次运行freeline时,会进行全编译,比较耗时,以miss为例,基本维持在100s左右,但接下来使用就可以进行秒级编译,并且不会重开设备里的app,而是直接刷新当前的aticity,所以在开发效率上比直接Gradle有了很大的提升,不过在使用Gradle构建进后,会导致再次使用freeline时进行重新全编译,因此两者切换会导致额外的开销,建议在不得不切换的情况下(如使用debug模式),请尽量使用一种编译方式来进行开发,以达到提高效率的目的。
网友评论