前置条件:

Java环境变量 (推荐使用Java11)

Android SDK环境变量

搜索框搜索编辑系统环境变量:

在系统变量中添加 :

变量名 JAVA_HOME

变量值 (路径根据自己实际的java安装目录选择)

变量名 ANDROID_HOME

变量值 (路径根据自己实际的java安装目录选择)

然后在系统的Path变量中添加 :%Java_Home%\bin

查看环境变量是否配置成功

一、下载安装Jenkins

Jenkins 官网下载地址:Jenkins download and deployment

选择对应操作系统的版本进行下载(最好选LTS(Long-term Support ) 长期支持即稳定版)

下载完成为.msi镜像。安装时选择本地账户即可,

不想放在默认路径,更改jenkins目录(可选):

1.打开你的Jenkins安装目录,示例C:\Program Files\Jenkins 2.打开jenkins.xml 3.找到JENKINS_HOME ,更改value 4.重启jenkins

安装完成之后浏览器会自动弹出窗口链接:http://localhost:8080

找到对应路径里的文件,把里面的密码复制粘贴进去

安装推荐的插件,如遇网络问题也可以选择插件安装

安装完成创建User:此用户名和密码将用于登录 Jenkins

配置端口号:默认8080

二、安装Gitee插件

我们要用Gitee拉取代码,所以安装一下Gitee插件(系统管理->插件管理->可选插件->筛选Gitee->选中直接安装,安装成功之后重启jenkins服务)

三、配置Jenkins

3.1 全局工具配置

系统管理(ManageJenkins)>全局工具配置(Global Tool Configuration)

1.JDK

别名可以随意,地址就是你的jdk绝对路径

2.Git

Git的安装路径,定位到git.exe

3.Gradle

命名可以随意,建议使用版本号命名

默认路径在C:\Users(用户名).gradle\wrapper\dists\下,定位到bin前面

3.2 环境配置

系统管理(ManageJenkins)>系统设置(Configure System)

1.Android SDK环境变量

键为“ANDROID_HOME”,值指向本地SDK目录

注意:这里的键需要和本机环境变量内的Android SDK目录的键一致

2.Gradle缓存目录

2.Gitee环境

链接名自定义,Gitee域名:Gitee - 基于 Git 的代码托管和研发协作平台

点击添加,新增凭据,选择Gitee API 令牌,到对应地址去获取私人令牌

点击测试链接,出现“成功”,配置完成。

若出现 ERROR ,可能是缺少插件:Jersey 2 API

四、新建任务并配置

新建一个freestyle的项目

4.1 General

会自动填入上面配置的Gitee链接

4.2 源码管理

4.3构建

注意这里GradleVersion要跟安卓项目中使用的Gradle版本一致,否则编译可能会出错。

构建命令一般是先clean,然后assembleRelease-打Release版本的包,或者assembleDebug-打Debug版本的包。

构建 - Invoke Gradle script

4.4 Build Now

点击 Build Now ,可以看到此时开始构建了

不出意外项目构建成功

点击进去,选择控制台输出可查看构建日志

构建成功提示信息,若构建失败具体请查看日志

这时已经生成release包了,默认路径在:

Jenkins\workspace\Test\app\build\outputs\apk\release

但此时apk不能安装,因为: 如果你是使用android studio编译项目的化,在编译apk只会会自动给apk签名。 但默认配置下jenkins下编译出的apk是unsign的。需要一些额外的设置才能自动sign。

4.5 打包android应用时Release自动签名设置

这个功能需要我们修改下build.gradle配置文件,让gradle在编译之后执行签名。 当然你也可以在这里做一些其他的修改,比如修改编译出的apk的名字,让他加个当前时间的时间戳,编译类型的后缀什么的,方便识别。

1.首先要有一个key,没有就自己建一个

2.将key复制到app目录下

3.添加签名配置

