使用GitHub Actions实现Android自动打包apk

article/2025/10/13 12:39:10

记录一下,免得忘了
实现根据tag自动打包并上传至release

官方文档

workflow

name: Android CI# 触发器
on:push:tags:- v*pull_request:tags:- v*jobs:build:runs-on: ubuntu-latest# 设置jdk环境为1.8steps:- uses: actions/checkout@v2- name: set up JDK 1.8uses: actions/setup-java@v1with:java-version: 1.8# 获取打包秘钥- name: Checkout Android Keystoreuses: actions/checkout@v2with:repository: 存储android打包用的key的仓库(格式:用户名/仓库名)token: ${{ secrets.TOKEN }} # 连接仓库的token,需要单独配置path: keystore # 仓库的根目录名# 打包release- name: Build with Gradlerun: bash ./gradlew assembleRelease# 创建release- name: Create Releaseid: create_releaseuses: actions/create-release@v1env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}#GitHub 会自动创建 GITHUB_TOKEN 密码以在工作流程中使用。 #您可以使用 GITHUB_TOKEN 在工作流程运行中进行身份验证。#当您启用 GitHub Actions 时,GitHub 在您的仓库中安装 GitHub 应用程序。 #GITHUB_TOKEN 密码是一种 GitHub 应用程序 安装访问令牌。 #您可以使用安装访问令牌代表仓库中安装的 GitHub 应用程序 进行身份验证。 #令牌的权限仅限于包含您的工作流程的仓库。 更多信息请参阅“GITHUB_TOKEN 的权限”。#在每个作业开始之前, GitHub 将为作业提取安装访问令牌。 令牌在作业完成后过期。with:tag_name: ${{ github.ref }}release_name: Release ${{ github.ref }}draft: falseprerelease: false# 获取apk版本号- name: Get Version Nameuses: actions/github-script@v3id: get-versionwith:script: |const str=process.env.GITHUB_REF;return str.substring(str.indexOf("v"));result-encoding: string# 上传至release的资源- name: Upload Release Assetid: upload-release-asset uses: actions/upload-release-asset@v1env:GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}with:upload_url: ${{ steps.create_release.outputs.upload_url }} # 上传网址,无需改动asset_path: app/build/outputs/apk/release/app-release.apk # 上传路径asset_name: LightTimetable-${{steps.get-version.outputs.result}}.apk # 资源名asset_content_type: application/vnd.android.package-archiv #资源类型# 存档打包的文件- name: Archive production artifactsuses: actions/upload-artifact@v2with:name: buildpath: app/build/outputs #将打包之后的文件全部上传(里面会有混淆的map文件)

创建保存打包秘钥的私有仓库

仓库里保存以下两个文件
仓库内容
key.jks是秘钥文件

keystore.properties

storePassword=创建秘钥时的key store密码
keyPassword=创建秘钥时的key密码
keyAlias=秘钥别名
storeFile=../keystore/key.jks

将两个文件上传至新仓库
在这里插入图片描述

配置release打包签名

在Android项目中获取秘钥

git submodule add 秘钥仓库地址 keystore

在项目根目录下新建version.properties文件,用于保存版本号

version.properties
versionName=1.0.0
versionCode=28
配置gradle
// 读取前面配置的keystore.properties
def keyProps = new Properties()
def keyPropsFile = rootProject.file('keystore/keystore.properties')
if (keyPropsFile.exists()) {keyProps.load(new FileInputStream(keyPropsFile))
}// 读取version.properties
def versionProps = new Properties()
def versionPropsFile = rootProject.file('version.properties')
if (versionPropsFile.exists()) {versionProps.load(new FileInputStream(versionPropsFile))
}android {compileSdkVersion 30buildToolsVersion "30.0.2"defaultConfig {versionCode versionProps['versionCode'].toInteger()versionName versionProps['versionName']}// 签名signingConfigs {release {keyAlias keyProps['keyAlias']keyPassword keyProps['keyPassword']storeFile keyProps['storeFile'] ? file(keyProps['storeFile']) : nullstorePassword keyProps['storePassword']}}buildTypes {release {signingConfig signingConfigs.release //配置签名文件}}
}

配置好之后可以用打包命令./gradlew assembleRelease测试是否配置正确

