freeline源码修改和配置流程

前言:

之前修改和使用了LayoutCast,感觉效果不错,极大的提高了编译速度。

同样的实现动态编译的框架还有google自带的Install Run、FackBook的Buck等等。具体的各个实现原理就不多说了,之前的介绍LayoutCast的文章有说明。听说freeline继承了之前三个框架的优点,并加以改进,所以就准备使用freeline应用于项目中。

一、freeline基本配置流程

首先freeline的github地址:https://github.com/alibaba/freeline

官方的使用流程介绍很简单,需要做如下几步:

1、工程build.gradle下,做如下配置

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

2、主module的build.gradle下(公司的就是CTMain),做如下配置:

apply plugin: 'com.antfortune.freeline'

android {
    ...
    freeline {
        hack true
    }
}

3、自定义Application中,做如下修改:

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

4、工程根目录下,运行下面的命令。
Windows: gradlew.bat initFreeline

Linux/Mac: ./gradlew initFreeline

5、在工程根目录下,运行

python freeline.py命令

如果想全量编译,就运行

python freeline.py -f

上面说的是正常的流程,但是公司框架下,一般流程是走不通的,下面说的是配置freeline的流程中,解决遇到的问题。

二、解决找不到freeline工程依赖

公司的maven默认指向的是私库。私库中是没有freeline的,所以一般情况下,是找不到freeline这个项目的。

首先先做上面的配置,然后首先可以尝试修改android_2下的build.gradle文件

打开jcenter()做如下修改,sycn一下。

buildscript {
    repositories {
        maven {
            url "http://maven.dev.sh.com:8081/nexus/content/groups/public"
 }
// mavenLocal()
 //下面的仓库不要打开,MCD不能访问,会造成MCD打包时间延长
 jcenter()                                            // 这是AS默认库,访问困难 就解开这一行
// mavenCentral() // 这是maven中央库,不定期抽风
// maven { url "http://mirrors.ibiblio.org/maven2"} // 这是一个maven镜像,速度还行
 }

如果运气比较好的话,sycn工程不报错,那么就OK了。运行成功。下面的部分就可以不看了。

但是每个人的网络状态不同,我的就无法正常sycn,如果sycn的话会提示找不到freeline,所以只能采取另一个方式,直接依赖freeline工程。

三、freeline工程

freeline工程主要分为三大模块,分别为

runtime:这个模块主要在java层执行,主要的作用是在Application启动的时候重载ClassLoader,插入dex,从而实现增量修改的目的。

freeline_code:python文件集合,主要是扫描本地修改文件,执行编译压缩传输文件等操作。

gardle工程:gradle插件工程,主要实现下载freeline_code集合,更改打包步骤等操作。

这里其实有一个问题,由于freeline_code集合是下载的,且初始化的流程中,并不去识别本地是否存在该问题,所以造成如果下载失败的话,后面的步骤是无法执行的,从而导致整个freeline无法执行。而我就遇到了这个问题,所以后文就会对这个问题进行改进。

四、依赖freeline工程下runtime模块

1、git clone一下freeline项目,下载到本地。把runtime模块以module的形式导入。


2、修改settings.gradle文件,最后面做如下修改:

    }
    //Main entrance
 include 'CTMain'
// include ':library'
 include ':runtime'
}

3、修改CTbusiness下build.gradle文件,做如下修改:

    compile ':ReactAndroid:+@aar'
// compile project(':library')
 compile project(':runtime')

通过以上三步,runtime工程应该是可以正常导入了,这时候,CTBaseApplication中的FreelineCore.init(this);应该已经不报错了。

五、依赖freeline的gradle插件工程

这个步骤相对就比较复杂了,具体有两个问题需要接解决

第一、.利用freeline中的gradle工程发布gradle插件到本地maven中,并且指向本地的maven。

第二、解决上文提到的,利用gradlew.bat initFreeline初始化过程中,下载失败的问题。

首先解决第一个问题,发布到本地maven:

1.以工程的方式打开gradle项目,记得gradle-wrapper.properties中修改distributionUrl为2.10的。

2.修改gradle工程下的build.gradle文件。增加下面这句话

apply plugin: 'maven'

效果如下:

apply plugin: 'groovy'
apply plugin: 'java'
apply from: 'bintray.gradle'
apply plugin: 'maven'

group 'com.antfortune.freeline'

3.修改uploadArchives中的配置,url改成本地maven库地址:

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri('D:/Users/xiangleiliu/.m2/repository'))
        }
    }
}

4.如果bintray.gradle文件报错的话,全部注释掉,该文件的作用是脚本执行上传jcenter库,对我们没用处。

5.执行gradle中的uploadArchives这个task


成功之后,打包之后的jar和配置文件应该就会发布到本地maven库当中了。


6.指向本地maven库。

android_2的build.gradle中,指向本地maven库。


通过以上的这几个步骤,这时候再sycn工程的时候,应该就不会报错了。

这时候在android_2的根目录下执行

gradle.bat initFreeline命令,如果不报错,这就不用执行下面这一步了。

然后解决第二个问题,解决下载报错。

报错异常如下:


由于这个操作是阻断性的,如果执行不下去,后面是无法执行的。所以要解决这个问题,只能是修改gradle插件里面的代码。

1、该方法是执行initFreeline时候报错,所以要对应的修改initFreelin里面的方法。

我修改了对应的FreelineInitializer.groovy文件。先去判断本地是否有zip包,如果有直接使用本地的,如果没有再去下载远程的。该文件文章最后附件贴上

2、修改Gradle工程下的gradle版本号。version改成0.5.5,比最新的版本高一点,避免重复。

3、对应的android_2下的build.gradle文件也需要修改成0.5.5的版本。

4、删除缓存,重新发布插件包以及拉去最新的maven。

缓存地址maven:D:\Users\xiangleiliu\.m2\repository

缓存地址gradle:D:\Users\xiangleiliu\.gradle\caches\modules-2\files-2.1

5.下载freeline.zip包,地址:https://github.com/alibaba/freeline/releases/download/0.5.4/freeline-v0.5.4.1608301118.zip

或者文章最后附件中也有。

重命名成freeline.zip,放到android_2的根目录下。

最后:

重新sycn下工程,再跑一下gradle.bat initFreeline命令。效果如下:


这时候代表初始化已经完成了。本地D:\Users\xiangleiliu\.freeline\cache\b3ca7985cfb9cf4df188fe701c892271\路径下已经有了配置文件。

执行

python freeline.py -f命令,应该会报错提示配置文件找不到。原因是配置缓存文件的生成路径的规则我猜测应该是MD5(版本号+其它信息)。

所以直接把本地已有的配置文件移到提示报错的路径下就可以了。


最最最后:

首次运行的时候,执行命令python freeline.py -f,这一次耗费时间相对会比较长,window下我测试大约需要5分钟。


平常修改文件后,在根目录下执行python freeline.py命令就可以了,平常如果走增量修改的话,大约需要5到10秒左右。




补充:鉴于每次增量编译的时候都需要在命令行里面执行一下
python freeline.py,有一些麻烦。所以开发了一个AS插件,点击一下效果等同于执行以下python freeline.py。
效果如下:





插件以及附件下载链接:
AS插件:
上文中修改的附件集合:http://download.csdn.net/detail/aa5279aa/9619492



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

失落夏天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值