@@ -33,12 +33,28 @@ jobs:
3333 KEYSTORE_KEY_PASSWORD : ${{ secrets.KEYSTORE_KEY_PASSWORD }}
3434 KEYSTORE_STORE_PASSWORD : ${{ secrets.KEYSTORE_STORE_PASSWORD }}
3535 run : |
36+ mkdir -p app/keystores
3637 echo "$KEYSTORE" | base64 --decode > app/keystores/keystore
3738 echo "storeFile=keystores/keystore" >> app/keystores/keystore.properties
3839 echo "keyAlias=$KEYSTORE_KEY_ALIAS" >> app/keystores/keystore.properties
3940 echo "storePassword=$KEYSTORE_STORE_PASSWORD" >> app/keystores/keystore.properties
4041 echo "keyPassword=$KEYSTORE_KEY_PASSWORD" >> app/keystores/keystore.properties
4142
43+ - name : Configure Production Keystore
44+ env :
45+ PROD_KEYSTORE : ${{ secrets.PROD_KEYSTORE }}
46+ PROD_KEYSTORE_KEY_ALIAS : ${{ secrets.PROD_KEYSTORE_KEY_ALIAS }}
47+ PROD_KEYSTORE_KEY_PASSWORD : ${{ secrets.PROD_KEYSTORE_KEY_PASSWORD }}
48+ PROD_KEYSTORE_STORE_PASSWORD : ${{ secrets.PROD_KEYSTORE_STORE_PASSWORD }}
49+ run : |
50+ mkdir -p app/keystores
51+ echo "$PROD_KEYSTORE" | base64 --decode > app/keystores/prod.keystore
52+ cat <<EOF > app/keystores/prod-keystore.properties
53+ keyAlias=$PROD_KEYSTORE_KEY_ALIAS
54+ keyPassword=$PROD_KEYSTORE_KEY_PASSWORD
55+ storePassword=$PROD_KEYSTORE_STORE_PASSWORD
56+ EOF
57+
4258 - name : Inject credentials
4359 run : |
4460 cat <<EOF > local.properties
@@ -48,21 +64,50 @@ jobs:
4864 SUPABASE_KEY=${{ secrets.SUPABASE_KEY }}
4965 EOF
5066
67+ - name : Install Android SDK Build Tools
68+ run : |
69+ SDKMANAGER="$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager"
70+ if [ ! -x "$SDKMANAGER" ]; then
71+ SDKMANAGER="$ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager"
72+ fi
73+ yes | "$SDKMANAGER" --install "build-tools;34.0.0"
74+
5175 - name : Build with Gradle
52- run : ./gradlew :app:bundleRelease-signed
76+ run : ./gradlew :app:bundleRelease
5377
5478 - name : Extract APK from Bundle
5579 run : |
5680 java -jar tools/bundletool-all-1.17.2.jar build-apks \
57- --bundle=app/build/outputs/bundle/release-signed/app-release-signed.aab \
58- --output=app-release-signed.apks \
59- --mode=universal \
60- --ks=app/keystores/keystore \
61- --ks-pass=pass:${{ secrets.KEYSTORE_STORE_PASSWORD }} \
62- --ks-key-alias=${{ secrets.KEYSTORE_KEY_ALIAS }} \
63- --key-pass=pass:${{ secrets.KEYSTORE_KEY_PASSWORD }}
64-
65- unzip app-release-signed.apks universal.apk
81+ --bundle=app/build/outputs/bundle/release/app-release.aab \
82+ --output=app-release.apks \
83+ --mode=universal
84+ unzip -o app-release.apks universal.apk
85+
86+ - name : Dual sign universal APK
87+ env :
88+ DEBUG_ALIAS : ${{ secrets.KEYSTORE_KEY_ALIAS }}
89+ DEBUG_KEY_PASS : ${{ secrets.KEYSTORE_KEY_PASSWORD }}
90+ DEBUG_STORE_PASS : ${{ secrets.KEYSTORE_STORE_PASSWORD }}
91+ PROD_ALIAS : ${{ secrets.PROD_KEYSTORE_KEY_ALIAS }}
92+ PROD_KEY_PASS : ${{ secrets.PROD_KEYSTORE_KEY_PASSWORD }}
93+ PROD_STORE_PASS : ${{ secrets.PROD_KEYSTORE_STORE_PASSWORD }}
94+ run : |
95+ BUILD_TOOLS_DIR="${ANDROID_HOME}/build-tools/34.0.0"
96+ if [ ! -d "$BUILD_TOOLS_DIR" ]; then
97+ BUILD_TOOLS_DIR="${ANDROID_SDK_ROOT}/build-tools/34.0.0"
98+ fi
99+ "${BUILD_TOOLS_DIR}/apksigner" sign \
100+ --ks app/keystores/keystore \
101+ --ks-key-alias "$DEBUG_ALIAS" \
102+ --ks-pass pass:$DEBUG_STORE_PASS \
103+ --key-pass pass:$DEBUG_KEY_PASS \
104+ --next-signer --ks app/keystores/prod.keystore \
105+ --ks-key-alias "$PROD_ALIAS" \
106+ --ks-pass pass:$PROD_STORE_PASS \
107+ --key-pass pass:$PROD_KEY_PASS \
108+ --out universal-signed.apk \
109+ universal.apk
110+ mv universal-signed.apk universal.apk
66111
67112 - name : Upload APK for next job
68113 uses : actions/upload-artifact@v4
0 commit comments