我的视频课程:《FFmpeg打造Android万能音频播放器》


        我们在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=trueBUILD_TYPE = DEVIS_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项目就完成了,感觉还是不容易呀。






更多相关文章

  1. Android项目管理之配置管理
  2. [掌上智能] 为什么Android即使硬件高一档也没iPhone那么流畅?
  3. 交叉编译-5:使用NDK和CMake在Linux上编译Android动态库
  4. 在windows上编译jrtplib 3.9.1和jthread 1.3.1
  5. Android批量打包-如何一秒内打几十个apk渠道包
  6. Android(安卓)Wear开发 - 数据通讯 - 第零节 : 打包Wear应用(手
  7. android 使用aapt方法
  8. Maven系列 1. Maven入门
  9. Android放置图片的三个文件夹

随机推荐

  1. 20210111 装饰器之案例剖析
  2. 20210108 装饰器详解
  3. Vue自学之路3-vue模版初探
  4. 20210104 递归
  5. 210329 CSS 媒体查询 grid布局
  6. 大数据技术完美地解决了海量数据问题,可为
  7. DolphinDB的权限管理和安全
  8. 如何开始一个数据科学项目?
  9. Java并发编程学习3-可见性和对象发布
  10. 如何预测您的用户即将流失?