学习下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 自动提供的,无需手动设置
相关推荐
louisgeek5 分钟前
Android OkHttp Interceptor
android
大王派来巡山的小旋风9 分钟前
Kotlin基本用法三
android·kotlin
Jerry说前后端44 分钟前
Android 移动端 UI 设计:前端常用设计原则总结
android·前端·ui
bytebeats1 小时前
Jetpack Compose 1.9: 核心新特性简介
android·android jetpack
Icey_World1 小时前
Mysql笔记-错误条件\处理程序
android
程序媛Dev1 小时前
还在 SSH 连服务器敲 SQL?我用 Sealos 把数据库管理后台搬进了浏览器!
开源·github
大王派来巡山的小旋风2 小时前
Kotlin基本用法之集合(一)
android·程序员·kotlin
用户2018792831672 小时前
智能广播系统(RemoteCallbackList)的诞生
android
用户2018792831673 小时前
Binder 同应用内(本地)通信是否存在 1MB 大小限制?
android
一条上岸小咸鱼3 小时前
Kotlin 基本数据类型(四):String
android·前端·kotlin