CICD 信发系统自动打包安卓签名apk—无相无界(7)—东方仙盟

自动构建CI/CD yml脚本
复制代码
name: Build & Upload to Release

on:
  push:
    branches: [ main ]
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: write

    steps:
      - uses: actions/checkout@v4

      - name: Set up JDK 11
        uses: actions/setup-java@v4
        with:
          java-version: '11'
          distribution: 'temurin'

      - name: Setup Gradle 6.5
        uses: gradle/actions/setup-gradle@v3
        with:
          gradle-version: '6.5'

      # 自动生成签名
      - name: Generate signing keystore
        run: |
          keytool -genkey -v \
            -keystore app/keystore.jks \
            -alias release \
            -keyalg RSA -keysize 2048 -validity 36500 \
            -storepass release -keypass release \
            -dname "CN=App"

      # 自动写入签名配置
      - name: Write signing config
        run: |
          echo "KEYSTORE_FILE=keystore.jks" >> local.properties
          echo "KEYSTORE_PASSWORD=release" >> local.properties
          echo "KEY_ALIAS=release" >> local.properties
          echo "KEY_PASSWORD=release" >> local.properties

      # 修复仓库并构建
      - name: Fix repo and build
        run: |
          sed -i 's/jcenter()/mavenCentral()/g' build.gradle
          gradle assembleRelease

      - name: Create Version Tag
        id: tag
        run: echo "tag=v$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT

      - name: Upload to GitHub Release
        uses: softprops/action-gh-release@v2
        with:
          tag_name: ${{ steps.tag.outputs.tag }}
          name: "PCOSAnd_ScreenDisplay ${{ steps.tag.outputs.tag }}"
          body: "屏幕显示工具自动构建"
          files: app/build/outputs/apk/release/*.apk
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

一、整体作用

这段代码放在项目的 .github/workflows/ 目录下,是 GitHub 的自动化工作流 。只要你推代码到 main 分支 ,或者手动触发,它就会:

  1. 自动拉代码
  2. 配置 Java、Gradle 环境
  3. 自动生成签名文件(打包 APK 必须)
  4. 自动写入签名配置
  5. 自动编译出正式 APK
  6. 自动创建版本标签
  7. 自动把 APK 发布到 GitHub Release

二、逐行解释

  1. 工作流名称

yaml

复制代码
name: Build & Upload to Release

给这个自动化任务起个名字:构建并上传到发布页


2. 触发条件(什么时候自动运行)

yaml

复制代码
on:
  push:
    branches: [ main ]   # 推代码到 main 分支时自动运行
  workflow_dispatch:    # 允许你在 GitHub 页面手动触发

两种触发方式:

  • 你提交代码 → 自动构建
  • 你去 GitHub 点一下按钮 → 手动构建

3. 任务配置

yaml

复制代码
jobs:
  build:
    runs-on: ubuntu-latest   # 在最新版 Ubuntu 虚拟机上运行
    permissions:
      contents: write        # 给权限:允许写仓库、创建 Release

4. 步骤:拉取代码

yaml

复制代码
- uses: actions/checkout@v4

把你的 GitHub 代码拉到虚拟机里。


5. 步骤:配置 Java 环境

yaml

复制代码
- name: Set up JDK 11
  uses: actions/setup-java@v4
  with:
    java-version: '11'
    distribution: 'temurin'

Android 构建需要 Java,这里安装 JDK 11


6. 步骤:配置 Gradle 版本

yaml

复制代码
- name: Setup Gradle 6.5
  uses: gradle/actions/setup-gradle@v3
  with:
    gradle-version: '6.5'

安装指定的 Gradle 6.5 构建工具。


7. 步骤:自动生成签名文件(关键)

yaml

复制代码
- name: Generate signing keystore
  run: |
    keytool -genkey -v \
      -keystore app/keystore.jks \
      -alias release \
      -keyalg RSA -keysize 2048 -validity 36500 \
      -storepass release -keypass release \
      -dname "CN=App"

作用 :Android 正式 APK 必须签名才能安装,这段代码自动生成签名文件,密码全部设为:

  • 仓库密码:release
  • 密钥密码:release
  • 别名:release

8. 步骤:自动写入签名配置

yaml

复制代码
- name: Write signing config
  run: |
    echo "KEYSTORE_FILE=keystore.jks" >> local.properties
    echo "KEYSTORE_PASSWORD=release" >> local.properties
    echo "KEY_ALIAS=release" >> local.properties
    echo "KEY_PASSWORD=release" >> local.properties

把签名信息写入配置文件,让构建脚本能读到。


9. 步骤:修复依赖仓库 + 构建正式 APK

yaml

复制代码
- name: Fix repo and build
  run: |
    sed -i 's/jcenter()/mavenCentral()/g' build.gradle
    gradle assembleRelease
  • 把废弃的 jcenter 仓库换成 mavenCentral(避免构建失败)
  • 执行构建命令:assembleRelease
  • 输出:正式签名的 APK 文件

10. 步骤:生成版本号标签

yaml

复制代码
- name: Create Version Tag
  id: tag
  run: echo "tag=v$(date +'%Y%m%d%H%M')" >> $GITHUB_OUTPUT

用当前时间生成标签,例如:v202512291530


11. 步骤:上传 APK 到 GitHub Release

yaml

复制代码
- name: Upload to GitHub Release
  uses: softprops/action-gh-release@v2
  with:
    tag_name: ${{ steps.tag.outputs.tag }}
    name: "PCOSAnd_ScreenDisplay ${{ steps.tag.outputs.tag }}"
    body: "屏幕显示工具自动构建"
    files: app/build/outputs/apk/release/*.apk
  env:
    GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

最终步骤

  • 创建一个 GitHub Release
  • 标题:PCOSAnd_ScreenDisplay + 时间版本号
  • 描述:屏幕显示工具自动构建
  • 上传:构建好的正式 APK
  • 使用 GitHub 自动提供的密钥进行上传

三、最终效果(你能看到什么)

每次运行成功后,去你的 GitHub 仓库 → Releases 页面,就能看到:

  • 一个带时间戳的新版本
  • 里面有可以直接安装的 正式版 APK
  • 全程不需要你打开 Android Studio、不需要手动打包

四、总结(最核心的 3 点)

  1. 这是 GitHub 自动化构建脚本
  2. 自动编译 Android 项目 → 生成正式签名 APK
  3. 自动发布到 GitHub Release,供下载安装

原创永久分成,共赴星辰大海

原创创意共创、永久收益分成,是东方仙盟始终坚守的核心理念。我们坚信,每一份原创智慧都值得被尊重与回馈,以永久分成锚定共创初心,让创意者长期享有价值红利,携手万千伙伴向着科技星辰大海笃定前行,拥抱硅基 生命与数字智能交融的未来,共筑跨越时代的数字文明共同体。

东方仙盟:拥抱知识开源,共筑数字新生态

在全球化与数字化浪潮中,东方仙盟始终秉持开放协作、知识共享的理念,积极拥抱开源技术与开放标准。我们相信,唯有打破技术壁垒、汇聚全球智慧,才能真正推动行业的可持续发展。

开源赋能中小商户:通过将前端异常检测、跨系统数据互联等核心能力开源化,东方仙盟为全球中小商户提供了低成本、高可靠的技术解决方案,让更多商家能够平等享受数字转型的红利。

共建行业标准:我们积极参与国际技术社区,与全球开发者、合作伙伴共同制定开放协议 与技术规范,推动跨境零售、文旅、餐饮等多业态的系统互联互通,构建更加公平、高效的数字生态。

知识普惠,共促发展:通过开源社区 、技术文档与培训体系,东方仙盟致力于将前沿技术转化为可落地的行业实践,赋能全球合作伙伴,共同培育创新人才,推动数字经济 的普惠式增长

阿雪技术观

在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者 。无论是分享代码、撰写技术博客,还是参与开源项目 维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基 生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets , hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology

相关推荐
simplepeng8 小时前
我们都知道但总是忽略的5个Jetpack Compose细节
android·android jetpack
刮风那天8 小时前
Android 如何提高进程优先级避免被查杀?
android
修行者对6669 小时前
安卓阿里云镜像
android
刮风那天10 小时前
Android AMS创建进程不用Binder而用Socket?
android·java·binder
知行合一。。。12 小时前
Python--05--面向对象(继承,多态)
android·开发语言·python
张小潇13 小时前
AOSP15 WMS/AMS系统开发 -窗口动画源码分析
android
程序员陆业聪14 小时前
Shadow核心原理:壳子Activity与代理机制的精妙设计
android
plainGeekDev15 小时前
Android 开发者再不转Kotlin,真的来不及了
android·kotlin
赏金术士15 小时前
第五章:数据层—网络请求与Repository
android·kotlin·compose
初雪云15 小时前
让安卓发版再简单一点,体验一键自动化发布
android·运维·自动化