Skip to content

Build APK

Build APK #9

Workflow file for this run

name: Build APK
on:
push:
tags: ['v*']
workflow_dispatch:
permissions:
contents: write
jobs:
build-apk:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Install dependencies
run: npm install
- name: Build web app
run: npx vite build --base ./
- name: Setup Capacitor
run: |
npm install @capacitor/core@5 @capacitor/cli@5 @capacitor/android@5 @capacitor/assets
cat > capacitor.config.json << 'CAPEOF'
{
"appId": "com.tapiwa.todoapp",
"appName": "TapDo",
"webDir": "dist",
"server": { "androidScheme": "https" },
"android": { "buildOptions": {} }
}
CAPEOF
npx cap add android
npx cap sync
- name: Generate app icons & splash screens
run: npx capacitor-assets generate --android
- name: Build release APK (unsigned)
working-directory: android
run: |
chmod +x gradlew
./gradlew assembleRelease
- name: Sign APK
env:
KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
run: |
echo "$KEYSTORE_BASE64" | base64 -d > release.p12
BUILD_TOOLS="$ANDROID_HOME/build-tools/$(ls "$ANDROID_HOME/build-tools" | sort -V | tail -1)"
UNSIGNED=android/app/build/outputs/apk/release/app-release-unsigned.apk
"$BUILD_TOOLS/zipalign" -f -p 4 "$UNSIGNED" tapdo-aligned.apk
"$BUILD_TOOLS/apksigner" sign \
--ks release.p12 \
--ks-type pkcs12 \
--ks-key-alias "$KEY_ALIAS" \
--ks-pass "pass:$KEYSTORE_PASSWORD" \
--out TapDo-release.apk \
tapdo-aligned.apk
"$BUILD_TOOLS/apksigner" verify --print-certs TapDo-release.apk
rm -f release.p12
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: TapDo-release-apk
path: TapDo-release.apk
- name: Attach APK to release (tag builds only)
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: TapDo-release.apk