freeline使用入门

作者: 元亨利贞o | 来源:发表于2016-11-14 18:49 被阅读3043次

一. freeline简介
Freeline的GitHub地址: https://github.com/alibaba/freeline
其官方介绍如下:

Freeline is a fast build and deployment tool for Android. Caching reusable class files and resource indices, it enables incrementally building Android apps, and optionally deploying the update to your device with hot swap.
Developed and used by Ant Fortune (about us) Android Team, Freeline has been significantly saving time in daily work. Inspiring by Buck and Instant Run but faster than ever, Freeline can finish an incremental build in just a few seconds. No more recompile and reinstall again and again before seeing your modifications, Freeline brings life-changing development experience for Android.
.
中文说明

下面是其原理说明
[Freeline原理] (https://yq.aliyun.com/articles/59122?spm=5176.8091938.0.0.1Bw3mU)

从中可以看出freeline加速的三驾马车是: 缓存、并行、Hot Swap (Instant Run原理)

二. 配置

  1. 配置根目录下的build.gradle文件
    在项目根目录下的build.gradle文件中添加freeline插件:
    classpath 'com.antfortune.freeline:gradle:0.8.1',
    如下:
buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.2'
        classpath 'com.antfortune.freeline:gradle:0.8.1'
    }
}
allprojects {
    repositories {
        jcenter()
    }
}
  1. 配置主module下的build.gradle文件
    a. 应用插件 (放在android插件之后)
    apply plugin: 'com.antfortune.freeline'
    b. 添加freeline配置
    android {} 中添加, 如下:

freeline {
hack true
//如果你定义了productFlavor, 记得把下面的注释放开, 把{Your-productFlavor}替换成你相应的productFlavor
//productFlavor '{Your-productFlavor}'
}


  c. (**这一步可以和下面的"3"同时省略 --- [参考这里](https://github.com/alibaba/freeline/issues/280)**) 在dependencies块中添加对freeline的依赖, 如下:

    ```
dependencies {    
      // others 
      // ....

      // dependencies for freeline
      debugCompile 'com.antfortune.freeline:runtime:0.8.1'
      //如果release包不想依赖freeline, 可以改成`releaseProvided com.antfortune.freeline:runtime-no-op:0.8.1'`, 后面会进行说明. 
      releaseCompile 'com.antfortune.freeline:runtime-no-op:0.8.1' 
      testCompile 'com.antfortune.freeline:runtime-no-op:0.8.1'
}
  1. (这一步可以和上面的"c"同时省略 --- 参考这里) 在代码中初始化freeline
    在你自定义的Application的onCreate方法里面加上下面这句:
    FreelineCore.init(this);

三. 运行

  1. 由于freeline依赖于python, 所以你首先要安装python2.7+的运行环境

  2. 始化你freeline (仅第一次), 在项目根目录下执行下列命令:
    ./gradlew initFreeline
    这一步会下载freeline的相关依赖, 会在项目根目录下生成freeline.py文件和freeline目录

    freeline依赖文件和目录
  3. 现在可以开始运行你的程序了, 执行命令
    python freeline.py , 首次运行 可以加上-f选项 (python freeline.py -f) ,
    -f选项会强制执行clean任务, 然后再执行build任务
    当然你也可以查看freeline的帮助, 执行命令: python freeline.py -h
    首次运行会比较慢, 因为需要读取项目信息, 生成文件, 计算依赖 ......

    首次使用freeline构建项目
    当然如果你觉得每次都输入命名来构建项目不方便, 你也可以安装freeline的插件, Preferences -> Plugin -> Browse repositories ... -> 输入freeline -> 安装插件, 操作如下图:
    安装freeline插件
    安装之后会在AS的工具栏多了个freeline的按钮, 如下, 以后运行点击这个按钮就可以了
    更改代码后直接点击此按钮运行项目, 不用再输入命令运行啦 !!
    第一次运行项目, 45秒, 输出如下:
    第一次运行项目的log输出.png
    页面如下:
    初始页面.png
    然后我更改一下页面, 再用freeline运行只花了1.4秒!!!!! 输出如下:
    更改后运行的log输出.png
    更改后的页面, 如下:
    更改后的页面

四. release与debug区分 (不将freeline代码打包进release包中)

  1. 如果省略了上面"c"和"3"步骤, 那么代码对freeline就没有依赖了, 因此打debug可以使用freeline, 而release则用常规方法打包 (用常规的gradlew打包就行./gradlew :app:assembleRelease). 目前官方的使用教程里是没有"c"和"3"步骤的, 只有你在build.gradle里面设置了applicationProxy false, 才需要"c"和"3"步骤, 参考: FreelineCore.init()的作用是什么,为什么调不调都可以?
  2. 如果用了"c"和"3"步骤那么, 那么可以将release依赖改成下面这样:
    releaseProvided 'com.antfortune.freeline:runtime-no-op:0.8.1'
    这样打包的时候, freeline的库代码不会被打包进apk中.
    .
    代码初始化的地方改成这样:
    if(BuildConfig.DEBUG) FreelineCore.init(this);
    这这样打releae包时, BuildConfig.DEBUG是false, 编译器会优化掉这段代码, 因此去掉了代码中对freeline的依赖.
    这样打出来的apk包也不会包含freeline相关的代码 !!

五. 总结

  1. 遇到一个坑, 请看这里
  2. 如果你不能忍受打包的蜗牛速度, 那就赶紧使用freeline吧 -- .

相关文章

网友评论

  • Tobi1025:执行python freeline.py -h命令时,报错
    Traceback (most recent call last):
    File "freeline.py", line 7, in
    from freeline_core.dispatcher import Dispatcher
    File "/Users/qiaojingfei/Desktop/\u5bb6\u653fapp/jz_app_android/freeline/freeline_core/init.py", line 1, in
    import build_commands
    ModuleNotFoundError: No module named 'build_commands'
    Tobi1025:我的python版本是2.7.10,官方说2.7+,应该没问题啊
  • 李科吐温:配置二 c步骤在使用FreeLineCore.init()的时候应该也不用写了,我看0.8.7版本的gradle插件中自动的为工程加入了这段代码 。 https://github.com/alibaba/freeline/blob/master/freeline-gradle-plugin/src/main/groovy/com/antfortune/freeline/FreelinePlugin.groovy
  • 未来大方之家:使用最新版,配置和官方那么简单哟
  • 未来大方之家:你使用最新版0.8.7,效果会好很多
  • Small_Cake:我用了一下,最先是各种配置问题,并没有官方说的那么简单!插件点击也没反应,而且经常连接不上Freeline服务,经常是全量更新,导致时间更长。反正极不稳定!速度再快,不稳定还是没法用,最后去掉了这个部分!
    未来大方之家:你使用最新版0.8.7,效果会好很多

本文标题:freeline使用入门

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