问题描述
项目的推进一点一滴地增加了我们编译安装包的耗时,对团队的开发效率负面影响逐渐显现。
目前主要的耗时影响体现在两个gradle插件上
-
听云插件
-
神策自动埋点插件
以上这两个插件基本上是处理java生成的class文件的重写操作,以此达到埋点和监测的目的。
加速策略
基于上述两个插件的作用原理的理解,我们可以在某些内部的debug版本编译时不应用这两个插件。
为了做到最小的影响,我们的策略是
-
默认情况下,依然启用这两个插件
-
如果用户强制指定禁止,则禁止应用对应的插件。
实施方法
根据加速测速,体现在代码上的修改为(build.gradle文件)
if (!project.hasProperty("disableTingyunPlugin")) {
apply plugin:'newlens'
}
if (!project.hasProperty("disableSensorDataPlugin")) {
//添加 com.sensorsdata.analytics.android 插件
apply plugin: 'com.sensorsdata.analytics.android'
}
测试思路
为了验证加速效果,我们尽可能的控制单一变量。
具体的测试预设条件为
-
排除gradle daemon造成的影响(使用gradlew –stop处理)
-
禁用增量编译,使用clean build 全量编译.
测试数据
我们使用的默认编译(开启神策和听云插件),执行命令如下
./gradlew --stop && ./gradlew clean && ./gradlew assembleDebug
得到的耗时数据为BUILD SUCCESSFUL in 2m 30s
快速编译(关闭神策和听云插件)
./gradlew --stop && ./gradlew clean && ./gradlew assembleDebug -PdisableSensorDataPlugin -PdisableTingyunPlugin
得到的耗时数据为BUILD SUCCESSFUL in 1m 47s
注:由于日常的开发大部分是增量编译,快速编译耗时可能甚至更少(我这里尝试了一次,快速增量编译耗时23s)。
造成的影响
- 对于执行快速编译的生成包,应该没有神策的自动埋点数据(手动埋点不影响)和听云的一些数据监测。不过这些包只可能存在于公司内部人员使用。
福利
最后写给Linux和Mac 终端用户的一个更快速打包的福利(建议保存成脚本)
#!/bin/bash
find . -name *.apk | xargs -J {} mv -f {} /tmp
bash ./gradlew --configure-on-demand --parallel --offline --max-workers=`sysctl -n hw.ncpu` assembleDebug -PdisableSensorDataPlugin -PdisableTingyunPlugin
echo "installing apk file"
find . -name *.apk | xargs adb install -r
adb shell am start -n com.secoo/com.secoo.app.mvp.ui.activity.LauncherActivity
Enjoy.