公司有个原生项目,Java代码达到6M多,是从2016年开始写的代码,用的gradle版本比较低,res资源也比较多,每次代码修改,编译时间都再半分钟以上,这让我头疼不已。我为此做了两件事:
1,minify工程,把框架抽出来,需要迭代的功能往里加
2,寻找快速编译插件,目前发现两款插件,一款是阿里的Freeline,一款是JRebel。
现在就来说这两款插件的特点吧
Freeline:
java代码修改后能瞬间响应,真正秒级编译
res文件layout文件编辑,需要重新编译资源,否则报错
使用过程:
1,python 2.7版本安装,安装好后需要加入环境变量
2,在www.plugins.jetbrains下载Freeline插件(studio没有搜到)
3,根目录的build.gradle,加入
repositories {
jcenter()
}
dependencies {
classpath 'com.antfortune.freeline:gradle:0.8.8'
}
4,app下的build.gradle加入
apply plugin: 'com.antfortune.freeline'
android {
...
//关键
freeline {
hack true
//注意这里的XXX替换掉
productFlavor "XXX"
autoDependency false
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//关键
compile 'com.antfortune.freeline:runtime:0.8.8'
}
}
5,Application加入
FreelineCore.init(this,this);
6,在android工程根目录,Windows 输入gradlew initFreeline,Mac/Linux 输入./gradlew initFreeline,此时会进行一次长时间的 全量编译
7,修改java代码后,输入python freeline.py即可热重载
8,修改res下代码,建议clean后重编代码然后再次initFreeline
python freeline.py -c && gradlew compileDebugSources && python freeline.py
9,如果要回到原始的构建方式,需要clean工程后运行
gradlew clean
Freeline使用体验:
优点:
1,java代码修改后急速编译
2,所有机型都能用
缺点:
1,代码侵入性强
2,配置麻烦
3,res无法热重载
JRebel
直接到Settings->Plubins去安装即可
使用方法有手就行,只要操作两个按钮,一个是初次启动,一个是apply changes,热重载
JRebel使用体验:
优点:
1,代码无侵入性
2,无需配置
3,res热重载效率高
缺点:
1,java修改重载效率比Freeline低
2,部分机型因为无法Instant run,不能用JRebel
结论:如果res无需修改或者小改,主要修改java逻辑,可以用Freeline
如果经常修改res,还是用JRebel吧.