Freeline 让AndroidStudio快的飞起来

你的AndroidStudio编译时是否很卡?你的Gradle编译时是否很慢,运行一次要等10分钟?如果你还没有遇到,那可能说明你的电脑配置够好,或者项目还不够大。

版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com

尤其像我这种公司电脑配置渣,还是机械硬盘的开发者肯定是忍不了的,太影响开发效率了,所以我们就想办法加快编译速度了,当然加快编译的手段有很多种,在Android官方Instant Run出来之前,很多开发者是使用第三方的一些库来提高开发效率,底层原理几乎都是apk热更新原理。在Instant Run出来之后,很多开发者都开始用这个被称为闪电编译的功能,但是它还是有很多不足的,具体大家可以看官网的说明:Instant Run。不过我相信Instant Run后来肯定会越来越好,我们就不用依赖什么第三方了,比如Jack和apt就不能一起用,导致使用了apt的开发者使用lambda就得用retrolambda,这些都是需要官方来优化和改进的。废话不多说下面正式开撸 。

Freeline介绍

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

Freeline代码开源在Github:

https://github.com/alibaba/freeline

Freeline在云栖社区的原理说明:

https://yq.aliyun.com/articles/59122?spm=5176.8091938.0.0.1Bw3mU

介绍这款工具也是我本人使用了好几周以后觉得真心不错,所以来分享给大家,有什么使用上的问题欢迎来交流啊,自从使用了Freeline后真的省下了很多喝咖啡的时间,本人表示非常欢喜。

以下是从官网整理来的一些说明:

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

Freeline的特性:

  • 支持调试
  • 系统最低支持到api level 9
  • 支持标准的多模块Gradle工程的增量构建
  • 并发执行增量编译任务
  • 进程级别异常隔离机制
  • 支持so动态更新
  • 支持resource.arsc缓存
  • 支持retrolambda
  • 支持DataBinding
  • 支持各类主流注解库
  • 支持Windows,Linux,Mac平台

当然每个事物都有自己的不足,现在已经Freeline的一些不足:

  • 第一次增量资源编译的时候可能会有点慢
  • 不支持删除带id的资源,否则可能导致aapt编译出错
  • 暂不支持抽象类的增量编译
  • 不支持开启 Jack 编译
  • 不支持 Kotlin/Groovy/Scala

看了上面的这些介绍后不知道你有没有心动?什么,已经心动了?那么下面我们来看看它到底怎么用?

Freeline使用教程

1、在项目level的build.gradle中添加插件依赖

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        ...
        classpath ‘com.antfortune.freeline:gradle:0.8.3‘
    }
}

2、在项目主module的build.gradle中应用freeline插件的依赖

apply plugin: ‘com.antfortune.freeline‘

android {
    ...
}

3、一些注意点

修改了上面的gradle文件后,在你的编辑区域顶部会有一个黄色的警告条,警告条的右边有一个Sync Now的超链接,嗯没错你必须点一下,来同步编译项目。

上面说过freeline最低支持到android level api 9,如果你在这里遇到提示minSdkVersion是14,你就得检查一下是否开启了Jack。

4、安装python、并配置系统环境变量

因为Freeline是用python写的,下面的的所有操作,包括编译等都要依赖python,所以我们要安装python,并且配置系统环境变量,因为每个同学的系统不一样,所以这里我给出python的下载页面,其它的自己去Google。

Python分2.x版本和3.x版本,但是Freeline目前只支持2.x版本的,以前学过一点点python,这里为大家推荐2.7.12版:

https://www.python.org/downloads/release/python-2712/

5、一句命令为你的项目下载安装Freeline

现在你必须已经安装好了python,然后在AndroidStudio中打开命令行,输入一下命令,将自动为我们下载freeline相关文件到项目下:

gradle initFreeline

如果你系统没有配置gradle的环境,将会提示你命令不存在,由于AndroidStudio已经为项目配置了默认的gredle,所以输入以下命名也是一样的:

