Skip to main content

Mobile Build & Release

React Native (Expo SDK 54) Android app. iOS coming later. Released via direct APK download (ka-26.com/download) until Play Store approval.

Build environment

ToolVersionWhere to install
Node.js20 LTSnvm install 20
Java JDK17brew install openjdk@17
Android SDKlatestAndroid Studio → SDK Manager
Expo CLIlatestbundled via npx expo (no global install)

Required env vars (often need to be set explicitly per command):

  • ANDROID_HOME=/Users/<you>/Library/Android/sdk
  • JAVA_HOME=/opt/homebrew/opt/openjdk@17 (Apple Silicon)

APK build (direct download)

cd /Users/siddu/marketplace/mobile

# 1. Generate Android project from app.json (idempotent + clean)
ANDROID_HOME=/Users/siddu/Library/Android/sdk npx expo prebuild --platform android --clean

# 2. Gradle assemble release (~3 min)
cd android
ANDROID_HOME=/Users/siddu/Library/Android/sdk JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew assembleRelease

# 3. Output
ls -lh app/build/outputs/apk/release/app-release.apk
# → ~84-90 MB

AAB build (for Play Store)

cd mobile/android
ANDROID_HOME=/Users/siddu/Library/Android/sdk JAVA_HOME=/opt/homebrew/opt/openjdk@17 ./gradlew bundleRelease
ls -lh app/build/outputs/bundle/release/app-release.aab

Upload the AAB to Play Console. Play Store accepts only AAB now (not APK).

Distribution flow

Direct APK (current)

  1. Build APK locally (steps above)
  2. Copy to landing repo: cp app-release.apk /tmp/ka26-website/public/downloads/ka26-latest.apk
  3. Bump version label in /tmp/ka26-website/src/app/download/page.tsx (APK_VERSION)
  4. git add -A && git commit -m "chore(download): bump APK to vX" && git push
  5. GitHub Pages deploys in ~1 min
  6. Users download from https://ka-26.com/download

Play Store (TBD)

See incident playbook + Authentication. Requires:

  • Google Play Console developer account ($25 one-time)
  • Aadhaar/PAN verification (1-2 days)
  • Store listing assets (icon, screenshots, descriptions, content rating, data safety form)
  • AAB upload (not APK)
  • Privacy Policy URL (already live: https://ka-26.com/privacy)
  • 1-7 day review

Once approved, swap the /download page CTA from APK direct → Play Store redirect.

APK history

VersionDateNotable changes
v92026-04-10Pre-launch baseline
v122026-04-15Last v before today's overhaul
v132026-04-17First with rebrand to KA26, Eats archived, offline flags, email migration, About link, Sentry SDK
v142026-04-17+ Shop "My Ads" filter fix

Versioning convention

Bump the integer for each new build. The major version bump indicates breaking compatibility (e.g. forced re-login, new auth scheme); we haven't crossed one yet.

Release checklist

Before pushing v(N+1):

  • All tests pass (cd mobile && npx vitest run && npx jest --forceExit --detectOpenHandles)
  • CHANGELOG entry added describing what's new vs prior version
  • mobile/app.json version field bumped
  • APK built locally + tested on real device (install with adb install -r)
  • APK file copied to landing repo
  • APK_VERSION updated on download page
  • Commit + push to landing repo

Common build issues

ErrorFix
JAVA_HOME not setUse the full env-var prefix shown above
SDK location not foundSet ANDROID_HOME
error TS2307: Cannot find module 'react-native'Mobile imports leaking into web build — ensure mobile path is in web tsconfig.json exclude
Gradle hangs at "Resolving dependencies"First run downloads ~500MB; let it finish
app-release.apk is unsignedWe use the default Expo debug signing for now; for Play Store builds we'll add a release keystore (Phase B of Play Store submission)