使用 Jenkins 实现Android自动化打包和踩坑经历

2023-10-30

每当有项目做的过程中,测试需要做单元测试,每次手动的切换生产和测试环境,切换各种推送、统计和第三方账号相当的麻烦,同时还需要暂存代码,切换分支深的太过繁琐。此时如果将项目配置自动化打包了,那么就可以将这些问题解决了。我们来看一下Jenkins的配置流程。

1.下载 Jenkins

Jenkins 官网下载地址:https://jenkins.io/download/,选择你电脑对应你的操作系统的版本
Jenkins 下载截图

2.安装 Jenkins 

 下载后直接安装就行,下一步就行。安装好你的默认浏览器会自动弹出窗口链接:http://localhost:8080
入门

如图,路径都给了就不用多说了,找到对应文件把里面的密码复制粘贴上去。继续。
新手入门 

安装插件。我们只用到2个插件,选择安装就好了。找到Gradle和Git,勾选后安装,相关的依赖插件会自动安装的。
下面几步就不截图了,并不是必要过程。
然后会让你创建管理员账号,选择继续使用admin就行。
继续,让你配置路径,也跳过就行。
已就绪,开始使用。
说明:如果上述安装插件的地方你没有安装需要的Gradle和Git插件,你也可以进入 Jenkins 环境页面后选择[系统管理] - [管理插件] - [可选插件],然后去找/搜到对应插件安装。

特别注意:这里就是本地配置一下试试,服务器上肯定是该创建账号、配置路径、安装需要的别的插件balabala。

3.配置 Jenkins

全局工具配置

配置需要的插件信息 配置JDK、Git、Gradle:
配置JDK信息

我的JDK路径当初安装的时候不规范,打码是为了防止误导。
Git配置 

 Git貌似不能自动安装,貌似默认的不改动也能用。有兴趣可以试试。
Gradle配置

Gradle配置同上,没啥好说的。
划重点 -- Android SDK需要另行配置,见下图
系统配置 

环境变量
[系统管理] - [系统设置] - [全局属性] - [环境变量],对应图去找,添加环境变量,键为“ANDROID_HOME”,值指向SDK目录。
以上,配置完成。

4.新建任务并配置 

新建任务
自由风格

 选择自由风格,确定。
基本信息
基本信息里点击右下角高级有个“使用自定义的工作空间”,勾选可以指定目录,不勾选默认在 Jenkins 安装目录下的 “workspace” 文件夹里。

源码管理
源码管理选择Git,URL填入你的项目地址,没有认证的时候会报错,点击图中圈出的“Add”,弹出下图:
Add

添加凭证后下拉选择对应凭证,如果正确则不会报错,同时下方展示检出分支。默认master分支,可以自己看情况指定某分支。
构建触发器不用管。
构建 

构建2
Tasks是构建执行的语句,一般都是“app:clean app:assembleRelease”,先clean再build。
构建后操作看需求,可以实现自动上传apk到蒲公英/fir、邮件通知等等。

5.构建

构建

点击立即构建后会出现下图进度展示条。
构建后进度条
成功失败
蓝色正常,build成功。红色表明构建失败,鼠标移动右侧有个向下箭头,点击展开选项,点击控制台输出可以查看错误。

6.参数化构建 

构建时可选参数,这样就可以打出不同参数的包。比如不同baseUrl。
参数化构建

[添加参数] - [选项参数],或者你愿意用某种参数都行。
选项参数
参数化构建配置上了,需要在构建时将参数映射到代码中,如下图: 

导入代码
以上, Jenkins 上的参数化构建配置完成。我们还需要在代码中接收该参数。
参数会映射到gradle.properties文件中的对应参数名,我们先在该文件中定义一个参数并赋默认值:

baseUrl = "http://qa-xxxxxx.com/api/"

然后在build.gradle中获取该参数并添加到BuildConfig.java中:

......
android {
	......
    defaultConfig {
	    ......
        buildConfigField "String", "baseUrl", baseUrl
    }
	......
}
......

BuildConfig.java
代码中可以直接获取该参数:BuildConfig.baseUrl
以上配置后,项目会有所变化:

Build with Parameters

遇到的坑 

