Freeline - Android平台上的秒级编译方案

登山则情满于山,观海则意溢于海。这篇文章主要讲述Freeline - Android平台上的秒级编译方案相关的知识,希望能为你提供帮助。
FreeLine是什么?
Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在android平台上的量身定做的一个基于动态替换的编译方案, 5月阿里集团内部开源, 稳定性方面: 完善的基线对齐, 进程级别异常隔离机制。性能方面: 内部采用了类似Facebook的开源工具buck的多工程多任务并发思想: 端口扫描, 代码扫描, 并发编译, 并发dx, 并发merge dex等策略, 在多核机器上有明显加速效果, 另外在class及dex,resources层面作了相应缓存策略, 做到真正增量开发, 另外引入并优化buck的部分加速组件dx, DexMerger, 资源编译方面, 深入改造了Aapt资源编译流程, 当资源发生改变时候, 秒级完成增量包编译, 其中增量包仅含最小的变更集合( 10Kb~ 数百Kb内) , 后期也被运用到线上进行资源/代码动态替换。相比目前instant-run, buck, layoutcast等方案快数倍速度。

项目地址: https://github.com/alibaba/freeline
使用教程
1.安装python环境
从python官网下载Python 2.7.13版本(注意, 一定要下载这个版本, 具体原因下面会提到), 安装成功并配置好环境变量。

Freeline - Android平台上的秒级编译方案

文章图片


2.配置
project build.gradle
Freeline - Android平台上的秒级编译方案

文章图片


module build.gradle
【Freeline - Android平台上的秒级编译方案】
Freeline - Android平台上的秒级编译方案

文章图片


最后, 执行以下命令来下载Freeline的Python的二进制依赖

  • Windows[CMD]: gradlew initFreeline
  • Linux/Mac: ./gradlew initFreeline
对于国内的用户来说, 如果你的下载的时候速度很慢, 你也可以加上参数, 执行gradlew initFreeline -Pmirror, 这样就会从国内镜像地址来下载。
Freeline - Android平台上的秒级编译方案

文章图片


插件
File → Settings... → Plugins → Browse repositories... → Freeline
Freeline - Android平台上的秒级编译方案

文章图片


该插件暂时不支持Python3.0以后的版本, 否则会出现下面的错误:
Freeline - Android平台上的秒级编译方案

文章图片


3.代码植入
在Application中添加下面的代码:

public void onCreate() { FreelineCore.init(this); super.onCreate(); … }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

之后, 点击工具栏上的那个蓝色按钮, 就可以运行项目了。
首次编译时间较长, 因要生成python相关文件, 后期编译时间只需要几秒钟…
写在最后:
1.遇到问题请去freeline提issue, 开发者还是很用心的, 回复评论的速度都很快, 这个必须赞

2.freeline版本发生升级, 务必需要执行gradle initFreeline -Pmirror下载新版本资源, runtime文件夹也要随更新一起更新
3.建议使用freeline的插件直接编译, 免去手动敲命令的劳累, 路径为Preferences → Plugins → Browse repositories
4.gradle的任何改变都会触发全量更新
5.freeline目前只支持debug buildType, 并且不支持混淆
这个必须要说说, 看看我们项目的配置, 注意Build Variant必须选debug, 选择其他的, 无法集成Freeline, 这也导致我们的项目中无法使用Freeline。
Freeline - Android平台上的秒级编译方案

文章图片


6.freeline的编译与as的编译应该是不兼容的, 至少我这里会报错, 所以两者如果发生切换必须先Clean Project
7.不支持多设备, 所以你一旦换上新设备, 可能会提示找不到设备。这时候, 你就Clean Project或者Sync Project或者插拔手机, 肯定会成功的, 这点其实相当让人苦恼
参考资料:
Freeline - Android平台上的秒级编译方案 —— https://yq.aliyun.com/articles/59122






    推荐阅读