1414jobs :
1515 build-android :
1616 runs-on : ubuntu-latest
17+ environment : production
1718 outputs :
1819 release_base : ${{ steps.vars.outputs.release_base }}
1920 steps :
@@ -65,17 +66,43 @@ jobs:
6566 run : |
6667 yes | sdkmanager --licenses || true
6768
69+ - name : Setup Android Signing
70+ env :
71+ KEYSTORE_BASE64 : ${{ secrets.KEYSTORE_BASE64 }}
72+ KEYSTORE_PASSWORD : ${{ secrets.KEYSTORE_PASSWORD }}
73+ KEY_ALIAS : ${{ secrets.KEY_ALIAS }}
74+ KEY_PASSWORD : ${{ secrets.KEY_PASSWORD }}
75+ run : |
76+ if [ -n "$KEYSTORE_BASE64" ]; then
77+ echo "$KEYSTORE_BASE64" | base64 -d > android/app/keystore.jks
78+ echo "KEYSTORE_PATH=android/app/keystore.jks" >> $GITHUB_ENV
79+ echo "KEYSTORE_PASSWORD=$KEYSTORE_PASSWORD" >> $GITHUB_ENV
80+ echo "KEY_ALIAS=$KEY_ALIAS" >> $GITHUB_ENV
81+ echo "KEY_PASSWORD=$KEY_PASSWORD" >> $GITHUB_ENV
82+ echo "Android signing configured"
83+ else
84+ echo "No signing configuration found, using debug signature"
85+ fi
86+
6887 - name : Build Android AAB, fetch/install core, and package
6988 env :
7089 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7190 run : |
7291 flutter pub run tools/fetch_core_local.dart --repo sipeed/picoclaw --tag latest --out-dir app/bin --platform android --arch arm64 --build-mode release --install-to-build
7392
74- - name : Build Android APK (debug ) and fetch/install core
93+ - name : Build Android APK (release ) and fetch/install core
7594 env :
7695 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
7796 run : |
78- flutter pub run tools/fetch_core_local.dart --repo sipeed/picoclaw --tag latest --out-dir app/bin --platform android --arch arm64 --build-mode debug --install-to-build
97+ flutter pub run tools/fetch_core_local.dart --repo sipeed/picoclaw --tag latest --out-dir app/bin --platform android --arch arm64 --build-mode release --install-to-build
98+
99+ - name : Verify APK Signature
100+ if : env.KEYSTORE_PATH != ''
101+ run : |
102+ echo "Verifying APK signature..."
103+ BUILD_TOOLS=$(ls -d $ANDROID_SDK_ROOT/build-tools/*/ | sort -V | tail -n 1)
104+ $BUILD_TOOLS/apksigner verify -v build/app/outputs/flutter-apk/app-release.apk || true
105+ echo "Signature verification completed"
79106
80107 - name : Prepare release metadata
81108 id : vars
@@ -101,10 +128,10 @@ jobs:
101128 else
102129 echo "AAB not found"; exit 1
103130 fi
104- if [ -f build/app/outputs/flutter-apk/app-debug .apk ]; then
105- cp build/app/outputs/flutter-apk/app-debug .apk "$APK_NAME"
131+ if [ -f build/app/outputs/flutter-apk/app-release .apk ]; then
132+ cp build/app/outputs/flutter-apk/app-release .apk "$APK_NAME"
106133 else
107- echo "Debug APK not found"; exit 1
134+ echo "Release APK not found"; exit 1
108135 fi
109136
110137 # core binaries are installed into build outputs; avoid uploading app/bin
@@ -121,6 +148,12 @@ jobs:
121148 name : picoclaw_fui-${{ env.RELEASE_BASE }}-android-universal.apk
122149 path : picoclaw_fui-${{ env.RELEASE_BASE }}-android-universal.apk
123150
151+ - name : Cleanup signing keys
152+ if : always()
153+ run : |
154+ rm -f android/app/keystore.jks
155+ echo "Signing keys cleaned up"
156+
124157 build-macos :
125158 runs-on : macos-latest
126159 needs : []
0 commit comments