昨日种种
全网 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 自动提供的,无需手动设置