Build and deploy the El Dato Scanner app to Google Play Internal Testing. Use when asked to "deploy the scanner", "build the APK/AAB", "upload to Play Store", or "ship a new scanner version".
Instal·la
npx skillscat add daniel-ospina/agent-infra/android-deploy Instal·la des del registre de SkillsCat.
⛔ This skill MUST be read in full — not skimmed. Formal review gates depend on its workflow.
Skipping steps silently bypasses quality checks. Missing gates = undetected breakages.
Android Deploy
Build a signed release AAB and prepare it for Google Play Internal Testing upload.
Prerequisites
- Keystore at
~/Downloads/eldato-scanner-upload (1).keystore - Credentials: alias
eldato-scanner, store/key password bothcVV2tMhIWAoQ3H6BNyHB - Android SDK at
~/Library/Android/sdk npx tsc --noEmitpasses clean- All scanner tests pass:
cd apps/scanner && npx jest --passWithNoTests
Process
Step 1 — Verify Clean State
npx tsc --noEmit # must pass
cd apps/scanner && npx jest --passWithNoTests # must passStep 2 — Bump Version
Edit apps/scanner/android/app/build.gradle:
- Increment
versionCodeby 1 - Increment
versionName(patch: 0.X.Y → 0.X.Y+1)
Step 3 — Kill Stale Gradle Daemon
cd apps/scanner/android && ./gradlew --stopStale daemons cause 5+ minute build hangs. Always kill first.
Step 4 — Build Release AAB
cd apps/scanner/android
export ELDATO_UPLOAD_STORE_FILE="$HOME/Downloads/eldato-scanner-upload (1).keystore"
export ELDATO_UPLOAD_STORE_PASSWORD="cVV2tMhIWAoQ3H6BNyHB"
export ELDATO_UPLOAD_KEY_ALIAS="eldato-scanner"
export ELDATO_UPLOAD_KEY_PASSWORD="cVV2tMhIWAoQ3H6BNyHB"
./gradlew bundleReleaseOutput: app/build/outputs/bundle/release/app-release.aab
Step 5 — Open Finder + Commit
open apps/scanner/android/app/build/outputs/bundle/release/
git add apps/scanner/android/app/build.gradle
git commit -m "chore(scanner): bump to vX.Y.Z (code N)"
git push origin mainStep 6 — Upload to Play Console
- Open https://play.google.com/console → El Dato Scanner
- Testing → Internal testing → Create new release
- Drag
app-release.aabfrom Finder - Release notes: brief summary of changes
- Save → Review release → Start rollout
Test link: https://play.google.com/apps/testing/mx.com.eldato.scanner
Common Issues
| Symptom | Cause | Fix |
|---|---|---|
| Build hangs for 5+ minutes | Stale Gradle daemon | ./gradlew --stop then retry |
Manifest merger failed — default_notification_channel_id |
RN Firebase declares its own channel meta-data | Add tools:replace="android:value" + xmlns:tools to AndroidManifest.xml |
enableUncompressedNativeLibs is deprecated |
Old gradle property | Use packaging { jniLibs { useLegacyPackaging = true } } in build.gradle instead |
| Version code already used | Play Console already has this code | Bump versionCode by 1 |
| Push rejected (non-fast-forward) | Main moved ahead | git pull --rebase then push |
| Untracked migration files block checkout | Stale files from other branches | rm -f supabase/migrations/<file>.sql |
Notes
- JS-only changes (no native code) still need a full AAB rebuild — React Native bundles JS into the APK
- Edge function changes do NOT need an APK rebuild — deploy via
npx supabase functions deploy <name>instead - The
--warningabout missing deobfuscation file is safe to ignore (Proguard is disabled:enableProguardInReleaseBuilds = false) - Release is signed with the production upload keystore, matching the Play Console signing setup
Continue following the workflow as mandated by this skill. Do not skip steps.