A debug build only runs on your machine. A release APK runs anywhere and is what the dApp Store and CLOCK IN judges need. Today we sign the app and get a file you can install on any Android device.
You create this. Never commit it. Never put the password in git.
keytool -genkeypair -v -storetype PKCS12 -keystore ~/ship-to-seeker-release.keystore -alias upload -keyalg RSA -keysize 2048 -validity 10000
Point Gradle at the keystore with properties in ~/.gradle/gradle.properties (user home, not the repo):
SHIP_TO_SEEKER_STORE_FILE=/home/you/ship-to-seeker-release.keystore SHIP_TO_SEEKER_STORE_PASSWORD=... SHIP_TO_SEEKER_KEY_ALIAS=upload SHIP_TO_SEEKER_KEY_PASSWORD=...
Wire those names in android/app/build.gradle release signingConfig. Do not check in keystore.properties or *.jks.
cd android && ./gradlew assembleRelease
Or eas build --platform android --profile preview / --profile production. EAS free tier is slow — start it before you sleep. The APK lands under android/app/build/outputs/apk/release/ for a local Gradle build.
adb install -r android/app/build/outputs/apk/release/app-release.apk
Run every Diagnostics check on this build, not the dev client.
You're done when: the APK installs cleanly, all three Diagnostics checks pass, and you have a file you can attach to the CLOCK IN submission.