我们在Android的开发中常常需要:开发环境、测试环境和生产环境三个环境下测试我们的应用,经常会遇到这样的情况,测试人员给我们开发人员说“能不能给我打一个XXX的环境的包,我需要测试”,再工作不忙或者偶尔一次的情况下,开发人员还是很乐意给测试人员打包的,毕竟分分钟就搞定了。但是当维护的产品多了,或者测试人员需要很多的版本,那就不是分分钟搞定的事了,又让我们给他们打包非累坏我们可爱的程序员哥哥(妹妹)的。所以作为一名“懒”的猿类,当然想把打包这种简单的事交给测试人员自己干了,爱怎么打包就怎么打包,这里就利用Jenkins+Git+gradle来自动构建android应用,一键搞定就这么简单。先来一张实例图片吧,毕竟无图无真相:
图中分为三个环境:开发、测试和生产;然后项目中维护了5个APP的项目(当然一个也是一样的)。然后最后一个参数是判断是来自哪里的打包,这里根据这个参数来设定打包后apk的存放路径。
先来说说大体思路:首先在Linux(Ubuntu)上面配置Java、Android SDK、Gradle、Tomact、Jenkins、git等开发所需的环境;然后进入Jenkins中配置我们打包需要的环境;然后创建构建的项目;然后添加自定义参数(用户在gradle中获取);然后配置项目源码;然后构建脚本等。这么多然后以后,就可以愉快的构建了。
第一步:搭建Jenkins环境,这一步网上很多教程,搭建Tomact环境,然后部署Jenkins就行了,一般开发中如果是Jenkins构建所以项目的话,后台已经搭建好了,我们只需要添加我们需要的插件即可;然后配置Android SDK环境变量、Java环境变量等,这不是我们这次的重点,所以就不讲了,网上很多资料的。
第二步:在Jenkins上面创建我们的构建项目:
1):安装必要的插件(Git和Gradle)
1、在Jenkins主页面上面选择“系统管理”->“管理插件”,就到了插件管理的界面:
在上面导航栏中选择我们需要安装的插件,然后下载安装重启后就可以用了。
2、配置Gradle插件
选择“系统管理”->“Global Tool Configuration”,里面可以配置全部插件,应git后台已经配置好了,这里我们只需要配置gradle插件即可(附gradle下载地址:http://www.androiddevtools.cn/index.html)这里有很多Android的工具。然后下载相应的gradle版本,配置gradle插件:
2):创建项目
在Jenkins主页面上面点击“新建”,然后输入构建项目名称,然后选择“构建一个自由风格的软件项目”,就可以了。
然后进入我们创建的项目配置环境参数:
1:添加构建参数
配置中的“BUILD_TYPE”、“BUILD_SCRIPT”和“IS_JNEKINS”都是我们在Jenkins和gradle要获取的值,然后根据这些值来进行相应的打包配置,即可完成打包。里面的值有多重类型,一般选择“Choice”就可以了:
2:添加构建脚本
在“源码管理”中添加我们的项目源代码,选择Git然后添加项目git地址,Jenkins只能用SSH这种方式来clone代码,所以还需要添加账号的身份认证证书才行,这里也不絮叨了,找后台管理人员给添加就行了。
3:添加构建脚本
这里面主要是添加构建参数和脚本,通过参数来控制脚本里面的逻辑,实现不同的打包:Jenkins里面的参数可以在gradle.properties中获取到具体的值,然后gradle.properties中的值可以在build.gradle中获取到,这样我们就能在build.gradle中获取Jenkins中选择的参数的值了,然后进行打包配置操作。
gradle.properties中配置如下:
# Project-wide Gradle settings.
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx1536m
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
BUILD_TYPE = DEV
IS_JNEKINS = false
其中BUILD_TYPE、IS_JENKINS就是我们要获取的值,然后在build.gradle中调用如下:
build.gradle中我们通过(project.XXX)来获取我们配置在gradle.properties中的值,然后manifestPlaceholders里面是设置AndroidManifest.xml中相关SDK的参数的。 buildConfigField "String", "PUBLISH_MODE", "\"$project.BUILD_TYPE\""这一句是创建“PUBLISH_MODE”变量,我们在Java代码中可以调用,调用方式为:BuildConfig.PUBLISH_MODE,这样一来,Jenkins中的参数我们在build.gradle、AndroidManifest.xml和Java代码中都可以获取到了,然后就可以根据参数进行相关的配置。
最好我们来设置一下构建好的apk的输出目录:在build.gradle android下面添加如下代码:
applicationVariants.all { variant ->
variant.outputs.each { output ->
//开始输出
if("true".equals(project.IS_JNEKINS))
{
if('DEV'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('dev路径+***debug.apk')
}
else if('STG'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('stg路径+***debug.apk')
}
else if('PRD'.contentEquals(project.BUILD_TYPE))
{
output.outputFile = new File('stg路径+***debug.apk')
}
}
}
}
这样自动构建好的apk就放到了对应的路径下,然后测试人员或其他人员就可以在里面获取或设置成下载链接。file中的文件名也可以带参数,比如加上版本号等。
好的,写了这么多我也是够啰嗦的了,linux下面通过Jenkins+Git+Gradle自动化打包Android项目就完成了,感觉还是不容易呀。