Android Developer

快速打包方式处理

问题描述

项目的推进一点一滴地增加了我们编译安装包的耗时,对团队的开发效率负面影响逐渐显现。

目前主要的耗时影响体现在两个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.