EAS Build — CON · DRV · PAR (WP-EAS-01 / DRV / PAR)
Windows TLS: always set before eas / npx eas-cli:
$env:NODE_OPTIONS='--use-system-ca'
Account: adminmarketingnx · Expo login: npx eas-cli login
Projects
| Surface | Path | Expo project | package / bundle |
|---|---|---|---|
| CON | mobile/ |
@adminmarketingnx/welife-consumer | cloud.minhtien.welife |
| DRV | driver/ |
@adminmarketingnx/welife-driver | cloud.minhtien.welife.driver |
| PAR | partner/ |
@adminmarketingnx/welife-partner | cloud.minhtien.welife.partner |
Profiles (*/eas.json)
| Profile | Artifact | EXPO_PUBLIC_ENV |
API |
|---|---|---|---|
development |
APK + dev client | development | api.minhtien.cloud |
staging |
APK internal | staging (+ API_DEBUG=1) |
same |
preview |
APK internal | production | same |
production |
AAB | production | same |
Expo Go vs development build (media library)
Android 13+ / Expo SDK 54: Expo Go không còn full expo-media-library.
| Việc | Expo Go | Dev Client (eas profile development) / store |
|---|---|---|
Chọn 1 ảnh (expo-image-picker / pickFromLibrary) |
OK | OK |
Duyệt/lưu album (expo-media-library) |
Không — dùng ImagePicker | OK |
$env:NODE_OPTIONS='--use-system-ca'
cd mobile
npx eas-cli build --profile development --platform android
Cài APK → npx expo start --dev-client (hoặc npm run start:lan sau khi gắn expo-dev-client).
Code guard: ensureMediaLibrary() trả expo_go_limited trên Expo Go — không gọi native MediaLibrary.
Build commands
$env:NODE_OPTIONS='--use-system-ca'
# Consumer
cd mobile
npm run eas:preview:android
# or: npx eas-cli build --profile preview --platform android --non-interactive --no-wait
# Driver
cd ../driver
npm run eas:preview:android
# Partner
cd ../partner
npm run eas:preview:android
.easignore in each app excludes monorepo siblings (Windows EPERM on junctions).
Owner once (credentials)
- First Android build auto-creates keystore on Expo (remote credentials) when logged in.
- Do not commit
EXPO_TOKENor keystore files. - Optional CI: Expo → Access Token → GitHub secret
EXPO_TOKEN.
Play Console — ảnh / video (không khai READ_MEDIA_*)
Chọn ảnh eKYC / đính kèm = một lần → Android Photo Picker. Không xin READ_MEDIA_IMAGES / READ_MEDIA_VIDEO.app.json → android.blockedPermissions. Play form «Photo and video permissions»: chọn not using these permissions / photo picker.
.\gradlew assembleRelease mặc định Expo prebuild ký debug.keystore → Play báo signed in debug mode.
- Tải AAB (không APK sideload cũ):
mobile/android/app/build/outputs/bundle/release/app-release.aab - Ký upload:
node mobile/scripts/apply-android-release-signing.mjsrồibundleRelease(keystore trongsecrets/android/, gitignore). - Hoặc cloud:
npx eas-cli build --profile production --platform android(AAB + keystore trên Expo).
Status (2026-08-14)
Hub: STATUS.md.
| WP | Config | Cloud APK |
|---|---|---|
| WP-EAS-01 CON | IMP (projectId + profiles) |
finished — 845b6a3d… · APK |
| WP-EAS-DRV-01 | IMP (projectId linked) |
finished — 18716e82… · APK |
| WP-EAS-PAR-01 | IMP (projectId linked) |
finished — e0e55329… · APK |
Monorepo gotcha
Root .easignore must not ignore /mobile /driver /partner — EAS unpacks to workingdir/build/<app> and needs package.json there. First DRV/PAR fails were package.json does not exist in .../build/driver.