@@ -152,19 +152,77 @@ jobs:
152152 if : env.BUILD_HUMANOPERATOR == 'true'
153153 run : ./gradlew :humanoperator:assembleRelease
154154
155+ - name : Decode signing keystore
156+ env :
157+ ANDROID_KEYSTORE_BASE64 : ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
158+ run : |
159+ if [ -z "$ANDROID_KEYSTORE_BASE64" ]; then
160+ echo "Missing secret: ANDROID_KEYSTORE_BASE64"
161+ exit 1
162+ fi
163+ echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > signing-keystore.jks
164+
165+ - name : Verify signing secrets
166+ env :
167+ ANDROID_KEYSTORE_PASSWORD : ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
168+ ANDROID_KEY_ALIAS : ${{ secrets.ANDROID_KEY_ALIAS }}
169+ ANDROID_KEY_PASSWORD : ${{ secrets.ANDROID_KEY_PASSWORD }}
170+ run : |
171+ [ -n "$ANDROID_KEYSTORE_PASSWORD" ] || { echo "Missing secret: ANDROID_KEYSTORE_PASSWORD"; exit 1; }
172+ [ -n "$ANDROID_KEY_ALIAS" ] || { echo "Missing secret: ANDROID_KEY_ALIAS"; exit 1; }
173+ [ -n "$ANDROID_KEY_PASSWORD" ] || { echo "Missing secret: ANDROID_KEY_PASSWORD"; exit 1; }
174+
175+ - name : Sign app APK
176+ if : env.BUILD_APP == 'true'
177+ env :
178+ ANDROID_KEYSTORE_PASSWORD : ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
179+ ANDROID_KEY_ALIAS : ${{ secrets.ANDROID_KEY_ALIAS }}
180+ ANDROID_KEY_PASSWORD : ${{ secrets.ANDROID_KEY_PASSWORD }}
181+ run : |
182+ "$ANDROID_HOME/build-tools/35.0.0/apksigner" sign \
183+ --ks signing-keystore.jks \
184+ --ks-pass pass:"$ANDROID_KEYSTORE_PASSWORD" \
185+ --ks-key-alias "$ANDROID_KEY_ALIAS" \
186+ --key-pass pass:"$ANDROID_KEY_PASSWORD" \
187+ --out app/build/outputs/apk/release/app-release-signed.apk \
188+ app/build/outputs/apk/release/app-release-unsigned.apk
189+
190+ - name : Verify signed app APK
191+ if : env.BUILD_APP == 'true'
192+ run : " $ANDROID_HOME/build-tools/35.0.0/apksigner" verify app/build/outputs/apk/release/app-release-signed.apk
193+
194+ - name : Sign humanoperator APK
195+ if : env.BUILD_HUMANOPERATOR == 'true'
196+ env :
197+ ANDROID_KEYSTORE_PASSWORD : ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
198+ ANDROID_KEY_ALIAS : ${{ secrets.ANDROID_KEY_ALIAS }}
199+ ANDROID_KEY_PASSWORD : ${{ secrets.ANDROID_KEY_PASSWORD }}
200+ run : |
201+ "$ANDROID_HOME/build-tools/35.0.0/apksigner" sign \
202+ --ks signing-keystore.jks \
203+ --ks-pass pass:"$ANDROID_KEYSTORE_PASSWORD" \
204+ --ks-key-alias "$ANDROID_KEY_ALIAS" \
205+ --key-pass pass:"$ANDROID_KEY_PASSWORD" \
206+ --out humanoperator/build/outputs/apk/release/humanoperator-release-signed.apk \
207+ humanoperator/build/outputs/apk/release/humanoperator-release-unsigned.apk
208+
209+ - name : Verify signed humanoperator APK
210+ if : env.BUILD_HUMANOPERATOR == 'true'
211+ run : " $ANDROID_HOME/build-tools/35.0.0/apksigner" verify humanoperator/build/outputs/apk/release/humanoperator-release-signed.apk
212+
155213 - name : Upload app APK
156214 if : env.BUILD_APP == 'true'
157215 uses : actions/upload-artifact@v4
158216 with :
159- name : app-release-unsigned
160- path : app/build/outputs/apk/release/app-release-unsigned .apk
217+ name : app-release-signed
218+ path : app/build/outputs/apk/release/app-release-signed .apk
161219
162220 - name : Upload humanoperator APK
163221 if : env.BUILD_HUMANOPERATOR == 'true'
164222 uses : actions/upload-artifact@v4
165223 with :
166- name : humanoperator-release-unsigned
167- path : humanoperator/build/outputs/apk/release/humanoperator-release-unsigned .apk
224+ name : humanoperator-release-signed
225+ path : humanoperator/build/outputs/apk/release/humanoperator-release-signed .apk
168226
169227 - name : Build summary
170228 run : |
0 commit comments