学习下Github上的Android CICD吧

昨日种种

来个这样的贴纸提醒提醒自己吧!!!开源应用-屏幕便利贴

全网 Kotlin Multiplatform 首个本地小语言模型(SLM)对话应用开发之旅C

全网 Kotlin Multiplatform 首个本地小语言模型(SLM)对话应用开发之旅B

配置

在项目根目录下,创建 .github/workflows 文件夹,并在其中创建一个 .yml 文件

bash 复制代码
name: Android Release Build

# 触发条件:当创建一个新的 GitHub Release 时触发
on:
  release:
    types: [created]

jobs:
  build:
    runs-on: ubuntu-latest
    permissions:
      contents: write # 授予工作流写入仓库内容的权限,包括上传 Release Assets
    steps:
      - name: Checkout code
        uses: actions/checkout@v4

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

      - name: Decode Keystore
        # 从 secrets 中读取 Base64 字符串并解码回 .jks 文件
        run: |
          echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > ${{ github.workspace }}/release-keystore.jks

      - name: Grant execute permission for gradlew
        run: chmod +x ./gradlew

      - name: Build with Gradle
        # 运行 Gradle 打包命令,并通过 env 传入 secrets
        run: ./gradlew assembleRelease
        env:
          KEYSTORE_FILE: ${{ github.workspace }}/release-keystore.jks
          KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
          KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
          KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}

      - name: Find APK file
        # 找到构建产物 APK 文件的路径
        id: find_apk
        run: |
          apk_path=$(find app/build/outputs/apk/package/release/ScreenSticker-package-release.apk -name '*.apk' | head -n 1)
           if [ -z "$apk_path" ]; then
            echo "::error::APK file not found!"
            # (可选) 添加一个 ls 命令来调试,看看文件到底生成在了哪里
            ls -R app/build/outputs/
            exit 1
          fi
          echo "Found APK at: $apk_path"
          echo "path=$apk_path" >> $GITHUB_OUTPUT

      - name: Upload APK to Release
        # 使用社区推荐的、更现代的 Action
        uses: softprops/action-gh-release@v2
        with:
          # 使用通配符自动查找并上传所有 APK 文件
          # 请确认你的模块名是 'app',如果不是请修改
          files: app/build/outputs/apk/package/release/*.apk
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

关键项

  • on: release: types: [created] : 这个工作流的触发器。它表示只有当你手动在 GitHub 上创建一个新的 Release 时,这个打包流程才会启动。这里也可以设为push,提交时候触发
  • jobs: build: : 定义一个名为 build 的任务,它运行在最新的 Ubuntu 环境上。
  • actions/checkout@v4: 拉取你的代码。
  • actions/setup-java@v4: 安装指定版本的 Java 环境(请根据你的项目要求修改 java-version)。
  • Build with Gradle: 运行 ./gradlew bundleRelease 命令来构建 AAB 文件 (如果你想要 APK,可以改成 ./gradlew assembleRelease)。通过 env 块,我们将之前设置的 Secrets 和 keystore 文件路径作为环境变量传递给 Gradle,这样 build.gradle 就能读取到了。
  • Find APK file: 这个步骤用于查找构建生成的 AAB 文件的确切路径,并将其设置为一个输出变量,供下一步使用。
  • Upload APK to Release: 使用 actions/upload-release-asset 这个 Action,将上一步构建好的 AAB 文件上传到你刚刚创建的 GitHub Release 的 "Assets" 区域。GITHUB_TOKEN 是 GitHub 自动提供的,无需手动设置
相关推荐
林北北的霸霸14 小时前
django初识与安装
android·mysql·adb
lkbhua莱克瓦2415 小时前
Java基础——常用算法3
java·数据结构·笔记·算法·github·排序算法·学习方法
Java 码农16 小时前
MySQL EXPLAIN 详解与优化指南
android·mysql·adb
吃饺子不吃馅17 小时前
前端画布类型编辑器项目,历史记录技术方案调研
前端·架构·github
省四收割者17 小时前
GitHub Action工作流语法
笔记·github
QT 小鲜肉18 小时前
【Git、GitHub、Gitee】按功能分类汇总Git常用命令详解(超详细)
c语言·网络·c++·git·qt·gitee·github
stevenzqzq20 小时前
Android Hilt 入门教程_传统写法和Hilt写法的比较
android
wuwu_q20 小时前
用通俗易懂方式,详细讲讲 Kotlin Flow 中的 map 操作符
android·开发语言·kotlin
散峰而望20 小时前
基本魔法语言函数(一)(C语言)
c语言·开发语言·编辑器·github