gradlew initFreeline

先别急着输入:因为默认是从国外镜像地址下载,由于众所周知的原因,你很可能下载不到,所以我们可以使用国内镜像,所以如果上述命令没有通过,那么咱们在命令后面加一个-Pmirror

gradlew initFreeline -Pmirror

大概一分钟左右就下载好了,下载好之后你的项目结构大概是这样子:

6、运行项目

好了,一切准备就绪,下面就可以把你的手机连接运行项目了,当然这里就不是像以前一样点击那个绿色的Run按钮了,而是使用命令。

第一次运行是需要全量编译,所以第一次的时间相对较长,甚至比gradle编译还要长,但是后期的运行会很快。

第一次全量编译,在命令行输入:

python freeline.py -f

如果我们后期修改了代码,秒秒钟就可以热更新到手机:

python freeline.py

如果你要调试应用,在命令行输入:

python freeline.py -d 

常用命令帮助

python freeline.py -f —— cleanBuild 强制执行一次 clean build

python freeline.py -d —— 调试 打开debug模式

python freeline.py -h —— 帮助 显示帮助信息并退出

python freeline.py -v —— 版本 显示版本信息

python freeline.py -w —— 等待 让应用程序等待 debugger

python freeline.py -a —— 全部 在所有工程上强制执行clean build 并执行-f全量编译

python freeline.py -c —— 清空 清空缓存目录和工作空间

python freeline.py -i —— 初始化 对工程进行进行freeline初始化配置

Android Studio Freeline插件

一般我们开发的时候,想要运行项目时就点一下绿色的Run按钮,几乎不用命令运行项目,所以FreeLine也有这样简单的操作方式,我们需要为AndroidStudio安装一个插件:

Setting → Plugins → 输入freeline → 点击Browse repositories → 点击Install → 重启AndroidStudio

下面来一个图解:

安装好之后根据提示重启AndroidStudio,然后会在绿色的Run按钮后面会多出来一个蓝色白心的Freeline Run按钮,如果要运行项目就点击下图中Freeline Run按钮即可,如下图:

好啦到这里就全部结束啦,快去试试吧。


版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com

时间: 2025-01-13 23:47:31

Freeline 让AndroidStudio快的飞起来的相关文章

怎么让你的网站快如飞?

一.服务器.VPS.空间的介绍 什么是服务器:如果你需要买一台服务器放到机房去托管,而这个机房是你租赁的,那么你租赁他的空间.他的带宽.他的公网ip,那么这是一台真真实实的服务器,那么这个我们就称为服务器. 什么是VPS:当我们有些时候去购买VPS,比如说像现在比较出名的腾讯云.阿里云,他们提供的就是VPS,那么这个VPS是怎么来的呢?商家都很聪明,我如果一台服务器就租给你一个人用,万一内存是16G,你平时只用了2G,还有14G是空的嘛!我肯定不做这种亏本的生意,那么他就会把服务器用某种技术比如

optimizer for eclipse--Eclipse优化,让你的Eclipse快来飞!

官方网站:http://zeroturnaround.com/free/optimizer-for-eclipse/ infoq网址:http://www.infoq.com/cn/news/2015/03/eclipse-optimizer 视频教程地址:https://vimeo.com/121659307 在2015年EclipseCon上,Zero Turnaround(消除Java又一次部署的流行工具JRebel的创建者)公布了Eclipse优化器,一个能够通过调整JVM设置提升性能的

无尽虚拟城市来了!Demo可走可飞,“波函数坍缩”开源算法蹿红

