Update files
This commit is contained in:
@@ -106,55 +106,33 @@ Take screenshots like this: `adb exec-out screencap -p > screenshot.png`
|
|||||||
|
|
||||||
Use `APP_VARIANT` in `packages/app/app.config.js` to control app name + package ID (no custom Gradle flavor plugin):
|
Use `APP_VARIANT` in `packages/app/app.config.js` to control app name + package ID (no custom Gradle flavor plugin):
|
||||||
|
|
||||||
- `prod` -> app name `Paseo`, package `sh.paseo`
|
- `production` -> app name `Paseo`, package `sh.paseo`
|
||||||
- `debug` -> app name `Paseo Debug`, package `sh.paseo.debug`
|
- `development` -> app name `Paseo Dev`, package `sh.paseo.dev`
|
||||||
- `fast` -> app name `Paseo Dev`, package `sh.paseo.dev`
|
|
||||||
|
|
||||||
EAS profiles live in `packages/app/eas.json` as `prod`, `debug`, and `fast`.
|
EAS profiles live in `packages/app/eas.json` as `development` and `production`.
|
||||||
|
|
||||||
`fast` uses Android `debugOptimized` for better runtime performance while still supporting Metro/Fast Refresh.
|
`development` uses Android `debug`.
|
||||||
|
|
||||||
### Local build + install (Android device)
|
### Local build + install (Android device)
|
||||||
|
|
||||||
From `packages/app`:
|
From `packages/app`:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# prod (release)
|
# development (debug)
|
||||||
APP_VARIANT=prod npx expo prebuild --platform android --clean --no-install
|
APP_VARIANT=development npx expo run:android --variant=debug
|
||||||
(cd android && ./gradlew app:assembleRelease)
|
|
||||||
adb install -r android/app/build/outputs/apk/release/app-release.apk
|
|
||||||
|
|
||||||
# debug (full debug tooling)
|
# production (release)
|
||||||
APP_VARIANT=debug npx expo prebuild --platform android --clean --no-install
|
APP_VARIANT=production npx expo run:android --variant=release
|
||||||
(cd android && ./gradlew app:assembleDebug)
|
|
||||||
adb install -r android/app/build/outputs/apk/debug/app-debug.apk
|
|
||||||
|
|
||||||
# fast (debugOptimized + Metro/Fast Refresh)
|
|
||||||
APP_VARIANT=fast npx expo prebuild --platform android --clean --no-install
|
|
||||||
(cd android && ./gradlew app:assembleDebugOptimized)
|
|
||||||
adb install -r android/app/build/outputs/apk/debugOptimized/app-debugOptimized.apk
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Android dev + build scripts (Metro-enabled)
|
|
||||||
|
|
||||||
From repo root:
|
From repo root:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Run on phone (installs/launches variant and sets debug_http_host)
|
npm run android:development
|
||||||
npm run android:fast
|
npm run android:production
|
||||||
npm run android:debug
|
|
||||||
|
|
||||||
# Build APKs (for shipping over the wire)
|
|
||||||
npm run android:fast:build
|
|
||||||
npm run android:debug:build
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Notes:
|
`npm run android:prod` and `npm run android:release` are aliases for `npm run android:production`.
|
||||||
- Both dev variants are Metro-enabled by default and set `debug_http_host` via adb.
|
|
||||||
- Default Metro endpoint is `localhost:8080`.
|
|
||||||
- If `localhost:8080` is not running but `localhost:8081` is, scripts auto-fallback to `localhost:8081`.
|
|
||||||
- For localhost endpoints, scripts also run `adb reverse tcp:<port> tcp:<port>` automatically.
|
|
||||||
- Override with `METRO_ENDPOINT=host:port` (for example `METRO_ENDPOINT=192.168.1.25:8081`).
|
|
||||||
|
|
||||||
## Testing with Playwright MCP
|
## Testing with Playwright MCP
|
||||||
|
|
||||||
|
|||||||
+2
-4
@@ -23,11 +23,9 @@
|
|||||||
"format:check": "prettier --check .",
|
"format:check": "prettier --check .",
|
||||||
"start": "npm run start --workspace=@getpaseo/server",
|
"start": "npm run start --workspace=@getpaseo/server",
|
||||||
"android": "npm run android --workspace=@getpaseo/app",
|
"android": "npm run android --workspace=@getpaseo/app",
|
||||||
"android:fast": "npm run android:fast --workspace=@getpaseo/app",
|
"android:development": "npm run android:development --workspace=@getpaseo/app",
|
||||||
"android:debug": "npm run android:debug --workspace=@getpaseo/app",
|
|
||||||
"android:fast:build": "npm run android:fast:build --workspace=@getpaseo/app",
|
|
||||||
"android:debug:build": "npm run android:debug:build --workspace=@getpaseo/app",
|
|
||||||
"android:prod": "npm run android:prod --workspace=@getpaseo/app",
|
"android:prod": "npm run android:prod --workspace=@getpaseo/app",
|
||||||
|
"android:production": "npm run android:production --workspace=@getpaseo/app",
|
||||||
"android:release": "npm run android:prod --workspace=@getpaseo/app",
|
"android:release": "npm run android:prod --workspace=@getpaseo/app",
|
||||||
"ios": "npm run ios --workspace=@getpaseo/app",
|
"ios": "npm run ios --workspace=@getpaseo/app",
|
||||||
"web": "npm run web --workspace=@getpaseo/app",
|
"web": "npm run web --workspace=@getpaseo/app",
|
||||||
|
|||||||
@@ -1,22 +1,18 @@
|
|||||||
const pkg = require("./package.json");
|
const pkg = require("./package.json");
|
||||||
const appVariant = process.env.APP_VARIANT ?? "prod";
|
const appVariant = process.env.APP_VARIANT ?? "production";
|
||||||
|
|
||||||
const variants = {
|
const variants = {
|
||||||
prod: {
|
production: {
|
||||||
name: "Paseo",
|
name: "Paseo",
|
||||||
packageId: "sh.paseo",
|
packageId: "sh.paseo",
|
||||||
},
|
},
|
||||||
debug: {
|
development: {
|
||||||
name: "Paseo Debug",
|
|
||||||
packageId: "sh.paseo.debug",
|
|
||||||
},
|
|
||||||
fast: {
|
|
||||||
name: "Paseo Dev",
|
name: "Paseo Dev",
|
||||||
packageId: "sh.paseo.dev",
|
packageId: "sh.paseo.dev",
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
const variant = variants[appVariant] ?? variants.prod;
|
const variant = variants[appVariant] ?? variants.production;
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
expo: {
|
expo: {
|
||||||
|
|||||||
+6
-17
@@ -3,36 +3,25 @@
|
|||||||
"version": ">= 14.0.0"
|
"version": ">= 14.0.0"
|
||||||
},
|
},
|
||||||
"build": {
|
"build": {
|
||||||
"debug": {
|
"development": {
|
||||||
"developmentClient": true,
|
"developmentClient": true,
|
||||||
"distribution": "internal",
|
"distribution": "internal",
|
||||||
"channel": "debug",
|
"channel": "development",
|
||||||
"env": {
|
"env": {
|
||||||
"APP_VARIANT": "debug"
|
"APP_VARIANT": "development"
|
||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
"gradleCommand": ":app:assembleDebug"
|
"gradleCommand": ":app:assembleDebug"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"fast": {
|
"production": {
|
||||||
"developmentClient": true,
|
|
||||||
"distribution": "internal",
|
|
||||||
"channel": "fast",
|
|
||||||
"env": {
|
|
||||||
"APP_VARIANT": "fast"
|
|
||||||
},
|
|
||||||
"android": {
|
|
||||||
"gradleCommand": ":app:assembleDebugOptimized"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prod": {
|
|
||||||
"channel": "production",
|
"channel": "production",
|
||||||
"env": {
|
"env": {
|
||||||
"APP_VARIANT": "prod"
|
"APP_VARIANT": "production"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"submit": {
|
"submit": {
|
||||||
"prod": {}
|
"production": {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,13 +5,11 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "expo start",
|
"start": "expo start",
|
||||||
"reset-project": "node ./scripts/reset-project.js",
|
"reset-project": "node ./scripts/reset-project.js",
|
||||||
"android": "npm run android:fast",
|
"android": "npm run android:development",
|
||||||
"android:fast": "APP_VARIANT=fast bash ./scripts/android-run-variant.sh",
|
"android:development": "APP_VARIANT=development expo run:android --variant=debug",
|
||||||
"android:debug": "APP_VARIANT=debug bash ./scripts/android-run-variant.sh",
|
"android:production": "APP_VARIANT=production expo run:android --variant=release",
|
||||||
"android:fast:build": "APP_VARIANT=fast bash ./scripts/android-build-variant.sh",
|
"android:prod": "npm run android:production",
|
||||||
"android:debug:build": "APP_VARIANT=debug bash ./scripts/android-build-variant.sh",
|
"android:release": "npm run android:production",
|
||||||
"android:prod": "APP_VARIANT=prod npx expo prebuild --platform android --clean --no-install && (cd android && ./gradlew clean app:assembleRelease --rerun-tasks) && adb install -r android/app/build/outputs/apk/release/app-release.apk",
|
|
||||||
"android:release": "npm run android:prod",
|
|
||||||
"ios": "expo run:ios",
|
"ios": "expo run:ios",
|
||||||
"ios:release": "expo run:ios --configuration Release",
|
"ios:release": "expo run:ios --configuration Release",
|
||||||
"web": "expo start --web",
|
"web": "expo start --web",
|
||||||
|
|||||||
@@ -1,24 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
app_variant="${APP_VARIANT:-fast}"
|
|
||||||
|
|
||||||
case "$app_variant" in
|
|
||||||
fast)
|
|
||||||
gradle_task="app:assembleDebugOptimized"
|
|
||||||
apk_path="android/app/build/outputs/apk/debugOptimized/app-debugOptimized.apk"
|
|
||||||
;;
|
|
||||||
debug)
|
|
||||||
gradle_task="app:assembleDebug"
|
|
||||||
apk_path="android/app/build/outputs/apk/debug/app-debug.apk"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "APP_VARIANT must be one of: fast, debug"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
APP_VARIANT="$app_variant" npx expo prebuild --platform android --clean --no-install
|
|
||||||
(cd android && ./gradlew "$gradle_task")
|
|
||||||
|
|
||||||
echo "Built APK: ${apk_path}"
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
app_variant="${APP_VARIANT:-fast}"
|
|
||||||
metro_endpoint="${METRO_ENDPOINT:-localhost:8080}"
|
|
||||||
launch_app="${LAUNCH_APP:-1}"
|
|
||||||
|
|
||||||
case "$app_variant" in
|
|
||||||
fast)
|
|
||||||
package_id="sh.paseo.dev"
|
|
||||||
app_name="Paseo Dev"
|
|
||||||
;;
|
|
||||||
debug)
|
|
||||||
package_id="sh.paseo.debug"
|
|
||||||
app_name="Paseo Debug"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "APP_VARIANT must be one of: fast, debug"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if ! [[ "$metro_endpoint" =~ ^[A-Za-z0-9._-]+:[0-9]{1,5}$ ]]; then
|
|
||||||
echo "Invalid METRO_ENDPOINT '$metro_endpoint'. Expected host:port (for example macbook:8081)."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! command -v adb >/dev/null 2>&1; then
|
|
||||||
echo "adb is not installed or not on PATH."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! adb get-state >/dev/null 2>&1; then
|
|
||||||
echo "No Android device detected by adb."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
metro_host="${metro_endpoint%:*}"
|
|
||||||
metro_port="${metro_endpoint##*:}"
|
|
||||||
|
|
||||||
if [[ "$metro_host" == "localhost" || "$metro_host" == "127.0.0.1" ]]; then
|
|
||||||
if ! lsof -nP -iTCP:"${metro_port}" -sTCP:LISTEN >/dev/null 2>&1; then
|
|
||||||
if [[ "$metro_port" == "8080" ]] && lsof -nP -iTCP:8081 -sTCP:LISTEN >/dev/null 2>&1; then
|
|
||||||
metro_endpoint="localhost:8081"
|
|
||||||
metro_host="localhost"
|
|
||||||
metro_port="8081"
|
|
||||||
echo "Metro was not listening on localhost:8080; using localhost:8081."
|
|
||||||
else
|
|
||||||
echo "No Metro server detected on ${metro_endpoint}. Start Metro there or set METRO_ENDPOINT=host:port."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
adb reverse "tcp:${metro_port}" "tcp:${metro_port}" >/dev/null 2>&1 || true
|
|
||||||
fi
|
|
||||||
|
|
||||||
prefs_file="${package_id}_preferences.xml"
|
|
||||||
prefs_path="shared_prefs/${prefs_file}"
|
|
||||||
prefs_xml="<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>
|
|
||||||
<map>
|
|
||||||
<string name=\"debug_http_host\">${metro_endpoint}</string>
|
|
||||||
</map>"
|
|
||||||
|
|
||||||
adb shell run-as "$package_id" mkdir -p shared_prefs
|
|
||||||
printf '%s\n' "$prefs_xml" | adb shell run-as "$package_id" tee "$prefs_path" >/dev/null
|
|
||||||
|
|
||||||
echo "Configured ${app_name} (${package_id}) to use Metro at ${metro_endpoint}."
|
|
||||||
|
|
||||||
if [[ "$launch_app" == "1" ]]; then
|
|
||||||
adb shell am force-stop "$package_id" >/dev/null 2>&1 || true
|
|
||||||
adb shell monkey -p "$package_id" -c android.intent.category.LAUNCHER 1 >/dev/null
|
|
||||||
echo "Launched ${app_name}."
|
|
||||||
fi
|
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
app_variant="${APP_VARIANT:-fast}"
|
|
||||||
metro_endpoint="${METRO_ENDPOINT:-localhost:8080}"
|
|
||||||
|
|
||||||
case "$app_variant" in
|
|
||||||
fast)
|
|
||||||
gradle_variant="debugOptimized"
|
|
||||||
;;
|
|
||||||
debug)
|
|
||||||
gradle_variant="debug"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo "APP_VARIANT must be one of: fast, debug"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
APP_VARIANT="$app_variant" npx expo run:android --variant="$gradle_variant"
|
|
||||||
APP_VARIANT="$app_variant" METRO_ENDPOINT="$metro_endpoint" LAUNCH_APP=1 bash ./scripts/android-configure-metro-host.sh
|
|
||||||
Reference in New Issue
Block a user