在最近的 Android 开发中,每次发布版本都要手动打包,深感到不便,为了让测试的人员也可以感受到 Android 打包的乐趣,参考了网上很多 Jenkins 进行 Android 自动打包的文章后,花了一些时间把这个环境搭建起来了。
Jenkins 安装
Jenkins
的可以单独运行也可以在 Tomcat
服务器中运行,不过我这里是单独运行的,首先就要到 https://jenkins.io/download/ 下载一个适合自己的电脑环境版本的 Jenkins
:
由于我的电脑就是 Windows ,所以就下载图片红色选中的,下载并安装完成后,就会出现下面的界面,要求你填写 Jenkins
超级管理员密码,不过它上面已经提示了密码存放在什么地方:
填写完密码后,将会看到插件安装界面:
这里我选择了第一项,安装默认的插件,熟悉后再做修改:
等全部插件都下载完成后,就可以看到下面的用户名设置页面了:
上面每一项设置完成并点击 保存并完成 后,就是设置进入 Jenkins
管理页面的 url 了,继续点击右下角的保存:
现在一切都准备就绪,可以开始运行 Jenkins
了:
然后就可以看到下面的页面了:
配置 Jenkins 的环境变量
首先进行系统设置:
到 系统设置 的全局属性里面添加 ANDROID_HOME
,也就是本地的 SDK
的路径:
然后点击下发的应用并保存 :
注意:这里必须先点击应用再去进行保存,如果不点应用的话,保存可能会无效
然后就是 全局工具配置 了:
要在这里配置 JDK
目录和 Gradle
目录:
这里就不要使用自动安装了,直接依赖本地的就可以了,因为 JDK
的自动安装需要一个 Oracle
账号,而 Gradle
的下载网速是出了名的慢。
现在就轮到最后的 项目的 gradle
脚本配置了,这里就只需要简单配置一些打包相关的东西即可:
apply plugin: 'com.android.application'
android {
compileSdkVersion 1
buildToolsVersion 1.0.0
defaultConfig {
applicationId "xxx.xxxx.xxxxx"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName 1.0
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//这个是必须有的
signingConfigs {
config {
keyAlias 'fritz'
keyPassword '123456'
storeFile file('keystores\\fritz.jks')
storePassword '123456'
}
}
buildTypes {
release {
minifyEnabled false
//去掉没有使用过的资源文件,请慎重使用
//因为图片资源如果在代码里面没有id引用,一样会移除
//无法确保全部图片资源都有id引用的话,不要使用这个属性
shrinkResources = true
signingConfig signingConfigs.config
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//这里修改apk文件名
android.applicationVariants.all {
variant ->
variant.outputs.all {
outputFileName = "fritz.apk"
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testImplementation 'junit:junit:4.12'
implementation "com.android.support:appcompat-v7:27.1.1"
implementation "com.android.support:support-v4:27.1.1"
implementation "com.android.support:design:27.1.1"
implementation "com.android.support.constraint:constraint-layout:1.1.2"
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
创建打包任务
现在就来创建我们的打包任务吧:
给我们的打包任务一个名字,按照下图中去配置即可:
点击确认后就可以看到下面的六个配置:
这些配置全部都有作用,不过这里我先针对一部分来讲解。
源码管理
这里我使用了 Git
来进行源码的管理:
在 Repository URL 中添加项目的 Git
路径,然后在下面的 add 按钮里面添加 Git
的用户凭证:
我们可以在 Branch Specifier 切换到我们想打包的分支,由于这个是刚创建的测试项目,暂时就只有 master 而已。
构建
这里选中第一个 Invoke Gradle ,Gradle Version 就用我们之前配置的 GRADLE_HOME
就可以了,而需要执行的 Task 则就是:
app:clean
app:assembleRelease
接着我们点开右下角的 高级配置按钮 ,把下面的两个选择给勾上:
这个是用来传递一些自定义参数到 gradle
脚本里面的,暂时用不上,不过可以先开启。
这个就比较重要了,它是项目依赖的support包或第三方库源码下载到 Jenkins
的服务器中,以便顺利完成打包,因此这个是必须开启的。
这样子,基本配置就已经完成,这时候点击下面的应用并保存吧:
执行构建任务
在点击保存之后,就会看到下面的界面,点击立即构建就会开始执行打包任务了:
这时候就会看到下面的构建过程了:
蓝色表示成功,红色表示失败,我们点击构建任务来看控制台的输出:
而且从控制台的输出,可以看到它下载了不少第三方库到本地 Jenkins
服务器上面:
我们到安装 Jenkins
的文件夹里面的 workspace
,可以看到下载到本地的项目文件多了几个新的文件夹,其中就有下面的缓存文件夹:
这里点击进去 caches
进去到 caches\transforms-1\files-1.1 里面,就可以看到相关的依赖下载了:
因此这里再提醒一次,请务必任务配置里面把下面这勾给勾上了:
而任务打包出来的 apk 所在路径为 app\build\outputs\apk\release :
上传 apk 到 fir.im
目前已经顺利把 apk 打包出来了,但是目前打包出来是存放在 Jenkins
的本地服务器上面,还是不太方便提供给测试人员,因此最好就是把服务器打包出来的 apk 上传到一个托管发布测试的平台,这里我就选择了 fir.im 作为测试 apk 发布平台。
在登录后 fir 官网的个人资料中有一个 API token :
先把这个记下来,然后到 http://blog.fir.im/jenkins/ 下载 Jenkins
的 fir.im的插件,下载完成后就到 系统管理 -> 插件管理->高级 里面来安装这个本地插件:
选中刚才下载的插件后,上传即可。
安装完成后,再一次打开我们刚才构建的任务的配置,到 构建后操作 里面,这时可以看到新的元素了:
选中后,填好下面配置即可:
然后点击 应用并保存 。然后再一次构建项目,构建成功后我们会在控制台输出看到下面的打印:
说明已经上传到 fir.im 了,现在到 fir.im 里面可以看到下面的信息:
这时候,测试人员就只需要通过 fir.im 下载链接即可下载最新的测试 apk 了。
从此开发人员就只需要上传代码,然后帮测试人员那边安装好环境,以后就可以让测试人员慢慢享受打包的乐趣了。