Phase 1 — Mobile Device Matrix & APK Distribution
Companion to: phase1-mobile-device-test-plan.md
Task: E4 — Real-device mobile testing
Status: Ready for procurement + build once EAS login is unblocked
1. Device matrix
1.1 Required devices (4)
All four devices are required for Phase 1 sign-off. They span three Android major versions (11 / 13 / 14), three form factors (phone / phablet / tablet), and two price tiers (budget / flagship) to reflect actual KeyNova property staff device mix.
| # | Device | Form factor | Screen | Resolution | Android | Chipset | RAM | Why this device |
|---|---|---|---|---|---|---|---|---|
| 1 | Samsung Galaxy A23 | Phone | 5.8" | 1080 × 2408 | 13 | Snapdragon 680 | 4 GB | Budget phone — dominant at demo property staff. Mid-range chipset, lower RAM. Tests low-end performance. |
| 2 | Google Pixel 6 | Phone | 6.4" | 1080 × 2400 | 14 | Tensor | 8 GB | Stock Android, latest version. Baseline for "how should it look" screenshots. Tests modern phone. |
| 3 | Samsung Galaxy S23 Ultra | Phablet | 6.8" | 1440 × 3088 | 14 | Snapdragon 8 Gen 2 | 12 GB | Manager / owner day-to-day phone. Large screen tests KPI card layouts at phablet widths. S-Pen not tested. |
| 4 | Samsung Galaxy Tab A8 | Tablet | 10.5" | 1200 × 1920 | 11 | Unisoc T618 | 4 GB | F&B captain tablet / manager tablet. Older Android (11). Tests backward-compat and tablet portrait layout. |
1.2 Android version coverage
| Android version | Covered by | Rationale |
|---|---|---|
| Android 11 | Tab A8 | Older tablets common at demo properties; Expo SDK 50 minimum is Android 6, but in practice the oldest we see is 11 |
| Android 13 | Galaxy A23 | Current modal version at retail — most budget phones ship with 13 |
| Android 14 | Pixel 6, S23 Ultra | Latest stable; covers notification channel changes, predictive back gesture, and partial media permissions |
No device on Android 12 — 13 and 14 are behavior-similar enough that the incremental coverage isn't worth a 5th device.
1.3 iOS — out of scope for Phase 1
Reconfirming: no iOS devices are included. Per D5, iOS builds are not configured for any of the 4 apps. Phase 2 will add:
- Apple Developer account enrollment
- Bundle ID + provisioning profile registration
eas.jsoniOS credentials- Minimum 2 iOS devices (iPhone 12 + iPad 9th gen)
1.4 Procurement
If the QA team does not have physical devices on hand, procure from:
- Rental: Browserstack App Live (24h passes) — acceptable fallback for Android 11 and 13
- In-office: Confirm inventory with the dev team (Pixel 6 and one Samsung should be available)
- Property staff loan: Ask one of the 5 demo properties to loan a staff device for 3 days (covers the "real end-user hardware" case)
Budget estimate if purchased new: Total ~₹1.3 lakh (A23 ~₹16k + Pixel 6 ~₹35k + S23 Ultra ~₹95k + Tab A8 ~₹15k, used/refurbished market prices).
1.5 Device preparation checklist
Before testing begins, each device must be prepared:
- Factory reset (or at minimum, cleared of prior test data)
- Signed into a test Google account (NOT a personal account)
- Settings → Security → Install unknown apps → Allow for the browser that will download the APK
- Settings → Developer options → USB debugging → ON (for
adb logcatcapture) - Settings → Developer options → Stay awake while charging → ON
- WiFi connected to hotel-equivalent network (QA lab WiFi)
- SIM with 4G data for cellular tests (prepaid Jio/Airtel)
- Charging cable + charger dedicated to the device
- Screen-record enabled (built-in on Android 11+)
- TalkBack training: tester has practiced the basic gestures before testing accessibility
2. APK distribution plan
2.1 BLOCKED dependency — Expo account login
Blocker carried from task D5: The
hmp-mobile-appsworkspace has never hadeas loginexecuted in this environment. EAS builds require interactive browser login. User input is required to unblock:
- Open terminal in
C:/CLProjects/HMP/hmp-mobile-apps- Run
npx eas-cli login- Log in with the KeyNova mobile team Expo account (credentials in 1Password — ask #keynova-ops)
- Verify with
npx eas-cli whoami— should print the expo account handleUntil this step is complete, no APKs can be produced. All 4 apps are blocked on this single step.
2.2 EAS build commands (per app)
All 4 apps have an existing eas.json with development, preview, and production profiles. Preview profile is the correct target for QA testing (internal distribution, API points to staging, buildType: apk).
Run these from each app's directory:
# HK
cd C:/CLProjects/HMP/hmp-mobile-apps/apps/housekeeping
npx eas-cli build --platform android --profile preview --non-interactive
# Manager
cd C:/CLProjects/HMP/hmp-mobile-apps/apps/manager
npx eas-cli build --platform android --profile preview --non-interactive
# F&B
cd C:/CLProjects/HMP/hmp-mobile-apps/apps/fnb
npx eas-cli build --platform android --profile preview --non-interactive
# Guest
cd C:/CLProjects/HMP/hmp-mobile-apps/apps/guest
npx eas-cli build --platform android --profile preview --non-interactive
Each build takes ~20-30 minutes on EAS cloud servers. Run all 4 in parallel (4 separate terminals) — EAS free tier allows 1 concurrent build, so budget ~2 hours serial if on free tier; ~30 min parallel if on paid plan. Verify plan with npx eas-cli whoami.
2.3 Production-profile builds (for final go/no-go test)
For the Apr 11 re-test once prod URL is cut over:
cd C:/CLProjects/HMP/hmp-mobile-apps/apps/housekeeping
npx eas-cli build --platform android --profile production --non-interactive
# repeat for manager, fnb, guest
Before running production profile builds:
- Update
EXPO_PUBLIC_API_URLin each app'seas.json→production.envto the final prod domain (https://api.keynova.in/apiassumed) - Commit the change
- Increment
versionCodeinapp.json(production profile hasautoIncrement: true— verify) - Kick off builds
2.4 Download + distribution
After each build completes, EAS prints a download URL:
https://expo.dev/accounts/<account>/projects/<app>/builds/<build-id>
The APK is downloadable from the "Download" button on that page, or via eas build:list --platform android --profile preview --limit 1 --json for automation.
Recommended distribution flow for QA:
- QA lead downloads all 4 APKs to a shared folder (e.g., OneDrive
KeyNova/Phase1/Mobile-APKs/) - Name the files consistently:
keynova-housekeeping-preview-YYYYMMDD-HHMM.apkkeynova-manager-preview-YYYYMMDD-HHMM.apkkeynova-fnb-preview-YYYYMMDD-HHMM.apkkeynova-guest-preview-YYYYMMDD-HHMM.apk
- Upload APKs to an internal file-share URL accessible from test devices (OneDrive with a public share link works)
- Generate a QR code for each share URL and print them on a single-page "device installer" sheet
2.5 Sideload instructions for property staff devices
Give the following one-page instructions to the QA tester and include in the staff onboarding pack:
How to install the KeyNova apps on your Android device
- On your device, open Settings → Security → Install unknown apps
- Select your browser (Chrome) and toggle Allow from this source
- Open the KeyNova APK share link (from your manager or QR code)
- Tap the APK file for the app you need (Housekeeping / Manager / F&B / Guest)
- Tap Download when prompted
- Once downloaded, tap the file in the notification tray or Downloads folder
- Tap Install (Google Play Protect may warn about an "unverified app" — tap Install anyway)
- Once installed, tap Open
- Log in with the credentials your manager provided
If the install fails:
- Make sure you have at least 200 MB free storage
- Uninstall any previous version first (Settings → Apps → KeyNova → Uninstall)
- Ask your manager for a fresh APK link
2.6 Updating devices after a new build
For repeated test cycles, use ADB for faster push (requires USB cable + USB debugging):
# Connect device via USB
adb devices # verify connected
# Install (replaces existing)
adb install -r keynova-housekeeping-preview-YYYYMMDD-HHMM.apk
adb install -r keynova-manager-preview-YYYYMMDD-HHMM.apk
adb install -r keynova-fnb-preview-YYYYMMDD-HHMM.apk
adb install -r keynova-guest-preview-YYYYMMDD-HHMM.apk
For wireless ADB (Android 11+): adb connect <device-ip>:5555 after enabling wireless debugging in developer options.
2.7 APK verification before distribution
Before handing an APK to the QA team, verify:
# Check signing (should be Expo internal signing key for preview, final keystore for production)
keytool -printcert -jarfile keynova-housekeeping-preview-YYYYMMDD-HHMM.apk
# Check version
aapt dump badging keynova-housekeeping-preview-YYYYMMDD-HHMM.apk | grep -E "(package|versionCode|versionName|application-label)"
Expected output (example):
package: name='com.keynova.housekeeping' versionCode='1' versionName='1.0.0'
application-label:'KeyNova Housekeeping'
If the application-label is anything other than "KeyNova Housekeeping" (e.g. "HMP Housekeeping"), the build used stale assets — abort and rebuild after verifying app.json.
2.8 Rollback plan
If a critical bug is found in a preview build during testing:
- Tester reports via Slack
#keynova-phase1-launchwith repro steps, device, APK version - Mobile team fixes on branch
fix/phase1-<issue-id>inhmp-mobile-apps - New preview APK built (same command as above,
versionCodeauto-increments) - QA lead downloads new APK, uploads to shared folder with new timestamp in filename
- Testers uninstall old version (
adb uninstall com.keynova.<app>) and install new version - Retest only the failing scenarios + smoke test (login, one core flow, logout)
2.9 Final production build handoff (Apr 13)
Once QA signs off on the preview APKs and prod URL is confirmed:
- Mobile team bumps
versionNameto1.0.0-phase1in eachapp.json - Mobile team runs
productionprofile build for all 4 apps (commands in section 2.3) - APKs archived in
hmp-infrastructure/releases/phase1-mobile/with signed checksum - Distribution URL (or Play Store internal track link) shared with the 5 demo properties' managers on Apr 13 afternoon
- Property staff install during Apr 13 staff briefing before the Apr 14 launch morning
3. Device assignment plan (for a 2-tester team)
| Tester | Devices | Days | Apps owned |
|---|---|---|---|
| Tester A (Android senior) | Pixel 6 + S23 Ultra | Apr 7-10 | HK (day 1-2), F&B (day 3-4) |
| Tester B (Android mid) | Galaxy A23 + Tab A8 | Apr 7-10 | Manager (day 1-2), Guest (day 3-4) |
| Both | Pair testing across all 4 devices | Apr 11-13 | Cross-app, re-tests, final sign-off |
If only 1 tester is available, double the timeline: complete HK+Manager on Apr 7-9, F&B+Guest on Apr 10-12, cross-app + sign-off on Apr 13. The launch date does not move.
4. Reporting format
Per device × per app, fill out:
Device: Samsung Galaxy A23 / Android 13 / Chrome 122
App: KeyNova Housekeeping v1.0.0 (versionCode 3) — preview APK
Tester: <initials>
Date: 2026-04-XX
Time: HH:MM
Network: WiFi (hotel lab) / 4G cellular
Result summary:
- Passed: X / 16 checks
- Failed: Y / 16 checks
- Skipped: Z / 16 checks
Failed checks:
HK-14: Real-time updates not received
Repro: <steps>
Expected: Task appears within 5s
Actual: Task only appears after pull-to-refresh (30s)
Screenshot: <link>
adb logcat: <link>
Notes:
<freetext>
Store per-run reports in hmp-docs/docs/testing/phase1-mobile-artifacts/<date>/ (QA lead creates folder on day 1).
5. References
phase1-mobile-device-test-plan.md— main test plan with per-app checklistsphase1-mobile-acceptance-checklist.md— single-page sign-off checklisthmp-mobile-apps/apps/*/eas.json— per-app EAS build confighmp-mobile-apps/apps/*/app.json— per-app Expo config (name, icon, splash)- Task D5 — branding handoff and EAS login blocker