相信看过《棋魂》的朋友肯定都记得这段剧情,初中生棋手进藤光在暑假期间让附身在自己身上的千年棋手佐为在网上和别人下围棋,网名叫Sai。由于佐为的棋力过于高超,赢遍了网络上所有的高手,最终取得了100胜0负的战绩。网上所有人都对Sai这位突然出现的棋手极为好奇,很多国际高手都专程跑到日本来想知道Sai的真实身份。
结果这个动漫中的桥段就在最近发生在现实世界中了。网上突然出现了一位名叫Master的棋手,他棋风怪异,招式狠辣,而且查不到任何背景信息。赢遍了柯洁、古力等中日韩围棋世界冠军和大满贯棋手,取得了50胜0负的战绩,大家纷纷对Master的真实身份表示猜疑。结果就在Master进行第60盘比赛的时候终于宣布,自己其实就是去年大胜李世石的人工智能程序AlphaGo,同时也表示这是自己的最后一盘比赛。最终,Master的战绩停留在了60胜0负,真是动漫照进了现实。
今天又到周五啦,提前祝大家周末愉快。本篇来自
沿辉君
的投稿,介绍了 Freeline 这一编译方案(深入介绍大家可以查看官方文档)。同时阐述了集成过程中可能出现的问题,以及给出解决方案。希望大家喜欢。
沿辉君
的博客地址:
http://yanhuili.github.io
Freeline
是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部开源。
稳定性方面:完善的基线对齐,进程级别异常隔离机制。
性能方面:内部采用了类似Facebook的开源工具 buck 的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发dx,并发merge dex等策略,在多核机器上有明显加速效果,另外在class及dex,resources层面作了相应缓存策略,做到真正增量开发,另外引入并优化
buck
的部分加速组件dx,DexMerger,资源编译方面,深入改造了aapt 资源编译流程,当资源发生改变时候,秒级完成增量包编译,其中增量包仅含最小的变更集合(10Kb~数百Kb内),后期也被运用到线上进行资源/代码动态替换。相比目前
instant-run
,
buck
,
layoutcast
等方案快数倍速度。
简单的说:Freeline 是一个能让你快速调试Android程序的插件,速度有多快呢?官方的说法是可以让你的APP编译加速十倍,很吸引人吧,听说比 jrebel 还快,不过我没用过 jrebel 这个付费的产品。
Freeline源码
https://github.com/alibaba/freeline
Freeline原理
https://yq.aliyun.com/articles/59122
配置build.gradle文件
配置 project-level 的 build.gradle,加入 freeline-gradle 的依赖:(注意以最新版本为准)
然后,在你的 主module 的 build.gradle 中,应用 freeline插件 的依赖:
apply plugin: 'com.antfortune.freeline'
android {
...
}
执行运行代码
对于国内的用户来说,如果你的下载的时候速度很慢,你也可以加上参数,执行
gradlew initFreeline -Pmirror
,这样就会从国内镜像地址来下载。
安装插件
Freeline 最快捷的使用方法就是直接安装Android Studio插件。
在Android Studio中,通过以下路径
Preferences → Plugins → Browse repositories
,搜索“freeline”,并安装。
实例
git clone git@github.com:alibaba/freeline.git
cd freeline/sample
./gradlew initFreeline //mac
gradlew initFreeline -Pmirror //windows
python freeline.py