Development Builds

Development Builds with expo-dev-client

A development build is your own app, with your native modules and configuration, plus Expo 6,418 's developer tools: "your own version of Expo Go 6,418 ", in Expo's words. The debug APK of Android Emulator is most of the way there; the expo-dev-client package adds a launcher that lists running dev servers, a richer dev menu and a URL scheme for opening a given server:

Turning the debug build into a development buildShell
npx expo install expo-dev-client
npx expo prebuild --platform android
cd android && ./gradlew assembleDebug \
  -PreactNativeDevServerPort=8086 -PreactNativeArchitectures=x86_64
Output
› Installing 1 SDK 57.0.0 compatible native module using npm
...
BUILD SUCCESSFUL in 2m 7s
447 actionable tasks: 109 executed, 338 up-to-date

Prebuild registered the scheme exp+booknest (from the slug), and -PreactNativeArchitectures=x86_64 compiled native code for the emulator's CPU only, which is why this build took two minutes, not twelve. Leave that flag off for builds you hand to people with real phones. The scheme opens the app straight onto a server:

Opening the development build on a specific Metro serverShell
adb -s emulator-5566 shell am start -a android.intent.action.VIEW \
  -d "exp+booknest://expo-development-client/?url=http%3A%2F%2F10.0.2.2%3A8086"

Rebuild only when the native side changes: a library with native code, a native setting in app.json, or an SDK upgrade. Screens, styles, logic and data reach the build through Metro. npx expo run:android makes the same build locally without an account; eas build --profile development makes it in the cloud (not run here), and is the way to get an iOS development build without a Mac.