Android Phase2
Android — Phase 2 (post-iOS-launch)
iOS launches first. Android is a deliberate fast-follow, not a blocker. This doc is the plan of record.
Current Android status (what already works)
android/ and EAS Android config are committed. These run cross-platform today
via JS / RN fallbacks:
- Full offline study, all 128 questions, all 8 languages, quizzes, practice
- Text AI mock interview (web-API based) + dictation (ExpoSpeechRecognition is cross-platform)
- Adaptive engine (FSRS/IRT), stats, results, PDF export
- Social sharing (native share sheet, WhatsApp/SMS, invite/score/streak/badge)
The gaps (precise)
All 10 native modules are iOS-only (Swift, no Kotlin): civics-realtime-audio,
civics-answer-choice, civics-officer-stage, civics-hero-card, civics-hand-raise,
civics-haptics, civics-activity(-grid), civics-hold-mic, civics-streak-burst.
Most have RN fallbacks or are cosmetic (widget + Live Activity are iOS-only by nature).
| Gap | Impact | Phase |
|---|---|---|
civics-realtime-audio (Swift only) → no realtime VOICE interview on Android (isRealtimeAudioStreamSupported() = false) | Premium headline feature missing | 2b |
RevenueCat Android — no EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY, no Play products | Purchases dead on Android | 2a |
EAS Android build + Play service account (pc-api-key.json) + signing | Can't ship | 2a |
| Native UI (answer-choice, hero card, officer-stage writing pad, hand-raise) | Uses RN fallbacks; verify they look premium on Android | 2a |
| Widget / Live Activity (ActivityKit/WidgetKit) | iOS-only; skip on Android (or build an Android widget later) | 2c |
Plan
Phase 2a — Android v1 (sellable in ~days)
- Google Play Console: create
civix_pro($9.99/mo) +civix_pro_annual($59.99/yr) subscriptions - RevenueCat: add the Android app + Google service-account credentials; attach both products to the
premiumentitlement (same entitlement as iOS) - Add
EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY(thegoog_…key) toeas.jsonproduction/testflight env - EAS Android build profile + Play service account JSON + upload-key signing
- Audit the RN fallbacks (answer-choice, results, paywall) on a real Android device — confirm they look premium (hairlines, type scale, RTL for fa/ps)
- Ship Android with study + TEXT AI interview premium. (Text interview is a real premium feature on its own.)
Phase 2b — Android voice parity (~1–2 weeks)
- Kotlin
civics-realtime-audiomodule:AudioRecordcapture → 24 kHz mono PCM16 → base64 frames (mirror the Swift module's event contract:audioChunk/level/boundary/playback),AudioTrackfor officer downlink playback, route + interruption handling - Enable realtime voice interview on Android
Phase 2c — Android polish (optional)
- Kotlin equivalents / Jetpack Compose for the premium native cards if the RN fallbacks aren't good enough
- Android home-screen widget (optional)
Recommendation
Launch iOS → Phase 2a gets a sellable Android app within days → Phase 2b brings voice parity. Do NOT block iOS or Android v1 on the Kotlin audio module.