聚美快速编译之FreeLine 安装指南

聚美快速编译之FreeLine 安装指南

Freeline

开源地址是:https://github.com/alibaba/freeline

Freeline是蚂蚁聚宝团队15年10月在Android平台上的量身定做的一个基于动态替换的编译方案,5月阿里集团内部开源。

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

Freeline 有什么优势呢?

  1. 真增量,构建过程快且增量包体积小,极大提升更改代码部署到手机速度,较Android studio2.0及 LayoutCast快3~5倍
  2. 跨平台Linux,mac,windows
  3. 全版本覆盖 2.x ~ 6.x版本均支持
  4. 部署流程简化,更改代码后,构建过程中,与手机建立了tcp长连接,一行命令即可完成增量部署,毋需到各自子bundle所在的目录构建完成后再进入portal/launcher进行打包再安装到手机的过程
  5. 事务支持,在开发过程引入的异常不会破坏工作空间
  6. 无缝支持mPass,解决了类似maven各个节点需merge合并等与常规开发流程不一致的问题
  7. 进程级别异常隔离,开发体验持续稳定

谁在使用 Freeline?

目前 Freeline 在阿里内部稳定支撑蚂蚁聚宝,高德地图等ANDROID技术团队日常开发,兼容mPaas/gradle架构.

原理介绍:

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

聚美 App 使用指南

由于我们使用 HG 来管理,所以会出现很多不同的分支,因此基于最新的 default_3.94 这个分支来进行推广。本文中罗列出一些在使用过程的一些坑点,请同学们避开。

必须准备好相关的环境:
  • gradle 建议直接使用最新的 3.0 版本。必须要在本地配置相关的环境变量,在 命令行能查看到 当前版本,查看方式是: gradle -v。 同时需要在 AS 里面这么做:
    聚美快速编译之FreeLine 安装指南_第1张图片

    。当然其他方式也是可以的,但是为了以后的兼容与统一,尽量使用3.0

    • Java 建议使用 8.0以上版本。切莫直接使用 AS 里面提供的 SDK 版本,否则会出现一些奇怪的问题,应该如图所示:
      聚美快速编译之FreeLine 安装指南_第2张图片
    • python Mac 里面默认自带该功能,可以直接使用。默认是2.7,有人说3.0可能会出问题,可以先试试。
Freeline 初始化环境:
  • 根目录下的 build.gradle
 buildscript {
     repositories {
         jcenter()
     }
     dependencies {
         classpath 'com.antfortune.freeline:gradle:0.5.5'
     }
 }
  • 项目下面的 build.gradle
 apply plugin: 'com.antfortune.freeline'
 
 android {
     ...
     freeline {
         hack true
     }
 }
 
 dependencies {
   compile 'com.antfortune.freeline:runtime:0.5.5'
 }
  • 自定义的 Application
 public class App extends Application {
     @Override
     public void onCreate() {
         super.onCreate();
         FreelineCore.init(this);
     }
 }

在当前工作目录下 执行:

    gradle initFreeline

ps: 最主要的耗费时间是在 配置 gradle 相关的地方。

  • 如果提示 gradle XX 版本有问题, gradle 3.0 不匹配,可能是 gradle 插件版本有问题。在根目录下面的 build.gradle 里面修改为:
    classpath 'com.android.tools.build:gradle:2.2.0-beta2'

