http://mp.weixin.qq.com/s?__biz=MzA4NTQwNDcyMA==&mid=2650662410&idx=1&sn=c654fa7b0cc8c91ae10e5d85c6a99f2d&chksm=87d13b55b0a6b243459bb28be86c64b76c5f2db518f7025fab4a50ca71444e8adb858bc65a8b&scene=0#rd

Android 秒级编译 Freeline

原创 2016-12-05 stormzhang AndroidDeveloper

阅读本文大概需要 6.66 分钟。

我们知道 Android 的编译很慢,尤其是项目大点的时候,那编译速度简直难以忍受,极大的降低了我们的开发效率,之前的文章「」给大家介绍过,但是是付费的,用起来不是那么自由,而今天给大家介绍另外一个强大的工具 -- Freeline,绝对秒级编译。

GitHub:https://github.com/alibaba/freeline

什么是 Freeline?

Freeline 是蚂蚁金服旗下平台蚂蚁聚宝 Android 团队开发的一款针对 Android 平台的增量编译工具,它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设备上,有效地减少了日常开发中的大量重新编译与安装的耗时,现已开源。

稳定性方面:完善的基线对齐,进程级别异常隔离机制。

性能方面:内部采用了类似 Facebook 的开源工具 buck 的多工程多任务并发思想:端口扫描,代码扫描,并发编译,并发 dx,并发 merge dex 等策略,在多核机器上有明显加速效果,另外在 class 及 dex,resources 层面作了相应缓存策略,做到真正增量开发,另外引入并优化 buck 的部分加速组件 dx,DexMerger,资源编译方面,深入改造了 Aapt 资源编译流程,当资源发生改变时候,秒级完成增量包编译,其中增量包仅含最小的变更集合(10Kb~数百Kb内),后期也被运用到线上进行资源/代码动态替换。相比目前 instant-run,buck,layoutcast 等方案快数倍速度。

有何优势?

1. 真增量,构建过程快且增量包体积小,极大提升更改代码部署到手机速度,较 Android studio 2.0 及 LayoutCast 快 3~5 倍

2. 跨平台 Linux,mac,windows

3. 全版本覆盖 2.x ~ 6.x版本均支持

4. 部署流程简化,更改代码后,构建过程中,与手机建立了 tcp 长连接,一行命令即可完成增量部署,毋需到各自子 bundle 所在的目录构建完成后再进入 portal/launcher 进行打包再安装到手机的过程

5. 事务支持,在开发过程引入的异常不会破坏工作空间

6. 无缝支持 mPass,解决了类似 maven 各个节点需 merge 合并等与常规开发流程不一致的问题

7. 进程级别异常隔离,开发体验持续稳定

支持的功能

  • 支持标准的多模块 Gradle 工程的增量构建

  • 并发执行增量编译任务

  • 进程级别异常隔离机制

  • 支持 so 动态更新

  • 支持 resource.arsc 缓存

  • 支持 retrolambda

  • 支持 DataBinding

  • 支持各类主流注解库

  • 支持 Windows,Linux,Mac 平台

如何使用?

首先你的电脑上应该安装 Python,如果没有安装,请自行搜索安装,相信你可以搞得定。

其次配置 project-level 的 build.gradle,加入 freeline-gradle 的依赖:

buildscript {

repositories {

jcenter()

}

dependencies {

classpath 'com.antfortune.freeline:gradle:0.8.2'

}

}

然后,在你的主 module 的 build.gradle 中,一般也就是你 app 目录下的 build.gradle 文件,应用 freeline 插件的依赖,记得点击 Sync 按钮进行同步下载。

apply plugin: 'com.antfortune.freeline'

android {

...

}

最后,在命令行执行以下命令来下载 freeline 的 python 和二进制依赖,注意切换到项目目录执行:

  • Windows[CMD]: gradlew initFreeline

  • Linux/Mac: ./gradlew initFreeline

对于国内的用户来说,如果你的下载的时候速度很慢,你也可以加上参数,执行gradlew initFreeline -Pmirror,这样就会从国内镜像地址来下载。

下载完成之后,在命令行输入 python freeline.py 即可进行编译运行。

当然如果每次都输入也挺麻烦的,最简单的用法是直接安装 Android Studio 插件。

在 Android Studio 中,通过以下路径 Preferences → Plugins → Browse repositories,搜索“freeline”,并安装,之后你会看到工具栏有如下按钮:

直接点击 Run Freeline 的按钮,本质上也就是帮你在命令行输入上述命令而已。

使用体验

自己在项目上亲自体验了,综合使用下来确实很爽,真正实现了秒级编译,不管你是更改了代码文件还是资源文件,直接编译运行真正是秒级的,而在之前可能得等上个一两分钟。但是使用下来有以下注意事项:

  • 第一次增量资源编译的时候有点慢,不过也就在第一次的时候慢,后面速度蹭蹭的;

  • 如果设备上之前有安装不是用 Freeline 编译打包的 apk,请先卸载,之后再用 Freeline 编译打包;

  • 第一次 Freeline 编译安装之后不会自动启动 App,这点请大家注意下,因为第一次我一直在等待,等了好久以为没成功,后来才发现其实安装成功了的,只是没有打开而已;

  • 不支持多设备同时连接,也就是说不管是模拟器还是真机,只允许同时一台设备连接,否则会失败;

  • 不支持删除带 id 的资源,否则可能导致 aapt 编译出错;

  • 如果你的项目有使用 Kotlin 语言,那么 Freeline 不支持;

  • 如果你的项目又想用 Freeline,又想使用 Gradle,记得执行 Gradle 脚本之前先执行 ./gradlew clean,否则会编译失败;

