相信用过studio的人都有一个体会,小项目还好,但是碰到编译完成30-40M的APK项目的时候,那个慢和卡真是不能用言语表达,我可以描述一下我的现状:
1.项目由6个module和几十个sdk组成(这里的sdk不包括开源第三方,都是公司自己的)
2.编译完成debug包40M左右
3.更新一次代码,重头编译一次快则30分钟,慢40分钟很常见
4.编译的时候真是卡,8G内存,用了7G多,编译时啥也干不了,一天编译几次就over了,太浪费时间
基于以上问题,开始寻找出路,FreeLine进入我的法眼,然而真实体验也并不能解决以上问题,就我的使用体验来说,有以下几个问题:
1.初次编译卡,占内存依旧
2.初次编译时长并不比用studio好多少
3.初次使用配置还有些坑要踩,比如关闭混淆等
虽然有以上几个问题,但是我还是在使用,为什么?因为增量编译确实强大,改一个sdk的一个文件,十几秒基本部署到手机上,这对于以前编译一次要很长时间的我来说简直是福音。下面开始介绍FreeLine的使用过程。
FreeLine是蚂蚁聚宝团队开发的,github地址:https://github.com/alibaba/freeline, FreeLine的原理说明地址:https://yq.aliyun.com/articles/59122
FreeLine集成过程如下(注意windows要按照python2.7):
1.在Android studio上安装FreeLine插件。
File-》settings-》plugin 搜索安装
2.配置项目的build.gradle文件,增加如下内容,最新版本0.7.3.1
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.antfortune.freeline:gradle:0.6.3'
}
}
3.主module的build.gradle文件引入freeline的依赖
apply plugin: 'com.antfortune.freeline'
dependencies {
debugCompile 'com.antfortune.freeline:runtime:0.6.3'
releaseCompile 'com.antfortune.freeline:runtime-no-op:0.6.3'
testCompile 'com.antfortune.freeline:runtime-no-op:0.6.3'
}
4.主module的build.gradle文件配置渠道
android {
freeline {
hack true
productFlavor “haha”
}
productFlavors {
haha{
}
}
}
5.主module的build.gradle文件关闭混淆
// multiDexKeepProguard file('multidex.keep') // 如果有,要注掉
minifyEnabled false // 关闭混淆
6.在application文件中初始化FreeLine
import com.antfortune.freeline.FreelineCore;
public void onCreate() {
super.onCreate();
FreelineCore.init(this);
}
FreeLine的编译过程:
1.在studio的freeline窗口中输入:gradlew clean,清理项目(freeline增量编译快的前提是手机中的apk是完全用freeline编译的,不可以和studio混合编译)
2.在studio的freeline窗口中输入:gradlew initFreeline -Pmirror,初始化配置
3.在studio的freeline窗口中输入:python freeline.py,开始进行编译
4.编译时间会随项目大小而有所不同,此时需要静静,耐心,静静,耐心,静静,耐心等待
5.编译成功后,会自动装到手机上并启动
6.首次全量编译完成后,修改项目源代码需要增量编译时,插上装有全量编译apk的手机,执行命令:python freeline.py
7.首次全量编译完成后,需要重新全量编译时,执行命令:python freeline.py -f,也可以将1-3步重新执行一遍
FreeLine使用过程中遇到的坑:
1.全量编译完成,首次启动app崩溃,log显示can not find ***class,此时可能是由于混淆打开了,需要关闭混淆,如果build.gradle中有下面这句,要注掉
multiDexKeepProguard file('multidex.keep')
2.全量编译启动正常,开始增量编译时提示找不到手机,尝试十几次后失败,此时建议你重新配置一遍,网上的其他方法尝试过,并没有解决问题
3.编译过程提示没有productFlavor,此时用你默认的渠道即可,如果没有,可以在主module的build.gradle中加入:
android {
freeline {
hack true
productFlavor “haha”
}
productFlavors {
haha{
}
}
}
以上就是我使用FreeLine的总结,以后有时间看一下原理,再来分享
闲聊群 : 668524118
本群主要用于编程技术 ,及创意作品 ,思维架构的交流 ,欢迎喜欢创新 ,热爱生活的朋友加入 !