94 lines
3.1 KiB
YAML
94 lines
3.1 KiB
YAML
# Android CI — 7maHelper (4ma 用车计时助手)
|
||
#
|
||
# 触发条件:
|
||
# - push / pull_request 到 main 或 master
|
||
# - 手动触发 (Actions 页面的 Run workflow 按钮)
|
||
#
|
||
# 任务:
|
||
# 1. JDK 17 + Android SDK (platforms;android-35, build-tools;35.0.0)
|
||
# 2. Gradle wrapper 校验 + 依赖缓存 (gradle/actions/setup-gradle)
|
||
# 3. 构建 Debug / Release APK
|
||
# 4. 上传 APK 为 Actions artifact
|
||
|
||
name: Android CI
|
||
|
||
on:
|
||
push:
|
||
branches: [ main, master ]
|
||
pull_request:
|
||
branches: [ main, master ]
|
||
workflow_dispatch:
|
||
|
||
permissions:
|
||
contents: read
|
||
|
||
jobs:
|
||
build:
|
||
name: Build APK
|
||
runs-on: ubuntu-latest
|
||
|
||
steps:
|
||
- name: Checkout
|
||
uses: actions/checkout@v4
|
||
|
||
- name: Set up JDK 17
|
||
uses: actions/setup-java@v4
|
||
with:
|
||
distribution: temurin
|
||
java-version: '17'
|
||
|
||
- name: Set up Android SDK
|
||
run: |
|
||
# GitHub 托管 runner 已预装 Android SDK (ANDROID_HOME 默认已设置),
|
||
# 这里只显式安装本项目所需的平台与构建工具,并接受所有许可。
|
||
yes | sdkmanager --licenses >/dev/null 2>&1 || true
|
||
sdkmanager "platforms;android-35" "build-tools;35.0.0"
|
||
|
||
- name: Set up Gradle
|
||
uses: gradle/actions/setup-gradle@v4
|
||
|
||
- name: Grant execute permission for gradlew
|
||
run: chmod +x gradlew
|
||
|
||
- name: Build with Gradle
|
||
# local.properties 已被 .gitignore 忽略,CI 上不存在;
|
||
# AGP 自动使用 ANDROID_HOME 环境变量定位 SDK。
|
||
run: ./gradlew assembleDebug assembleRelease --no-daemon
|
||
|
||
- name: Upload APK artifacts
|
||
uses: actions/upload-artifact@v4
|
||
with:
|
||
name: apk
|
||
path: |
|
||
app/build/outputs/apk/debug/*.apk
|
||
app/build/outputs/apk/release/*.apk
|
||
if-no-files-found: error
|
||
|
||
# 可选:对 Release APK 进行正式签名。
|
||
# 启用方法(在仓库 Settings -> Secrets and variables -> Actions 中配置):
|
||
# KEYSTORE_BASE64 - base64 编码的 keystore 文件内容
|
||
# KEYSTORE_PASSWORD / KEY_ALIAS / KEY_PASSWORD
|
||
# 未配置时此步骤自动跳过。
|
||
- name: Sign Release APK (optional)
|
||
if: env.KEYSTORE_BASE64 != ''
|
||
env:
|
||
KEYSTORE_BASE64: ${{ secrets.KEYSTORE_BASE64 }}
|
||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
|
||
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
|
||
run: |
|
||
APK="app/build/outputs/apk/release/app-release-unsigned.apk"
|
||
if [ -f "$APK" ]; then
|
||
echo "$KEYSTORE_BASE64" | base64 -d > release.keystore
|
||
"$ANDROID_HOME/build-tools/35.0.0/apksigner" sign \
|
||
--ks release.keystore \
|
||
--ks-pass "pass:${KEYSTORE_PASSWORD}" \
|
||
--key-pass "pass:${KEY_PASSWORD}" \
|
||
--ks-key-alias "$KEY_ALIAS" \
|
||
--out app/build/outputs/apk/release/app-release.apk \
|
||
"$APK"
|
||
echo "已签名: app/build/outputs/apk/release/app-release.apk"
|
||
else
|
||
echo "未找到 release 未签名 APK,跳过签名"
|
||
fi
|