Android编译环境构建(二)(可用于物理机、虚拟机、容器化Jenkins环境)
文章目录
- 需求
- 环境要求
- 文件下载
- Gradle Version:7.5
- cmdline-tools
- 至此普通物理环境的Android编译环境已部署完毕
- 部署maven(可选)
- Jenkins配置Android构建环境
说明:
物理环境:物理机、虚拟机等
容器化环境:docker等
需求
Gradle Version:7.5 # 必需项,用于开源构建自动化工具
cmdline-tools # 必需项,SDK 管理器,用于下载SDK、Build-Tools
Android SDK 35 # 必需项,Software Development Kit,软件开发工具包
Build-Tools 35 # 必需项,Android项目构建工具
platform-tools # 必需项,SDK 平台工具
ndkVersion:21.4.7075529 # 非必需项,Native Development Kit,本地开发工具包
apache-maven-3.9.9 # 非必需项,此次为Android编译环境构建
环境要求
JDK17:由于新版SDK只能够使用cmdline-tools下载,而官网提供最版的cmdline-tools又需要JDK17的环境
这里默认已经准备好了JDK17环境
文件下载
Gradle Version:7.5
可参考:https://developer.aliyun.com/article/1377971
所有版本下载地址:https://gradle.org/releases/
- 下载
-
下载方法一(推荐):
Windows内下载完后上传到Linux服务器中,以7.5版本为例
打开下载地址后,找到你需要的版本,点击对应版本中Download: binary-only or complete (checksums)中的"complete",即可开始下载
若Linux服务器中没有解压程序,建议在Windows中解压出来后再将整个文件夹上传至Linux服务器指定的目录中 -
下载方法二:
Linux内下载并解压
将下载方法一中的下载地址复制粘贴
注意:需要已安装unzip,否则无法解压
# 使用curl下载
curl -o /tmp/ https://github.com/gradle/gradle-distributions/releases/download/v7.5.0/gradle-7.5-all.zip
# 使用wegt下载
wget -P /tmp/gradle-7.5-all.zip https://github.com/gradle/gradle-distributions/releases/download/v7.5.0/gradle-7.5-all.zip#将下载好的压缩包解压至 /opt/ 目录中
unzip /tmp/gradle-7.5-all.zip -d /opt/
- 准备文件
我这边已将Gradle-7.5文件夹上传到了Linux服务器中的 /opt/ 目录下
- 对于容器化环境部署的Jenkins,需要多执行一步,物理环境则不需要执行该步骤
将gradle-7.5从Linux服务器中,复制粘贴到容器中
# docker cp Gradle目录路径 Jenkins所在容器名称(或ID):容器内存放Gradle的目录路径
docker cp /opt/gradle-7.5/ jenkins_new:/opt/
Gradle-7.5目录构成如下:
root@bdf796726e0a:/# ls -l /opt/gradle-7.5/
total 60
-rw-r--r-- 1 root root 23606 Jan 31 1980 LICENSE
-rw-r--r-- 1 root root 868 Jan 31 1980 NOTICE
-rw-r--r-- 1 root root 976 Jan 31 1980 README
drwxr-xr-x 2 root root 4096 Jan 31 1980 bin
drwxr-xr-x 5 root root 4096 Jan 31 1980 docs
drwxr-xr-x 2 root root 4096 Jan 31 1980 init.d
drwxr-xr-x 3 root root 12288 Jan 31 1980 lib
drwxr-xr-x 93 root root 4096 Jan 31 1980 src
- 配置环境变量,物理环境执行,容器化环境无需执行
vi /etc/profile# 在文件末尾添加
export GRADLE_HOME=/opt/gradle-7.5
export PATH=$GRADLE_HOME/bin:$PATH# 刷新环境变量
source /etc/profile# 测试是否安装成功,有版本输出则为成功
gradle -v
cmdline-tools
sdkmanager
打开网页后,在最下方找到仅限命令行工具,点击下载Linux版的
下载页面:https://developer.android.com/studio?hl=zh-cn
使用文档页面:https://developer.android.com/tools/sdkmanager?hl=zh-cn
若下方命令下载失败,可进入platform-tools下载页面单独下载platform-tools:
https://developer.android.com/tools/releases/platform-tools?hl=zh-cn#downloads.html
- 目录准备
# Linux 服务器新建android-sdk目录
mkdir -P /opt/android-sdk在Windows中解压出来后再将整个cmdline-tools文件夹上传至Linux服务器的 /opt/android-sdk/ 目录中# 在Linux服务的cmdline-tools目录中新建latest目录,并将目录内容移动到新建的latest目录中
mkdir -P /opt/android-sdk/cmdline-tools/latest # 创建latest目录
cd /opt/android-sdk/cmdline-tools/ # 进入cmdline-tools目录
mv bin/ lib/ NOTICE.txt source.properties -t latest/ # 将原始 cmdline-tools 目录内容(包括 lib 目录、bin 目录、NOTICE.txt 文件和 source.properties 文件)移动到新创建的 latest 目录中
- 下载程序
# 查询可用sdk build-tools等工具列表,--channel=0 代表Stable 稳定版
/opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --list --channel=0# 下载Android SDK 35 Build-Tools 35
/opt/android-sdk/cmdline-tools/latest/bin/sdkmanager --sdk_root=/opt/android-sdk "platform-tools" "platforms;android-35" "build-tools;35.0.0" "ndk;21.4.7075529"# 核对文件,下载完成后应该会有以下目录
ls -l /opt/android-sdk/
total 32
drwxr-xr-x 4 root root 4096 Oct 29 09:59 build-tools
drwxr-xr-x 3 root root 4096 Oct 28 06:52 cmdline-tools
drwxr-xr-x 8 root root 4096 Oct 29 09:59 emulator
drwxr-xr-x 2 root root 4096 Oct 28 07:46 licenses
drwxr-xr-x 3 root root 4096 Oct 28 07:49 ndk
drwxr-xr-x 3 root root 4096 Oct 28 08:03 platform-tools
drwxr-xr-x 5 root root 4096 Oct 29 10:00 platforms
drwxr-xr-x 6 root root 4096 Oct 29 09:59 tools
- 配置环境变量,物理环境执行,容器化环境无需执行
vi /etc/profile# 在文件末尾添加
export ANDROID_HOME=/opt/android-sdk
export PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin
export PATH=$PATH:$ANDROID_HOME/platform-tools
export NDK=/opt/android/ndk/21.4.7075529/
export PATH=${PATH}:$NDK# 刷新环境变量
source /etc/profile# 测试是否安装成功,有版本输出则为成功
adb --version
至此普通物理环境的Android编译环境已部署完毕
4 拷贝程序到容器中,物理环境无需执行,容器化环境执行
将android-sdk从Linux服务器中,复制粘贴到容器中
# docker cp android-sdk目录路径 Jenkins所在容器名称(或ID):容器内存放android-sdk的目录路径
docker cp /opt/android-sdk/ jenkins_new:/opt/
部署maven(可选)
-
下载
官网地址:https://maven.apache.org/download.cgi
下载 apache-maven-3.9.9-bin.zip
按照上面安装gradle的方法,将压缩包上传到Linux服务器 /opt/ 目录中 -
配置环境变量,物理环境执行,容器化环境无需执行
vi /etc/profile# 在文件末尾添加
export M2_HOME=/opt/apache-maven-3.9.9
export PATH=$PATH:$M2_HOME/bin# 刷新环境变量
source /etc/profile# 测试是否安装成功,有版本输出则为成功
mvn -version
- 拷贝程序到容器中,物理环境无需执行,容器化环境执行
将apache-maven-3.9.9从Linux服务器中,复制粘贴到容器中
# docker cp maven目录路径 Jenkins所在容器名称(或ID):容器内存放maven的目录路径
docker cp /opt/apache-maven-3.9.9/ jenkins_new:/opt/
Jenkins配置Android构建环境
- 配置JDK
路径:系统管理 > 全局工具配置 > JDK 安装
配置完成后,点击保存
配置如图:

