学习下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 自动提供的,无需手动设置
相关推荐
Yang-Never5 小时前
Kotlin协程 -> Job.join() 完整流程图与核心源码分析
android·开发语言·kotlin·android studio
老马啸西风6 小时前
v0.29.2 敏感词性能优化之基本类型拆箱、装箱的进一步优化的尝试
性能优化·开源·nlp·github·敏感词
伴杯猫9 小时前
【ESP32-IDF】基础外设开发2:系统中断矩阵
c语言·单片机·嵌入式硬件·mcu·物联网·github
一笑的小酒馆10 小时前
Android性能优化之截屏时黑屏卡顿问题
android
程序视点11 小时前
GitHub Copilot代码审查大升级!路径级指令+组织级规范,开发者效率再提升!
github·github copilot
懒人村杂货铺13 小时前
Android BLE 扫描完整实战
android
TeleostNaCl15 小时前
如何安装 Google 通用的驱动以便使用 ADB 和 Fastboot 调试(Bootloader)设备
android·经验分享·adb·android studio·android-studio·android runtime
行思理16 小时前
linux 安全与防护,全方向讲解
linux·安全·github
NocoBase16 小时前
6 个最佳无代码 IT 资产管理工具推荐
低代码·开源·github
fatiaozhang952716 小时前
中国移动浪潮云电脑CD1000-系统全分区备份包-可瑞芯微工具刷机-可救砖
android·网络·电脑·电视盒子·刷机固件·机顶盒刷机