配置连接私有秘钥仓库的token

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

将生成的秘钥保存在仓库的Secrets中,名称为TOKEN
在这里插入图片描述

gradle task自动升级版本号

会自动升级版本号,打tag,然后推送至github然后,github会开始自动构建

task upgradeVersion {group 'help'description '构建新版本'doLast {println("---自动升级版本号---\n")def versionProps = new Properties()def versionPropsFile = rootProject.file('version.properties')if (versionPropsFile.exists()) {versionProps.load(new FileInputStream(versionPropsFile))}String oldVersionCode = versionProps['versionCode']String oldVersionName = versionProps['versionName']if (oldVersionCode == null || oldVersionName == null ||oldVersionCode.isEmpty() || oldVersionName.isEmpty()) {println("error:版本号不能为空")return;}versionProps['versionCode'] = String.valueOf(versionProps['versionCode'].toInteger() + 1)String str = versionProps['versionName'].toString()versionProps['versionName'] = str.substring(0, str.lastIndexOf('.') + 1) +(str.substring(str.lastIndexOf('.') + 1).toInteger() + 1)String tip ="版本号从$oldVersionName($oldVersionCode)升级到${versionProps['versionName']}(${versionProps['versionCode']})"println(tip)def writer = new FileWriter(versionPropsFile)versionProps.store(writer, null)writer.flush()writer.close()def tag = "v${versionProps['versionName']}"cmdExecute("git pull")cmdExecute("git add version.properties")cmdExecute("git commit -m \"版本号升级为:$tag\"")cmdExecute("git push origin")cmdExecute("git tag $tag")cmdExecute("git push origin $tag")}
}void cmdExecute(String cmd) {println "\n执行$cmd"println cmd.execute().text
}

运行task
在这里插入图片描述


http://chatgpt.dhexx.cn/article/Kk8mybFH.shtml

相关文章

VSCode中使用github

目录 一、VSCode下载安装 二、Git下载安装 三、在VSCode中用Git生成ssh密钥 1)添加GitHub用户名和邮箱: 2)生成ssh密钥: 四、在Github中添加ssh密钥 1)在github个人主页,点击右上角, 然后点击Settin…

作为研发如何使用Github Api?

文章目录 使用步骤账号创建进行开发者相关设置API操作演示Github API好处推荐的Github API 🌟个人主页: 个人主页 🚵‍♀️个人介绍:每天进步一点点,生活变得好一点点。 📌作为一位开发,不管是非工作的还是工作中的人士…

Ubuntu上使用GitHub的步骤

文章目录 前言一、在Ubuntu上安装Git二、git clone: 把远程库克隆到本地三、开始使用:常用操作1.本地修改后同步到远程库(1)git add(2)git commit(3)git push 2. 从远程库获取最新版本的代码 前…

如何使用 GitHub?

作者:GitHubPorn 链接:https://www.zhihu.com/question/20070065/answer/1879847761 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 这题我会呀!我用两万字加一百张图片从头到尾…

人工智能简史(Rockwell Anyoha )

一、机器会思考吗? 20世纪上半叶,科幻小说让世界熟悉了人工智能机器人的概念。它从《绿野仙踪》中的“无情”铁皮人开始,然后是在大都会模仿玛丽亚的人形机器人。到 1950 年代,我们有一代科学家、数学家和哲学家,他们的…

人工智能的发展,主要经历哪几个阶段?

人工智能的发展主要经历了五个阶段: (1)萌芽阶段,上世纪50年代,以申农为首的科学家共同研究了机器模拟的相关问题,人工智能正式诞生; (2)第一发展期,上世纪60…

人工智能的发展历程,AI ,路在何方(文章分享)

人工智能的发展历程,AI ,路在何方(文章分享) 详细请见原文,原文连接 相信有许多初入人工智能领域的朋友,像我一样,或多或少会对人工智能的历史、未来感到迷茫。当我读完这篇文章的时候&#xf…

人工智能 AI 绘画发展史

到了去年4月, 著名人工智能团队OpenAI 也发布了新模型 DALLE 2代,该名称来源于著名画家达利(Dal)和机器人总动员(Wall-E), 同样支持从文本描述生成效果良好的图像. 而很多读者对AI绘画开始产生特别的关注, 或许是从以下…

