美文网首页Android知识Android开发Android技术知识
[14]——百分百成功的集成Freeline来提升编译速度

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

作者: junerver | 来源:发表于2017-03-20 10:30 被阅读811次

    转载请标明出处: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

    参考

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

    相关文章

      网友评论

        本文标题:[14]——百分百成功的集成Freeline来提升编译速度

        本文链接:https://www.haomeiwen.com/subject/eulbnttx.html