为了保证咱们的运行环境一致,建议直接使用这个。后面有问题也方便协商处理。

  • 如果看到:
    聚美快速编译之FreeLine 安装指南_第3张图片

    虽然上面显示0%,但是其实它一直在本地下载东西,网速正常,基本两分钟左右就能下载下来。 如果没有代理的话,可以这么做,直接使用国内的东西下载:

    gradle initFreeline -Pmirror (建议直接使用这个)
  • 如果看到 read_project_info_task 的时间超长, 大于30秒以上,可能是 gradle 出问题了。说明gradle 在本地下载东西,有一种比较好的做法是:直接从 gradle 官网下载到最新的 gradle 压缩包(一定要是最全的 all 版本)。可以将该压缩包存起来,并配置本地环境变量等。对于图中出现的问题,可以打开这个目录:

    这个目录:


    聚美快速编译之FreeLine 安装指南_第4张图片

    放入压缩包到这个文件夹中:
    聚美快速编译之FreeLine 安装指南_第5张图片

    然后直接运行即可。

  • 直接使用这个命令构建:
    聚美快速编译之FreeLine 安装指南_第6张图片
  • 如果看见这个表示初始化 Freeline 成功:
    聚美快速编译之FreeLine 安装指南_第7张图片
  • 直接执行这个:

    一般情况下可以直接构建成功,但是对于聚美项目会失败,是因为里面的字符串写的不规范,例如截图:


    聚美快速编译之FreeLine 安装指南_第8张图片

    这里说的不规范是因为里面可能包含了特殊字符,一般肉眼看不到,通过某些工具可以查看。如果遇到上述问题,我们可以手动把这些相关代码重写下即可。

根据代码行数能定位到这里:


聚美快速编译之FreeLine 安装指南_第9张图片

聚美快速编译之FreeLine 安装指南_第10张图片

当我们修改成功后,再次运行即可。

  • 如果出现
    聚美快速编译之FreeLine 安装指南_第11张图片

    聚美快速编译之FreeLine 安装指南_第12张图片

    说明我们的相关构建没有问题,只是在输出 apk 包后,最后无法找到相关的 apk. 现在的做法就是手动指定这个目录。在项目中 的 主要 Model 里面的 build.gradle 中 的 android { }里面的位置加上
android {

freeline {
    hack true
}
def flavor = "jmtest"

freeline {
    productFlavor flavor
}

freeline {
    def dir = System.getProperty("user.dir");
    apkPath dir + "/ExportApks/"+ flavor + "_" + "3892" + ".apk"
}

freeline {
        def dir = System.getProperty("user.dir");
        apkPath dir + "/ExportApks/"+ flavor + "_" + "3892" + ".apk"
    }
}

请把 ”3982” 替换成 你自己的版本号,目前发现无法用,后面会对这部分内容进行修改,尽量自动化。

当我们设置成功后,就 Ok 了。如图:
聚美快速编译之FreeLine 安装指南_第13张图片
  • 我们可以设置别名启动:
    alias py="python freeline.py”

以后就可以直接 执行 py.

  • 当我们出现这种情况的时候:
    聚美快速编译之FreeLine 安装指南_第14张图片

方案1: 可能是你本地的 Debug 模式开启了混淆,请关闭混淆即可:
聚美快速编译之FreeLine 安装指南_第15张图片

,一般 debug 模式下是不需要混淆的。

方案2:
需要重新配置一些地方:在 项目根目录下的 build.gradle 文件中,修改这个com.android.tools.build:gradle的版本为 2.2.0-beta2:

classpath 'com.android.tools.build:gradle:2.2.0-beta2'

即可。

正常运行后:
聚美快速编译之FreeLine 安装指南_第16张图片
  • 如果出现关于 freeline 脚本的问题,可以尝试这么修改:
    聚美快速编译之FreeLine 安装指南_第17张图片
    module = fn.split('.')[0] 修改为 module = fn[:fn.rfind(".")]

至此,基本聚美相关就可以运行相关的东西了。

增加 Freeline 的文件对比情况

聚美快速编译之FreeLine 安装指南_第18张图片

开始逐个文件对比差异,如果有问题可以根据下图修改:


聚美快速编译之FreeLine 安装指南_第19张图片



聚美快速编译之FreeLine 安装指南_第20张图片

聚美快速编译之FreeLine 安装指南_第21张图片

聚美快速编译之FreeLine 安装指南_第22张图片

聚美快速编译之FreeLine 安装指南_第23张图片

聚美快速编译之FreeLine 安装指南_第24张图片

聚美快速编译之FreeLine 安装指南_第25张图片

聚美快速编译之FreeLine 安装指南_第26张图片

聚美快速编译之FreeLine 安装指南_第27张图片

聚美快速编译之FreeLine 安装指南_第28张图片

你可能感兴趣的:(聚美快速编译之FreeLine 安装指南)