我们知道Android的编译速度很慢,尤其是项目比较大的时候,编译速度让人难以忍受,大大降低了我们的开发效率。上一篇《》给大家介绍过,不过是收费的,用起来没那么免费。今天介绍另一个强大的工具——Freeline,秒编译。GitHub:https://github.com/alibaba/freeline什么是Freeline?Freeline是蚂蚁金服旗下平台蚂蚁聚宝Android团队开发的Android平台增量编译工具。秒级快速编译部署代码变更到设备,有效减少日常开发中重新编译安装的耗时,现已开源。稳定性方面:完善的基线对齐,进程级的异常隔离机制。性能方面:内部采用了类似于Facebook的开源工具buck的多项目多任务并发思想:端口扫描、代码扫描、并发编译、并发dx、并发mergedex等策略,在多核机器上有明显的加速效果,并且在class和dex,资源层面做了相应的缓存策略,实现真正的增量开发。另外引入并优化了buck的一些加速组件dx和DexMerger。在资源编译方面,对Aapt资源编译流程进行了深度改进。当资源发生变化时,秒一级完成增量包编译,增量包只包含最小的变化集(10Kb到数百Kb以内),也用于在线进行后期的动态资源/代码替换。与目前的instant-run、buck、layoutcast等方案相比,速度快了好几倍。有什么好处?1、真正的增量,构建过程快,增量包小,大大提高了部署代码变更到手机的速度,比Androidstudio2.0和LayoutCast快3到5倍2.跨平台Linux,苹果电脑,Windows3。整个版本涵盖了2.x到6.x版本。4.简化部署流程。更改代码后,在构建过程中与手机建立了一个tcp长连接。增量部署,一行命令即可完成,无需走各子网。bundle所在目录建好后,进入portal/launcher进行打包,然后安装到手机上。5、事务支持,开发过程中引入的异常不会破坏工作空间6、无缝支持mPass,解决各节点需要类似mavenmerge合并等与常规开发流程不一致的问题7、进程级异常隔离,持续稳定的开发体验支持的功能支持增量构建标准多模块Gradle项目并发执行增量编译任务进程级异常隔离机制支持so动态更新支持resource.arsc缓存支持retrolambda支持DataBinding支持各种主流注解库支持Windows、Linux、Mac平台如何使用?首先,你的电脑要安装Python,如果没有,请自行搜索安装,相信你能搞定。接下来,配置项目级别的build.gradle并添加freeline-gradle依赖:buildscript{repositories{jcenter()}dependencies{classpath'com.antfortune.freeline:gradle:0.8.2'}}然后,在你的主模块中你app的build.gradle,一般是你app目录下的build.gradle文件,freeline插件依赖的应用,记得点击Sync按钮同步下载。applyplugin:'com.antfortune.freeline'android{...}***,在命令行执行如下命令下载freeline的python和二进制依赖,注意切换到项目目录下执行:Windows[CMD]:gradlewinitFreelineLinux/Mac:./gradlewinitFreeline对于国内的用户,如果你的下载速度很慢,也可以加上参数,执行gradlewinitFreeline-Pmirror,这样就会从国内的镜像地址下载。下载完成后,在命令行输入pythonfreeline.py编译运行。当然,每次都打字会很麻烦。最简单的方法是直接安装AndroidStudio插件。在AndroidStudio中,通过以下路径Preferences→Plugins→Browserepositories搜索“freeline”,并安装。之后你会在工具栏上看到如下按钮:直接点击RunFreeline按钮,本质上就是帮你在命令行输入上面的命令就可以了。亲身体验了项目中的使用体验。综合使用真的很爽。真正实现了二级编译。不管改代码文件还是资源文件,直接编译运行真的秒级。在此之前,您可能需要等待。最后一两分钟。不过在使用时有以下注意事项:第一次增量资源编译有点慢,但只是第一次慢,后面就慢了;如果之前在设备上安装过,没有用Freeline编译打包请先卸载apk,再用Freeline编译打包;第一次Freeline编译安装后,App不会自动启动。这点请大家注意,因为我第一次一直在等,等了半天还以为什么都没有。成功了,后来发现安装成功了,但是打不开;不支持同时连接多个设备,也就是说无论是模拟器还是真机,同时只允许一个设备连接,否则会失败;id资源,否则可能导致aapt编译错误;如果你的项目使用Kotlin语言,那么Freeline不支持;如果你的项目要使用Freeline和Gradle,记得在执行Gradle脚本前执行./gradlewclean,否则会编译失败;一般情况下,Freeline会有一些限制,可能会有一些兼容性问题,但是试用下来没有大问题,而且调试效率大大提高,值得推荐给大家!【本文是专栏作者“stormzhang”原创稿件,转载请联系原作者(微信ID:googdev)】
