[14]——百分百成功的集成Freeline来提升编译速度

转载请标明出处:http://www.jianshu.com/p/e1772bfa9a96

image

引言

作为一名 Androider 你应该也曾被 AS 那缓慢的编译速度所折磨 ,更为可怕的是即使你只是简单的修改了几行代码,修改了几个布局文件,当你再次运行的时候还是需要再次进行:「编译项目」—「安装 APK 到手机」。这两个步骤在我这台机器上,快则 4、5 分钟,慢则需要 10 多分钟,调试过程异常痛苦!

Google 推出过加快编译速度的解决方案 「Instant Run」,但是用过的朋友应该都知道,这个功能很多时候存在这一些神奇的 BUG,或者是无法应用的情况,而且速度提升有限。

还有一个比较不错的且简单易用的插件,名为 「JRebel for Android」,这个插件的功能十分强大,编译速度也很快,但是这个插件是付费插件。

今天我们要介绍的主角是「Freeline」,这是阿里巴巴蚂蚁金服旗下的几位工程师推出的 Android 平台下的秒级编译方案,Github 地址为:https://github.com/alibaba/freeline。功能十分强大,在第一次全量编译之后,每次启动从编译到部署到手机全程用时都在数秒之内!可以大大提高开发调试的速度与效率!

使用

「Freeline」 推荐的方式为直接安装 Android Studio 插件来使用,但是在实际使用过程中,可能会出现无法下载「Freeline」 的二进制依赖,而导致使用失败,使用 Gradle 命令行指令也会存在同样的问题。因此我推荐大家按照我下面的步骤来进行,可以确保万无一失!

准备工作

对于 Windows 用户来说,你需要提前安装 Python 2.7+(Freeline 暂时还不支持 Python 3+),安装完之后需要重启一下 Android Studio。

对于 Linux/Mac 用户,如果你已经安装了 Python 3+,推荐你将其 alias 设为 python3,再单独安装 Python 2.7+,并作为默认的 Python 指令,避免与 Android Studio 插件自动运行的 python 命令冲突,导致无法正常使用插件。

步骤一:安装 Android Studio 插件

使用插件可以自动的帮我们在项目 build.gradle 文件中添加各种依赖,从而省去了我们自己修改 build.gradle 文件的步骤。


安装 Freeline 插件

点击运行 Freeline,在第一次运行插件时,会有如下提示:


提示是否自动初始化

大致意思是:检测到我们的项目没有初始化 Freeline,是否自动安装 Freeline?

我们点击 Install Freeline Automatically ,然后选择同步 build.gradle 文件。

再次点击运行 Freeline,来编译项目并部署到手机,这时如果出现了如下图的错误,不要惊慌,请按照接下来的步骤进行

提示执行 Gradle task

步骤二:运行 Gradle task : initFreeline

根据提示内容「执行 initFreeline 任务并下在依赖」,我们点开右侧边栏的 Gradle 选项卡,选择执行:「Application」—「Application」—「Tasks」—「other」—「initFreeline」

具体位置

这时如果你能成功执行完毕,那么恭喜你,You are a lucky dog!

相信绝多数的小伙伴都是卡在无比漫长的下载过程中了,如下图所示:

无比漫长的下载过程

参考 Freeline 的手册可以看到,官方有考虑到这个问题,并且提供了我们其他的解决方法,比如使用 Gradle 指令:gradlew initFreeline -Pmirror 来将下载指向国内的镜像网站。

注意如果在 Linux/Mac 环境下需要使用指令 ./gradlew initFreeline -Pmirror ,否则你可能会出现如下提示 gradlew: 未找到命令

这时如果你能成功执行完毕,那么恭喜你,You are a lucky dog!

如果你的执行结果如下图:


手动初始化失败

那么恭喜你,请继续收看步骤三。

步骤三:手动下载 Freeline 依赖并初始化

使用任何加载工具下载如下链接:http://static.freelinebuild.com/freeline/0.8.6/all/freeline.zip

请注意版本,本文使用的是 0.8.6 版本,请根据你使用的版本来调整下载链接。

下载完毕后,讲该文件保存在一个好记的位置,因为稍后要输入该文件的位置。

在 Terminal 中使用指令 ./gradlew initfreeline -PfreelineLocal="/home/junerver/Freeline/freeline.zip" 来使用本地依赖来进行初始化(博主使用的是 Debian 8.7.1,如果使用的是 Windows 系统请去掉 ./)。

使用本地依赖进行初始化成功

恭喜你,执行到这一步,我们就已经成功的在项目中集成了 Freeline。

步骤四:运行插件使用 Freeline

这个步骤就是最终一步了,我们再次点击 Freeline 插件的图标来运行 Freeline,注意第一次运行的时候会进行一次全量编译,再之后的运行都是增量编译,如下图所示:

第一次全量编译

由于是一个空的项目,所以第一次运行一共用了 28.8 秒,我们来随便的修改一下布局文件,然后再次运行 Freeline 看一下时间:

增量编译耗时极短

从编译到部署到手机一共只用了 0.7 秒,可以看到这个提速效果真的是非常的明显。

一些补充

局限

看了上面的文章,你会感叹 Freeline 的强大,但它也还是有一些不足之处的,比如:仅支持 Java 语言,对其他的基于 JVM 语言(如 Kotlin)不支持;不支持删除带id的资源,否则可能导致aapt编译出错;不支持开启 Jack 编译等等,但是总体看来还是瑕不掩瑜的。

一些有用的命令行指令

大多数情况下我们使用插件就可以解决问题,但有时也会出现一些奇怪的 BUG,这时候你可能会需要用到一下的一个 Gradle 指令:

Gradle Task: checkBeforeCleanBuild
主要用于生成工程描述文件,每次 freeline 全量编译前会先执行一下这个任务。当你执行 python 命令提示报错的时候:freeline_core.exceptions.NoConfigFoundException: xxxxxx/project_description.json not found, please execute gradlew checkBeforeCleanBuild first.,也需要先执行一下./gradlew checkBeforeCleanBuild

freeline.py

使用 freeline 进行编译的主要入口,freeline 主要通过 python 来实现跨平台。

参数:

-h
    使用方式:python freeline.py -h
    参数说明:输出 freeline 的参数使用说明
-v
    使用方式:python freeline.py -v
    参数说明:获取 freeline.py 的版本号
-f
    使用方式:python freeline.py -f
    参数说明:强制进行全量编译
-d
    使用方式:python freeline.py -d(注:可与各类参数叠加使用)
    参数说明:输出 freeline 的调试日志(注意:不是对 Android 工程进行调试)
-w
    使用方式:python freeline.py -f -w
    参数说明:让应用启动的时候等待调试工具连接(目前只支持全量编译的时候配合使用),日常调试推荐直接使用 Android Studio 的attach debugger to Android process

一个报错 - 2018.4.23

最近在一个新项目上使用了 Freeline ,完成 Freeline 的依赖之后,在运行 python freeline.py 时出现错误。报错内容为:

/usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts (没有那个文件或目录)

进入该文件夹发现存在该文件,但双击该文件提示 无法使用此链接,因为其目标“/etc/ssl/certs/java/cacerts”不存在。

解决方法是:
在终端运行指令 apt-get install ca-certificates-java

参考

感谢你的阅读,如果可以对你有一些微小的帮助,请点击喜欢+收藏,转载请标明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容