在一个App从开发到测试的过程中,我有很长一段时间都是这样做的:打包,上传到tower,在tower上编写本次更新说明,通知测试。一般情况下,打包及上传的过程大概也就2分钟。除此之外,由于项目代码有作混淆,并且使用了bugly,因此在发出每个版本之后还需要将混淆的mapping.txt传到bugly上。当日复一日,并且有时还遇到网络较差的情况时,这种人工手动的工作方式就很影响工作效率及心情了。因此,自动化构建及发布就成了必须掌握的技能了。
本篇分享的是我在Android自动化构建的一些经验,涉及到的工具及网站如下:
- Gradle
- fir.im
- Gitlab
- gitlab-ci-multi-runner
所述内容包含:
- 使用Gradle自动构建并发布到fir
- 使用Gitlab-CI,在提交时自动化构建并发布到fir
- 在服务器配置docker版的gitlab-ci-multi-runner
- 多flavor时,在fir上同时发布的解决方案
Gradle及fir带来的解放生产力
构建并上传apk到fir
我接触fir.im的时间比较早,那时官方就已经提供了一个命令行打包并上传的工具fir-cli。但是有两个问题是我难以忍受的:
1. 它需要安装,并且由于使用ruby编写,所以还需要ruby环境
2. 它会构建所有flavor的版本,虽然最后只上传一个(该问题后来已经解决)
于是,在发现它有提供API之后,我查阅了下Gradle的文档,自己写了一个简单的fir发布插件——fir-publish。
这个插件很小很轻,没有使用额外依赖库,网络请求使用的也是Gradle本身就有的http-client的API。使用方式如下:
首先在根项目的build.gradle中加入以下依赖:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.githang:fir:0.1.6'
}
}
然后在app里的build.gradle文件末尾加入以下配置:
apply plugin: 'fir'
fir {
apiToken //fir.im上的API token
bundleId android.defaultConfig.applicationId
flavor "Test" (如果没有productFlavor,可不配置此项),仅在上传apk时需要
appName 你的应用名称,仅在上传apk时需要
icon 应用图标路径,仅在上传图标时需要
changeLog "更新日志" // 或者使用 file("日志文件路径")
}
其中的API token在你登录fir之后,点击自己的账号就可以获取。
该插件向你的project添加以下4个任务:
- firCert 获取上传凭证
- firIcon 上传图标,依赖于firCert
- firApk 上传APK,依赖于firCert及assembleRelease(或assembleFlavorRelease)
- firAll 上传图标及APK,依赖于firIcon及firApk
在上面的配置中,更新日志可以直接写在上面,也可以单独创建一个更新日志的文件(推荐),每次要发布时只需要修改这个文件上的更新日志,然后执行以下命令即可自动构建并发布到fir: