# 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