AI 芯片的简要发展历史

随着人工智能领域不断取得突破性进展。作为实现人工智能技术的重要基石,AI芯片拥有巨大的产业价值和战略地位。作为人工智能产业链的关键环节和硬件基础,AI芯片有着极高的技术研发和创新的壁垒。从芯片发展的趋势来看,现在仍处于AI芯片发展的…

你应当知道的人工智能发展历史

人工智能是指由人工制造出来的系统所表现出来的智能。这个词是由约翰麦卡锡(J.McCarthy)于1956年在达特茅斯会议上提出。正是基于在人工智能领域的贡献,约翰麦卡锡在1971年被授予了计算机界的最高奖项 —— 图灵奖。 然而在更早的1950年&…

多智时代,人工智能发展历史的时间表

1950年:英国数学家、计算机之父阿兰・图灵在他发表的论文“计算机器与智能”中,开宗明义第一句话就是“我开始考虑这个问题:机器能思考吗?” 1956年:在达特茅斯学院举行的一个研讨会上,正式创造了“人工智…

AI的历史发展

文章目录 1. 历史发展的简要介绍1.1 历史简介 2. 历史发展的详细介绍2.1 赫布理论2.2 跳棋程序2.3 感知机2.4 AI的第一次危机2.5 MLP和BP2.5.1 反向传播2.5.2 具体实例 2.6 决策树算法2.7 SVM2.7.1 几何间隔和函数间隔2.7.2 拉格朗日乘子法 2.8 Adaboost2.9 Random Forest2.10 …

人工智能发展历史与常见名词解释

人工智能(Artificial Intelligence) Artificial Intelligence,也叫 AI,这是一个比较统称的说法,通俗来说就是让机器能像人一样对事物做出反应,该领域的研究包括机器人、图像识别(CV&#xff09…

一文述说人工智能(AI)发展史,几经沉浮!

人工智能将和电力一样具有颠覆性 。 --吴恩达 如同蒸汽时代的蒸汽机、电气时代的发电机、信息时代的计算机和互联网,人工智能(AI)正赋能各个产业,推动着人类进入智能时代。 本文从介绍人工智能及主要的思想派系,进一步…

人工智能的历史(History of artificial intelligence)

人工智能的历史起于远古时代,夹杂者神话故事和各种流言,正如帕梅拉( Pamela McCorduck)所说,远古人类创造AI 的初心是为了创造一个人造的上帝。比如希腊的金色机器人 火神赫菲斯托斯 和 Pygmalion’s Galatea。 远古…

机械设备配套风机常用选型资料

机械设备配套风机常用选型资料 机械设备配套专用风机,产生极强的吸力和压力使集尘器内部形成局部真空,在吸力和压力的作用下,空气高速排出。它属于机械设备中的那一类产品?这些都是我们需要了解和认识的,这样才能对风机以及风机行业进行一个很好的了解。…

实验室电子设备选型-2020-年末

根据实验室平时工作中常用到的测量量,根据现在设备性能和种类,计划在年末增加如下几款设备。 ➤01 可编程直流电源 1. DH1766-2 DH1766-2淘宝链接 型号: DH1765-2(32V-6A)【4498】 备注:需要带有LAN编程接…

机械设备管理软件如何选择?机械设备管理软件哪家好?

随着信息化技术的进步与智能制造的发展趋势,很多机械设备制造企业也在一直探寻适合自己的数字化管理转型之路,而企业上ERP管理软件又是实现数字化管理的前提,机械设备管理软件对于企业来说就是关键一环。 机械设备管理软件如何选择&#xff1…

【运维实战家】无线三建七优之设备选型-锐捷无线

作者:东东 哈喽小伙伴们,大家好呀。又到了《无线三建七优》系列更新的日子,这次给大家带来的是建设篇的第一篇。相对于优化篇来讲,建设篇更类似于理论知识与实际工程经验的总结。 那就让我们带着本篇的问题--“无线设备该怎么选&a…

器件选型

最近面试还是经常看到一些面试官问器件选型,当然,这种问题只能吓唬应届生,这里就为各位补充这个书本上没有的知识吧。 一、工程背景。 首先要清楚产品/项目的定位,民用、工用、军用,考虑的都不太一样。 民用&#xff…