神说,要有光. 于是有了光. 神说,要有一座城. 于是有了一座城. 神说,这座城要无限大. 神啊你别再说了,那是另外的价钱. 不过,有种叫做波函数坍缩 (Wave Collapse Function) 的算法,可以让一座白茫茫的城,在虚拟世界里无限延伸. 你跑得再快,飞得再远,都到不了它的尽头. 因为,这座城可以实时扩张,你往哪里走,它就往哪里生成,不会让你跑出去的. 而它背后的波函数坍缩 (WFC) 算法自诞生以来,每隔一段时日,便会引起人类蜂拥而至的关注. 不管是因为这赏心悦目的应用: 还是

python 全栈 数据库(二)MySQL数据库进阶

MySQL 进阶 左右连表: join 上下连表: union #自动去重 (当两张表里的数据,有重复的才会自动去重) union all #不去重 例如: select sid,sname from sname union select tid,tname from teacher select sid,sname from student UNION ALL select sid,sname from student 1.视图 (不常用,开发过程中不长用,在开发语句中写,不要在数据库中写)

索引相关知识点

一.索引索引是表的目录,在查找内容之前可以先在目录中查找索引位置,以此快速定位查询数据.对于索引,会保存在额外的文件中 二.索引种类•普通索引: 仅加速查询•唯一索引:加速查询 + 列值唯一(可以有null)•主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null)•组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并•全文索引:对文本的内容进行分词,进行搜索 •索引合并:使用多个单列索引组合搜索•覆盖索引:select的数据列只用从索引中就能够取得,不必读取数据行,

分布式系统里session同步的那些事儿

几周前,有个盆友问老王,说现在有多台服务器,怎么样来解决这些服务器间的session同步问题?老王一下就来精神了,因为在n年以前,老王还在学校和几个同学一起所谓创业的时候,也遇到了类似的问题.当时查了很多资料,没有解决,于是后来投身百度,终于学到了“葵花宝典”,方才大彻大悟.所以,今天想跟大家分享一下关于session同步的那些事儿. 秉着问题驱动的原则,老王先提几个问题: 1.什么是session?什么又是cookie?他俩有啥联系和区别? 2.为什么要在多台服务器间进行session的共享同

四轴飞行diy全套入门教程(从最基础的开始)

转载:http://www.cnmox.com/thread-12460-1-1.html首先声明本人也是菜鸟,此教程就是从一个菜鸟的角度来讲解,现在论坛上的帖子都突然冒很多名词出来,又不成体系,我自己开始学的时候往往一头雾水,相信很多新手也一样.所以在这个帖子里面,我都会把自己遇到的疑惑逐一讲解. [概述]1.diy四轴需要准备什么零件无刷电机(4个)电子调速器(简称电调,4个,常见有好盈.中特威.新西达等品牌)螺旋桨(4个,需要2个正浆,2个反浆)飞行控制板(常见有KK.FF.玉兔等品牌)电

基于Oracle的私有云架构探析(连载一)

沃趣科技高级数据库专家 魏兴华 概述 云是当今最为热门的一个话题或者说技术,在数据库界也一样,Oracle 12G这个名字不硬生生被掰弯成了Oracle 12C,数据库云在我看来能给企业带来的第一价值是节省资源,提高服务器资源的利用率,随着更快速CPU.更廉价大内存的出现,企业传统孤岛式的数据库使用方式,一个主机一个实例,会导致大量的资源浪费,想当年在阿里B2B,有多少服务器的CPU利用率平均只有15%,现在都在倡导绿色数据中心,只有数据库整合了,消耗的电少了,空调吹的少了,数据中心才能绿,地球

day36--MySQL扩展

一.视图 视图是一个虚拟表(非真实存在),其本质是[根据SQL语句获取动态的数据集,并为其命名],用户使用时只需使用[名称]即可获取结果集,并可以将其当作表来使用. SELECT * FROM ( SELECT nid, NAME FROM tb1 WHERE nid > 2 ) AS A WHERE A. NAME > 'alex'; 临时表搜索 --格式:CREATE VIEW 视图名称 AS SQL语句 CREATE VIEW v1 AS SELET nid, name FROM A W