- 配置Gradle
路径:系统管理 > 全局工具配置 > Gradle 安装
配置完成后,点击保存
配置如图:

- 配置android SDK、NDK
路径:系统管理 > System > 全局属性
勾选环境变量,配置完成后,点击保存
配置如图:

- 配置Maven(可选)
路径:系统管理 > 全局工具配置 > Maven 安装
配置完成后,点击保存

相关文章:
Android编译环境构建(二)(可用于物理机、虚拟机、容器化Jenkins环境)
文章目录 需求环境要求文件下载Gradle Version:7.5cmdline-tools至此普通物理环境的Android编译环境已部署完毕 部署maven(可选)Jenkins配置Android构建环境 说明: 物理环境:物理机、虚拟机等 容器化环境:docker等 需求 Gradle Version:7.5 …...
Web服务器(实验)
目录 nginx实验1(快速建站)实验2(更换默认网页目录)实验3(内网穿透花生壳)实验4(综合nginx)实验5(基于不同IP的虚拟主机网站)实验6(基于不同端口号…...
【湖南-常德】《市级信息化建设项目初步设计方案编制规范和支出预算编制标准(试行)》-省市费用标准解读系列05
《市级信息化建设项目初步设计方案编制规范和支出预算编制标准(试行)》(常行审 〔2023〕7号)标准是湖南省常德市行政审批服务局、常德市财政局2023年12月29日发布的费用标准(了解更多可直接关注我们咨询)。…...
微信小程序 https://pcapi-xiaotuxian-front-devtest.itheima.net 不在以下 request 合法域名
微信小程序在调用接口的时候出现以上报错,接口没有问题,是因为小程序自动校验了合法域名 打开本地设置: 勾选不校验合法域名,即可 效果如下:...
vue什么时候渲染旧的VDOM,什么时候渲染新的VDOM
在 Vue 中,决定渲染旧的 VDOM 还是新的 VDOM 的关键在于组件的数据变化和 Vue 的响应式系统。一些常见的情况可以帮助理解这个过程: 1. 渲染新 VDOM 的情况 数据变化:当组件的响应式数据(如 data、props 或计算属性)发…...
【Qwen2技术报告分析】从模型架构 数据构建和模型评估出发
目录 前言 一、Tokenizer 二、模型结构 dense模型 MoE模型 模型参数设置 三、Pre-Training Pre-Training DATA LONG-CONTEXT TRAINING 四、Post-Training Post-Training DATA 人工数据注释(collaborative data annotation) 自动数据合成&a…...
Naive UI 选择器 Select 的:render-option怎么使用(Vue3 + TS)(鼠标悬停该条数据的时候展示全部内容)
项目场景: 在渲染select选择器后,当文字过长的时候,多出来的部分会显示成省略号,这使我们不能很清晰的看到该条数据的完整信息,就需要加一个鼠标悬停展示完整内容。 解决方案: vue代码: <n…...
使用Mac如何才能提高OCR与翻译的效率
OCR与截图大家都不陌生,或许有的朋友对于这两项功能用到的不多,但是如果经常会用到的话,那你就该看看了 iOCR,快捷键唤出翻译窗口,不论是截图翻译、划词翻译、输入翻译、剪切板翻译,统统快捷键完成&#x…...
QML----复制指定下标的ListModel数据
我现在有一个写好的listmodel,我需要从里边抽取35个数据作为展示 头文件 #ifndef GETONEPAGESIZEMEMBERLISTMODEL_H #define GETONEPAGESIZEMEMBERLISTMODEL_H#include <QObject> #include <QAbstractListModel> #include <QDebug> #include "mylistm…...
CSS Text(文本)
CSS Text(文本) CSS Text 是一种用于控制网页中文本显示样式的技术。通过使用 CSS Text 属性,开发者可以轻松地调整文本的字体、大小、颜色、对齐方式等,从而实现更加美观和个性化的网页设计。本文将详细介绍 CSS Text 的各种属性及其应用方法。 一、字体属性 1. font-fam…...
聊一聊Spring中的@Transactional注解【下】【注解失效场景】
前言 尽管 Transactional 注解在 Spring 中提供了方便的事务管理功能,我们在使用过程中却常常面临其失效的问题。事务失效可能导致意想不到的数据状态和错误,影响应用的稳定性和可靠性。本文将探讨一些常见的 Transactional 失效场景,包括异常…...
对称加密与非堆成加密
http通信有一些什么问题 窃听 - 对称加密传递密钥 - 非对称加密安全速度 - 非对称加密 对称加密中间人攻击 - 证书证书伪造 - 消息摘要摘要伪造 - 数字签名 可能被窃听 http本身不具备加密功能,http报文使用明文方式发送 还可能存在验证问题 无法确认发送到的…...
江协科技STM32学习- P28 USART串口数据包
🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝…...
Linux脚本循环(for、while、until)
文章目录 for基础风格for列表风格for与seq组合for与大括号for循环处理脚本参数组合命令while基础while数字累加utilcontinue for基础风格 这种风格最像高级程序中的for循环 #!/bin/bashfor(( i0; i<10; i )) doecho "第$i次for循环" donefor列表风格 #!/bin/ba…...
文件系统上云的挑战
优质博文:IT-BLOG-CN 一、挑战/注意事项 【1】因文件系统HDFS没有关联信息OrderId等,不能对存量数据进行有策略的同步,因此目前是将所有的文件同步至云服务器SIN; 【2】海外数据和国内数据上传到各自的文件服务器后,…...
【北京迅为】《STM32MP157开发板嵌入式开发指南》-第七十一章 制作Ubuntu文件系统
iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…...
中间件漏洞总结
参考:Tomcat漏洞详解-CSDN博客 tomcat 历史漏洞 阿里云漏洞库 (aliyun.com) 弱口令和war远程部署漏洞 弱口令 Tomcat8.* 登录页面:/manager/html 弱口令:tomcat/tomcat 后台Getshell 登录到后台后可以通过部署 war 包进行 getshell wa…...
PySpark Yarn集群模式
目录 简介 一、PySpark简介 二、YARN模式概述 三、配置环境 1. 安装与配置Spark 2. 配置Hadoop和YARN 3. 启动yarn 四、编写PySpark脚本 五、提交PySpark作业到YARN 参数解释: 六、常见问题及解决 七、总结 简介 随着大数据的普及,Spark作为…...
Matlab基于经纬度点并行提取指定日期的tiff栅格位置的值
文章目录 前言一、基本说明二、代码 前言 该 MATLAB 代码用于从 GeoTIFF 文件中提取基于特定地理位置(经纬度)和日期的某个点的相关数据。代码首先读取一个包含事件数据(日期、经纬度)的 Excel 文件,然后根据日期和位…...
npm入门教程19:npm包管理
一、代码更新 遵循语义化版本控制: 在更新包时,应遵循语义化版本控制(Semantic Versioning,简称SemVer)规范。这意味着版本号的变更应反映代码变更的程度,通常遵循主版本号.次版本号.修订号的格式。主版本号…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
【Go语言基础【12】】指针:声明、取地址、解引用
文章目录 零、概述:指针 vs. 引用(类比其他语言)一、指针基础概念二、指针声明与初始化三、指针操作符1. &:取地址(拿到内存地址)2. *:解引用(拿到值) 四、空指针&am…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...
Netty自定义协议解析
目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...
IP选择注意事项
IP选择注意事项 MTP、FTP、EFUSE、EMEMORY选择时,需要考虑以下参数,然后确定后选择IP。 容量工作电压范围温度范围擦除、烧写速度/耗时读取所有bit的时间待机功耗擦写、烧写功耗面积所需要的mask layer...