一。AAPT error

错误日志1

错误提示:java.util.concurrent.ExecutionException: com.android.builder.internal.aapt.v2.Aapt2Exception: AAPT error: check logs for details
百度的解决方案有三种,一是说在gradle.properties中加入代码android.enableAapt2=false,二是说统一各module的compileSdkVersion、buildToolsVersion、minSdkVersion、targetSdkVersion等,三就是更不相干的东西了。
这里我要说一下,各位的代码本地肯定都是跑过的,编译打包都正常,只是上了 Jenkins 才报了这个错,这三个解决方案都站不住脚啊!理论上不应该是代码里的啥问题啊!!
最后在某不存在的搜索引擎找到个说法,Gradle路径太长了导致编译错误balabala……
其实仔细看错误日志,会发现那一串错误都是好长的路径(共同点),所以这个说法比较靠谱。

GRADLE_USER_HOME

项目设置里的构建处,点击右下角高级,找到下方此选项打勾。
再次构建,BUILD SUCCESSFUL。

二。aidl is missing

问题发生在我部署到服务器的时候,先是提示说少build-tools,然后说少对应版本的sdk,挨个上传服务器sdk目录。然后就报了这个错。但是本地都是正常的,sdk没问题,没理由到服务器上就不行了啊。
这里我要谴责一下运维同事,他坚定的告诉我服务器上的sdk是从另一个Android同事那里copy上传的(windows),但后来发现是他自己down的(linux)。找该Android同事询问,得到的回复是“我不知道啊”、“你百度看看”。:)
折腾了很久才定位到这个问题,服务器是Linux环境,本地是Windows环境,sdk是分版本的。不同版本的sdk下的文件不一致,导致错误。

以上就是Jenkins配置的过程,以及在配置过程中遇到的问题,自动化配置就算完成了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Jenkins 实现Android自动化打包和踩坑经历 的相关文章

