Problem
native_build({ platform: "android" }) currently runs expo run:android, which requires a local Android SDK, adb, and a booted emulator. On developer machines without the Android SDK installed (a common setup for web-focused contributors, CI environments, or M-series Macs without full Android tooling), the build fails immediately with no useful fallback.
The README "Where to take it next" explicitly flags this gap: "an eas build fallback when there's no local native toolchain".
By contrast, iOS has a natural local path (Xcode + Simulator on macOS), so this gap is Android-specific.
Proposed Approach
Extend native_build with an optional mode parameter (or auto-detect):
native_build({ platform: "android", mode?: "local" | "eas" | "auto" })
"local" (current behavior) — runs expo run:android; fails fast with a clear message if adb / SDK is absent.
"eas" — runs eas build --platform android --profile development (or --profile preview), streaming output to the timeline. Requires eas-cli to be installed (npx eas-cli as fallback).
"auto" (default) — probe for adb / a booted device first; fall back to eas if absent, surfacing a clear message explaining the switch.
The Settings → native readiness preflight (currently iOS+Android SDK checks) should surface EAS CLI availability alongside SDK presence so the agent and user know which path will be taken.
Streaming output should land on the timeline the same way expo run:android output does today (same native source, same dev_start-style line-by-line tee).
Affected Files
src/toolSpecs.ts — extend native_build schema with mode param
src/toolLayer.ts — native_build handler logic
src/reactNativeController.ts — Android build orchestration
cockpit/main.ts — native readiness preflight UI integration
Problem
native_build({ platform: "android" })currently runsexpo run:android, which requires a local Android SDK,adb, and a booted emulator. On developer machines without the Android SDK installed (a common setup for web-focused contributors, CI environments, or M-series Macs without full Android tooling), the build fails immediately with no useful fallback.The README "Where to take it next" explicitly flags this gap: "an
eas buildfallback when there's no local native toolchain".By contrast, iOS has a natural local path (Xcode + Simulator on macOS), so this gap is Android-specific.
Proposed Approach
Extend
native_buildwith an optionalmodeparameter (or auto-detect):"local"(current behavior) — runsexpo run:android; fails fast with a clear message ifadb/ SDK is absent."eas"— runseas build --platform android --profile development(or--profile preview), streaming output to the timeline. Requireseas-clito be installed (npx eas-clias fallback)."auto"(default) — probe foradb/ a booted device first; fall back toeasif absent, surfacing a clear message explaining the switch.The Settings → native readiness preflight (currently iOS+Android SDK checks) should surface EAS CLI availability alongside SDK presence so the agent and user know which path will be taken.
Streaming output should land on the timeline the same way
expo run:androidoutput does today (samenativesource, samedev_start-style line-by-line tee).Affected Files
src/toolSpecs.ts— extendnative_buildschema withmodeparamsrc/toolLayer.ts—native_buildhandler logicsrc/reactNativeController.ts— Android build orchestrationcockpit/main.ts— native readiness preflight UI integration