Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions .github/workflows/build-android.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Build Android AAB

on:
workflow_dispatch:

jobs:
build-android:
name: Build Signed Android AAB
runs-on: ubuntu-latest

steps:
- name: Validate required secrets
run: |
missing=""
if [ -z "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" ]; then
missing="$missing ANDROID_KEYSTORE_BASE64"
fi
if [ -z "${{ secrets.ANDROID_KEY_ALIAS }}" ]; then
missing="$missing ANDROID_KEY_ALIAS"
fi
if [ -z "${{ secrets.ANDROID_KEY_PASSWORD }}" ]; then
missing="$missing ANDROID_KEY_PASSWORD"
fi
if [ -z "${{ secrets.ANDROID_STORE_PASSWORD }}" ]; then
missing="$missing ANDROID_STORE_PASSWORD"
fi
if [ -n "$missing" ]; then
echo "::error::Missing required secrets:$missing"
exit 1
fi

- name: Checkout repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: npm

- name: Install dependencies
run: npm ci

- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: zulu
java-version: 17
cache: gradle

- name: Decode keystore
run: |
echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 -d > android/app/release.keystore

- name: Build release AAB
working-directory: android
env:
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
ANDROID_STORE_PASSWORD: ${{ secrets.ANDROID_STORE_PASSWORD }}
run: ./gradlew bundleRelease

- name: Upload AAB artifact
uses: actions/upload-artifact@v4
with:
name: app-release-aab
path: android/app/build/outputs/bundle/release/app-release.aab
retention-days: 30
10 changes: 7 additions & 3 deletions android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -93,15 +93,19 @@ android {
keyAlias 'androiddebugkey'
keyPassword 'android'
}
release {
storeFile file("release.keystore")
storePassword System.getenv("ANDROID_STORE_PASSWORD") ?: ""
keyAlias System.getenv("ANDROID_KEY_ALIAS") ?: ""
keyPassword System.getenv("ANDROID_KEY_PASSWORD") ?: ""
}
}
buildTypes {
debug {
signingConfig signingConfigs.debug
}
release {
// Caution! In production, you need to generate your own keystore file.
// see https://reactnative.dev/docs/signed-apk-android.
signingConfig signingConfigs.debug
signingConfig signingConfigs.release
minifyEnabled enableProguardInReleaseBuilds
proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
}
Expand Down
Loading