114Mall快速编译之FreeLine 安装指南Mac

Freeline
技术解密:https://m.aliyun.com/yunqi/articles/59122
开源地址是: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
114Mall App 使用指南
由于我们使用 HG 来管理,所以会出现很多不同的分支,因此基于最新的 default_3.94 这个分支来进行推广。本文中罗列出一些在使用过程的一些坑点,请同学们避开。
必须准备好相关的环境:
● gradle 建议直接使用最新的 3.3 版本。必须要在本地配置相关的环境变量,在 命令行能查看到 当前版本,查看方式是:

      gradle -v

同时需要在 AS 里面这么做:

。当然其他方式也是可以的,但是为了以后的兼容与统一,尽量使用3.3
○ Java 建议使用 7.0以上版本。切莫直接使用 AS 里面提供的 SDK 版本,否则会出现一些奇怪的问题,应该如图所示:

○ python Mac 里面默认自带该功能,可以直接使用。默认是2.7,有人说3.0可能会出问题,可以先试试。
Freeline 初始化环境:
● 根目录下的 build.gradle

buildscript {     
    repositories {         
    jcenter()     
}     
dependencies {          classpath'com.antfortune.freeline:gradle:0.8.7'     } }

● 项目下面的 build.gradle

apply plugin: 'com.antfortune.freeline' 
android {     ...     
freeline {         hack true     
} } 
dependencies {   compile'com.antfortune.freeline:runtime:0.8.7' 
}

● 自定义的 Application

public class MallApplication{     
@Override     
public void onCreate() {         
    super.onCreate();         
    FreelineCore.init(this);     
} }

在当前工作目录下 执行:

    gradle initFreeline

ps: 最主要的耗费时间是在 配置 gradle 相关的地方。
● 如果提示 gradle XX 版本有问题, gradle 3.3 不一致,可能是 gradle 插件版本有问题。在根目录下面的 build.gradle 里面修改为:

classpath'com.android.tools.build:gradle:2.3.1'

为了保证咱们的运行环境一致,建议直接使用这个。后面有问题也方便协商处理。
● 如果看到
这里写图片描述
进度上面显示0%,但是其实它一直在本地下载东西,网速正常,基本两分钟左右就能下载下来。 如果没有代理的话,可以这么做,直接使用国内的东西下载:

gradleinitFreeline-Pmirror (建议直接使用这个)

● 如果看到 read_project_info_task 的时间超长, 大于30秒以上,可能是 gradle 出问题了。说明gradle 在本地下载东西,有一种比较好的做法是:直接从 gradle 官网下载到最新的 gradle 压缩包(一定要是最全的 all 版本)。可以将该压缩包存起来,并配置本地环境变量等。对于图中出现的问题,可以打开这个目录:
●如果遇到错误:(mac环境会存在此问题)
Traceback (most recent call last):
File “/home/lxhao/code/android/Vendor/freeline/freeline_core/task.py”, line 123, in execute
self.task.execute()
File “/home/lxhao/code/android/Vendor/freeline/freeline_core/gradle_clean_build.py”, line 74, in execute
output, err, code = cexec(command.split(’ ‘), callback=None)
File “/home/lxhao/code/android/Vendor/freeline/freeline_core/utils.py”, line 28, in cexec
p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE, env=env, cwd=cwd)
File “/usr/lib/python2.7/subprocess.py”, line 711, in init
errread, errwrite)
File “/usr/lib/python2.7/subprocess.py”, line 1343, in _execute_child
raise child_exception
OSError: [Errno 13] Permission denied

需要在命令行执行,chmod +x gradlew,是 gradlew 这个文件没有执行权限应该(参考:https://github.com/alibaba/freeline/issues/677

●如果遇到错误:
Please make sure your application is properly running in your device.
Check follow steps:
1. Make sure the versions python freeline.py -v, freeline-gradle and freeline-runtime are the same;
2. Make sure there is no network proxy.
解决方法:
方法1、usb线重新插拔一下。看能否解决
方法2、在命令行执行全量编译

python freeline.py -f

我用第2种方式解决了
More about this can see: https://github.com/alibaba/freeline/issues/152

●由于我使用的是android studio 自带的svn插件,在工程文件夹下会存在这么个文件,它的文件名有问题,存在反转义字符,freeline会编译失败,可能是freeline的bug吧,解决办法是不使用AS自带的svn插件,建议下载Cornertone客户端,用起来还可以,这样就避免了这个问题。(Mac环境会存在此问题)
参考资料:https://github.com/alibaba/freeline/pull/785/commits/4ec9a14c72bb3b411f53e8db76971116d63034f2

这里写图片描述

●成功执行下来,修改了一段代码,编译5s之内就装上了,
速度杠杠的。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值