总体而已 Freeline 会有一些限制,以及兼容性可能也会有点问题,但是试用下来没遇到多大的问题,而且对于调试的效率提升简直太大了,值得推荐给大家!


PS: 想要更多的了解其原理,请参考以下官方详细介绍。

https://github.com/alibaba/freeline/blob/master/README-zh.md

https://yq.aliyun.com/articles/59122

Android 秒级编译 Freeline的更多相关文章

  1. Android秒级编译工具Freeline

    Freeline 是 Android 平台上的秒级编译方案,Instant Run 的替代品,由蚂蚁聚宝Android 团队开发,它可以充分利用缓存文件,在几秒钟内迅速地对代码的改动进行编译并部署到设 ...

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

    Freeline 技术揭秘 Freeline是什么? Freeline是蚂蚁金服旗下一站式理财平台蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部 ...

  3. Android studio 加速编译方法

    JRebel for Android 是一个Android Studio的插件,可以大大加速Android Studio的编译速度,对于小项目来说或许不明显:但是当项目达到一定的规模时,它对于Andr ...

  4. Android工程运用阿里freeline10秒快速编译分享

    git地址:https://github.com/alibaba/freeline 目前已经更新到0.6.0版本. 原来编译一次需要几分钟甚至几十分钟的android工程,运用freeline,1分钟 ...

  5. android 可以精确到秒级的时间选择器

    android自带的时间选择器只能精确到分,但是对于某些应用要求选择的时间精确到秒级,此时只有自定义去实现这样的时间选择器了.下面介绍一个可以精确到秒级的时间选择器. 先上效果图: 下面是工程目录: ...

  6. redis+Keepalived主从热备秒级切换

    一 简介 安装使用centos 5.10 Master 192.168.235.135 Slave 192.168.235.152 Vip 192.168.235.200 编译环境 yum -y in ...

  7. android.mk android源码编译

    http://www.cnblogs.com/chenbin7/archive/2013/01/05/2846863.html Android.mk简单分析 2013-01-05 22:51 by . ...

  8. 【转】高通平台android 环境配置编译及开发经验总结

    原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...

  9. redis(三)redis+Keepalived主从热备秒级切换

    一 简介 安装使用centos 5.10 Master 192.168.235.135 Slave 192.168.235.152 Vip 192.168.235.200 编译环境 yum -y in ...

随机推荐

  1. 数据结构作业之用队列实现的基数排序(Java版)

    题目: 利用队列实现对某一个数据序列的排序(采用基数排序),其中对数据序列的数据(第1和第2条进行说明)和队列的存储方式(第3条进行说明)有如下的要求: 1)当数据序列是整数类型的数据的时候,数据序列 ...

  2. Swift 2.x -> Swift 3.0

    Swift 3.0 相对于 2.x 有很大变化.特别是因为命名习惯的改变,导致许多 Api 都发生了变化.总的趋势是让表示更简洁. 对旧的代码升级,大部分可以根据提示来进行更正.但也有的需要手动修改. ...

  3. Date.prototype.format

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  4. Javascript模板引擎:Hogan

    hogan.js是一个开源前端模板引擎,无逻辑的设计,简单好用,性能也不错. 使用 引入hogan.js,下载链接:http://www.bootcdn.cn/hogan.js/,然后通过hogan. ...

  5. Centos6.5 python2.7连接mysql数据库

    1.环境是centos6.5 32位系统,python版本是2.7.12,mysql版本是5.5.22.准备好所需压缩包,MySQL-python-1.2.4b4.tar.gz  pip-6.0.7. ...

  6. DNS 中的协议字段详细定义

    DNS中的协议字段定义 Table of Contents 1 概述 2 DNS Classes 3 DNS OpCodes 4 DNS RCODEs 5 DNS Label Types 6 DNS资 ...

  7. Leetcode: Design Phone Directory

    Design a Phone Directory which supports the following operations: get: Provide a number which is not ...

  8. Babel下的ES6兼容性与规范

    前端开发 Babel下的ES6兼容性与规范   ES6标准发布后,前端人员也开发渐渐了解到了es6,但是由于兼容性的问题,仍然没有得到广泛的推广,不过业界也用了一些折中性的方案来解决兼容性和开发体系问 ...

  9. PHP自带防SQL攻击函数区别

    为了防止SQL注入攻击,PHP自带一个功能可以对输入的字符串进行处理,可以在较底层对输入进行安全上的初步处理,也即Magic Quotes.(php.ini magic_quotes_gpc).如果m ...

  10. Android 自定义view (一)——attr 理解

    前言: 自定义view是android自定义控件的核心之一,那么在学习自定义view之前,我们先来了解下自定义view的自定义属性的attr的用法吧 Android attr 是什么 (1)attr ...