signingConfigs {//签名的配置release {storeFile file("xxx.jks")storePassword '密码'keyAlias '别名'keyPassword '密码'}}

4.引用签名配置

buildTypes {release {minifyEnabled true//必须添加以下这句话signingConfig signingConfigs.releaseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}
}

5.(可选)生成的apk名加上当前时间 + 修改apk的发布路径

在build.gradle配置文件下的android配置段下的buildTypes下找到你的编译配置项一般就是release 在release段下面加上如下代码

applicationVariants.all { variant ->variant.outputs.all { output ->def outputFile = output.outputFiledef fileNameif (outputFile != null && outputFile.name.endsWith('.apk')) {if (variant.buildType.name.equals('release')) {//如果是release包fileName = "appname_release_v${defaultConfig.versionName}.apk"} else if (variant.buildType.name.equals('debug')) {//如果是debug包fileName = "appname_debug_v${defaultConfig.versionName}.apk"}outputFileName = fileName}}}

然后在build.gradle配置文件的末尾加上一个方法用来获取当前时间

def releaseTime() {// return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日时分秒
}

示例:

plugins {id 'com.android.application'id 'org.jetbrains.kotlin.android'
}
​
android {compileSdk 32
​defaultConfig {applicationId "com.seagull.test"minSdk 24targetSdk 32versionCode 1versionName "1.0"
​testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"}
​signingConfigs {//签名的配置release {storeFile file("key.jks")storePassword '123456'keyAlias 'key0'keyPassword '123456'}}
​buildTypes {release {minifyEnabled falsesigningConfig signingConfigs.releaseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'applicationVariants.all { variant ->variant.outputs.all { output ->def outputFile = output.outputFiledef fileNameif (outputFile != null && outputFile.name.endsWith('.apk')) {if (variant.buildType.name.equals('release')) {//如果是release包fileName = "test_release_v${defaultConfig.versionName}.apk"} else if (variant.buildType.name.equals('debug')) {//如果是debug包fileName = "test_debug_v${defaultConfig.versionName}.apk"}outputFileName = fileName}}}}}compileOptions {sourceCompatibility JavaVersion.VERSION_1_8targetCompatibility JavaVersion.VERSION_1_8}kotlinOptions {jvmTarget = '1.8'}
}
​
dependencies {implementation 'androidx.core:core-ktx:1.7.0'implementation 'androidx.appcompat:appcompat:1.3.0'implementation 'com.google.android.material:material:1.4.0'implementation 'androidx.constraintlayout:constraintlayout:2.0.4'testImplementation 'junit:junit:4.13.2'androidTestImplementation 'androidx.test.ext:junit:1.1.3'androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
​
def releaseTime() {// return new Date().format("yyyyMMdd", TimeZone.getTimeZone("UTC")) //年月日return new Date().format("yyyyMMdd HH-mm-ss", TimeZone.getTimeZone("GMT+8:00")) //年月日时分秒
}

4.6 构建触发器

可根据实际情况创建,仅示例当gitee发生改变时自动构建:

生成密码并复制

Gitee中只能访问公有ip,无法访问本地的jenkins服务器,因此需要将内网转成外网域名(推荐用内网穿透工具:ngrok)

进入Gitee项目中,点击管理

粘贴链接将内网穿透地址替换掉localhost

点击测试,请求结果为......has been accepted 说明配置成功

注:不要关闭ngrok,穿透地址随机生成重启ngrok会更改地址,本教程仅为示例,建议放到服务器上,避免这种情况发生。

4.7 构建后操作

点击增加构建后操作步骤,选择Archive the artifacts

填入正则表达式路径,匹配用于存档的apk

app/build/outputs/apk/release/*.apk的意思是匹配app/build/outputs/apk/release路径下所有拓展名为.apk的安装包 看这路径是不是很熟悉,其实就是项目路径下apk的输出路径

存档后xxx-release-v1.0.apk就会显示在Jenkins项目最后一次成功的构建结果

参考链接:

Jenkins实现AndroidStudio工程自动化打包(基于Gitee)

Jenkins + Android 入门

Jenkins官方文档

Release打包:

Jenkins打包android应用时自动签名apk详解

Jenkins Android 打包release版本 不能安装

applicationVariants.all更改

Jenkins打包Android apk文件

Android使用Jenkins自动化构建测试打包apk

Windows使用Ngrok进行内网穿透

Jenkins:添加SSH全局凭证

喜欢就点个赞,如有疑问或者错误之处欢迎评论

海鸥Seagull@wbacbc 暂未发布到其他平台,转载请注明出处

Jenkins实现AndroidStudio工程自动化打包(基于Gitee)2022新手入门最简单细致教程相关推荐

  1. win10 jenkins svn android studio 自动化打包教程 以及一些问题的解决办法

    win10 jenkins svn android studio 自动化打包教程 这两天搭建jenkins自动构建环境,中间遇到点坑坑洼洼 分享出来希望后来人少走些弯路 准备软件 jenkins.ms ...

  2. Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传

    Xcode + cocoapods + jenkins + fastlane + git + 蒲公英自动化打包 上传 构建自动化步骤为: 1. Xcode 有Xcode 内部提供的打包命令来打包完成代 ...

  3. 手把手教你配置:Jenkins+Github+Webhook +Nginx自动化打包部署Vue项目

    前面的话 为了前端项目的工程化,减少项目发布环境的部署,实现自动化打包部署. 传统的做法,在服务器初始一个 git 仓库,然后每次代码更新后,手动去拉取,次数多了也就烦了,而自动化打包部署每次只需在项 ...

  4. VS2013基于对话框的MFC串口通信简单案例教程

    本例程是在VS2013环境下,使用MFC做的是一个简单的串口通信程序. 虚拟的串口软件工具下载地址:https://pan.baidu.com/s/1D-oddZk3Z_ioXBUpXE7ksw 密码 ...

  5. 基于Gitee搭建免费图床

    基于Gitee搭建免费图床 1.为什么要基于Gitee搭建免费图床 ​ 简单讲,主要是因为大家熟悉的免费图床各有不足之处.例如:七牛云回收了测试域名,配置自定义域名需要绑定主机(参考:[教程]使用gi ...

  6. 基于 Gitee 搭建个人网站-入门教程

    免费开源项目,震撼上线,提供完整文档,欢迎各位股东:SpringBoot+VUE https://gitee.com/rodert/liawan-vue 前言 这是一篇基于Gitee搭建个人网站的保姆 ...

  7. Jenkins+Gradle+Python进行Android自动化打包

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能.本文要讲的内容是通过Jenkins进行Andr ...

  8. iOS开发-自动化打包Jenkins集成

    前言 自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给机器去做.Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件 ...

  9. 【游戏开发进阶】教你Unity通过Jenkins实现自动化打包,打包这种事情就交给策划了(保姆级教程 | 命令行打包 | 自动构建)

    文章目录 一.前言 二.Jenkins简介 三.Jenkins的下载与安装 1.JDK下载与安装 2.Jenkins下载 3.Jenkins安装 4.Jenkins初始化 四.Jenkins的基本操作 ...

最新文章

  1. SQL Server:定时作业的设置方法
  2. jQuery:收集一些基于jQuery框架开发的控件/jquery插件2
  3. python基础复习
  4. BZOJ 1815: [Shoi2006]color 有色图 [Polya DFS 重复合并]
  5. 源码注释性容器的创建及初始化
  6. nodeJs 是什么?你需要先想清楚这个问题,才能学习nodejs (介绍)
  7. 修改6S Fortran77 代码,建立查找表
  8. python判断矩阵是否对称_Python创建对称矩阵的方法示例【基于numpy模块】
  9. DOS命令、Java语言开发环境(JVM、JDK、JRE)
  10. 使用Cygwin登录Raspberry PI
  11. Perceptron实践
  12. npm下载地址的查询与切换
  13. 【好书推荐】-你的灯亮着吗?
  14. 【复】基于 WebRTC 的音视频在线监考模块的设计与实现(下)
  15. 初一计算机在线应用,初中计算器_求:计算器(初中数学七年级)在线使用_淘题吧...
  16. 【学习笔记】Arduino uno r3 控制led灯闪烁
  17. html5在线聊天插件,纯js网页在线聊天对话插件(原创)
  18. 工具类之十七 基于zxing的二维码生成工具类
  19. PHP获取自然周始末时间
  20. 【嵌入式应用4】ROS话题编程

热门文章

  1. Win10家庭版找不到gpedit.msc文件的解决办法
  2. oracle上移下移置顶,[置顶]       阅读Oracle官方文档指南
  3. Tomcat日志中文乱码问题处理
  4. AnimeGAN a novel lightweight GAN for photo animation
  5. 还记得Logo语言吗
  6. 第七课 淘宝客站群赚钱详解
  7. 爆肝七天!终于把分布式系统架构整理出来了
  8. 如何使用Mega cc
  9. 不动点理论在计算机科学中的应用,不动点定理及应用(高考).doc
  10. Sketch v86 for mac有哪些新的改进?