随机推荐

  • Java之完全链式编程

    Java8的Stream操作方式实在令人心驰神往 不需要注释就能看懂的链式操作 十分简约和雅观 但是在实际编码过程中对于非集合操作是无法做到链式操作的 于是就有了一下操作 虽然功能还不够全面 但是先开源出来 有了更好的操作也请大家遵循开源精
  • 时间序列预测框架--Darts--快速开始(下)

    协变量 用额外的数据 除了目标系列 我们有兴趣预测的系列 dart中的许多模型也在输入中接受协变量系列 协变量是我们不想预测的序列 但它可以为模型提供有用的额外信息 目标变量和协变量都可以是多变量或单变量 dart中有两种协变量时间序列 p
  • 不错的安全培训(在线)

    不错的安全培训 在线 https mile2 com mile2 online estore training videos html http www sans org course reverse engineering malware
  • css属性

    02 CSS属性 2 1 文本 作用 用于定义文本的外观 包括文本颜色 行高 对齐方式 字符间距等 常见属性 属性名 含义 color 设置文本颜色 line height 设置行高 text align 设置水平对齐方式 left rig
  • MyEclipse中文乱码,编码格式设置,文件编码格式

    一 设置新建常见文件的默认编码格式 也就是文件保存的格式 在不对MyEclipse进行设置的时候 默认保存文件的编码 一般跟简体中文操作系统 如windows2000 windowsXP 的编码一致 即GBK 在简体中文系统下 ANSI 编
  • 使用swc 替换ts-loader 加速构建webpack + vue3 + tsx项目

    环境 webpack 5 74 0 swc core 1 3 11 babel core 7 19 1 vue 2 7 10 使用swc编译ts tsx代码 根据swc官网文档 swc core SWC我们可以用swc loader 替换
  • Spring Boot框架基础介绍

    Spring Boot 是一款基于 Spring 框架的开源应用程序开发工具 它旨在简化 Spring 应用程序的配置和开发过程 Spring Boot 提供了一种简单的方式来创建可独立运行的 生产级别的应用程序 并在需要时进行部署 Spr
  • PHP获取网络图片保存到本地

    PHP获取网络图片保存到本地 if fopen dg image r php判断图片是不是网络图片 filename upload goods image g id jpg if file exists filename dg image
  • Win10中使用Hyper-V安装Ubuntu18.04、实现ssh远程连接及Hpyer-V中Ubuntu全屏问题

    利用Windows10自带的虚拟机Hyper V安装Ubuntu18 04 并实现配置主机通过ssh连接Hpyer V中Ubuntu虚拟机 同时解决Ubuntu虚拟机在Hpyer V全屏时不能铺满屏幕的问题 首先安装Hyper V 打开Wi
  • hexo博客优化之文章置顶+置顶标签

    本文首发于wangwlj com 博文置顶 一种方法是手动对相关文件进行修改 具体可参考这篇文章 另一种方法就是 目前已经有修改后支持置顶的仓库 可以直接用以下命令安装 npm uninstall hexo generator index
  • 剑指Offer—— 链表的公共点

    题目表述 输入两个链表 找出它们的第一个公共结点 首先要明白一点 两条链表相交 则他们的形状类似Y 而不是X 所以 从相交的点以后 两条链表的所有结点都是一样的 我们只要找出第一个相同的结点即可 1 我们分别算出两条链表的长度 2 算出两条
  • 用AI配置一台高性能电脑

    首先 并没有什么性价比很高的台式机 这个前提肯定是要有参考物的 比如你要用这个电脑主要是干嘛的 办公的 打游戏的 其次是预算了 我是打游戏的 你给我配一台办公的 办公的肯定性价比高 便宜 但并不符合我实际的需求 例 游戏电脑配置清单 i5
  • Makefile中的匹配符%

    一 匹配符 Make命令允许对文件名 进行类似正则运算的匹配 主要用到的匹配符是 比如 假定当前目录下有 f1 c 和 f2 c 两个源码文件 需要将它们编译为对应的对象文件 o c 等同于下面的写法 f1 o f1 c f2 o f2 c
  • 浏览器查找js绑定或者监听的事件

    1 打开浏览器审核模式 2 选择源代码 3 最右边有个事件监听断点 4 以触摸模式为例 如果代码中有监听触屏事件 移动的时候就会触发相关js代码 并找到位置
  • Linux线程介绍(Linux 系统编程)

    进程与线程 典型的UNIX Linux进程可以看成只有一个控制线程 一个进程在同一时刻只做一件事情 有了多个控制线程后 在程序设计时可以把进程设计成在同一时刻做不止一件事 每个线程各自处理独立的任务 进程是程序执行时的一个实例 是担当分配系
  • 性能测试必备监控技能windows篇

    前言 在手头没有专门的第三方监控时 该怎么监控服务指标呢 本篇就windows下监控进行分享 也是我们在进行性能测试时 必须掌握的 下面我们就windows下常用的三种监视工具进行说明 任务管理器 资源监视器 性能监视器 在 开始 gt 开
  • 分页、关联查询优化

    文章目录 一 分页查询示例 1 分页查询优化 1 1 根据自增且连续的主键排序的分页查询 1 2 根据非主键字段排序的分页查询 二 Join关联查询优化 1 Join关联查询示例表 2 常见表关联算法 2 1 嵌套循环连接 Nested L
  • 跟据经纬度实现附近搜索

    现在很多手机软件都用附近搜索功能 但具体是怎么实现的呢 在网上查了很多资料 mysql空间数据库 矩形算法 geohash我都用过了 当数据上了百万之后mysql空间数据库方法是最强最精确的 查询前100条数据只需5秒左右 接下来推出一个原
  • IIS设置连接超时

    连接超时有助于减少由空闲连接消耗的处理资源损失 启用连接超时时 IIS 会在连接级别执行以下类型的连接超时 客户端已向服务器发送了数据 现处于空闲状态造成的连接超时 已建立了与服务器的连接 但客户端未发送数据时造成的服务器侦听超时 响应超时
  • 使用 Jenkins 实现Android自动化打包和踩坑经历

    每当有项目做的过程中 测试需要做单元测试 每次手动的切换生产和测试环境 切换各种推送 统计和第三方账号相当的麻烦 同时还需要暂存代码 切换分支深的太过繁琐 此时如果将项目配置自动化打包了 那么就可以将这些问题解决了 我们来看一下Jenkin