{ // Alarm client (bare React Native, no Expo) — house task set. // Metro is pinned to 127.0.0.1:8089 (see android/gradle.properties and // package.json's `start` script). 8088 is NOT Metro here: it is the Alarm // service's documented host port, so direct mode reverses it separately and // the two can never fight over one host port. // device 127.0.0.1:8089 -> host 127.0.0.1:8089 (Metro packager) // device 127.0.0.1:8088 -> host 127.0.0.1:8088 (Alarm direct) // device 127.0.0.1:8080 -> host 127.0.0.1:8080 (Maestro) "version": "2.0.0", "tasks": [ { "label": "Start Metro", "type": "shell", "command": "bun start", "isBackground": true, "problemMatcher": { "owner": "metro", "pattern": { "regexp": "^(.*)$", "file": 1, "location": 1, "message": 1 }, "background": { "activeOnStart": true, "beginsPattern": "Welcome to Metro|Starting Metro Bundler", "endsPattern": "Metro waiting on keystroke|Dev server running" } }, "presentation": { "reveal": "always", "panel": "dedicated" } }, { "label": "Setup adb reverse", "type": "shell", "command": "adb reverse tcp:8089 tcp:8089 && adb reverse tcp:8088 tcp:8088 && adb reverse tcp:8080 tcp:8080 && adb reverse --list", "problemMatcher": [] }, { "label": "Launch Android", "type": "shell", "command": "bash scripts/android.sh", "dependsOn": "Setup adb reverse", "problemMatcher": [] }, { "label": "Lint", "type": "shell", "command": "bun run lint", "problemMatcher": ["$eslint-stylish"] }, { "label": "Test", "type": "shell", "command": "bun run test", "group": "test", "problemMatcher": [] }, { "label": "Typecheck", "type": "shell", "command": "bunx tsc --noEmit", "problemMatcher": ["$tsc"] }, { "label": "Build Debug APK (arm64-v8a)", "type": "shell", "command": "cd android && ./gradlew :app:assembleDebug -PreactNativeArchitectures=arm64-v8a", "problemMatcher": [] } ] }