tools/manual_tests/frb-local-android-host-runtime-dev-env.md
Verify that the FRB local development workflow can run Android runtime validation with a host-managed Android Emulator and FRB/Flutter commands running inside the per-worktree Docker container.
.claude/skills/frb-dev-env..claude/skills/frb-manual-test/SKILL.md, .claude/skills/frb-dev-env/SKILL.md, .claude/skills/frb-android-emulator-prepare/SKILL.md, .claude/skills/frb-docker/SKILL.md, .claude/skills/frb-test/SKILL.mdRun this after changing the FRB dev environment helper, host Android Emulator workflow, Docker image Android SDK contents, Flutter Android tooling, CargoKit Android integration, or any behavior that must be validated on a running host Android Emulator from local Docker.
fzyzcjy/flutter_rust_bridgeFRB_API_35; prepare it with .claude/skills/frb-android-emulator-prepare/SKILL.md.flutter --version inside the Docker container.dart --version inside the Docker container.rustc --version and cargo --version inside the Docker container.Run preparation commands from the repository root of the checkout being tested.
git rev-parse --show-toplevel
git status --short
git submodule update --init --recursive
sw_vers
which adb
adb version
.claude/skills/frb-dev-env/frb_dev_env.py docker info
.claude/skills/frb-dev-env/frb_dev_env.py docker create
Prepare the SDK packages and AVD using .claude/skills/frb-android-emulator-prepare/SKILL.md, then start the emulator with a stable console port:
.claude/skills/frb-dev-env/frb_dev_env.py android env
.claude/skills/frb-dev-env/frb_dev_env.py android emulator --avd FRB_API_35 --port 5554
frb_example/flutter_via_create.Record host Android Emulator state. emulator-5554 should be present and authorized.
adb devices -l
Record Docker tool versions.
.claude/skills/frb-dev-env/frb_dev_env.py docker exec -- bash -lc '
set -euo pipefail
flutter --version
dart --version
rustc --version
cargo --version
'
Confirm Docker-side ADB can see the host emulator through Docker-local ADB connected directly to the emulator endpoint:
.claude/skills/frb-dev-env/frb_dev_env.py docker exec --android-emulator-adb -- adb devices -l
Run the Android Flutter native integration test from Docker. For host console port 5554, use Docker-visible serial host.docker.internal:5555:
.claude/skills/frb-dev-env/frb_dev_env.py docker exec --android-emulator-adb -- \
bash -lc './frb_internal test-flutter-native --package frb_example--flutter_via_create --flutter-test-args "--device-id host.docker.internal:5555"'
Confirm the host checkout did not gain unexpected generated or cache files.
git status --short
The Android host runtime coverage test passes when host ADB sees the emulator, Docker-side ADB sees the same emulator through --android-emulator-adb, and the Android Flutter native integration test completes successfully against the Docker-visible emulator serial.
adb devices -l
.claude/skills/frb-dev-env/frb_dev_env.py docker exec --android-emulator-adb -- adb devices -l
./frb_internal test-flutter-native --package frb_example--flutter_via_create --flutter-test-args "--device-id host.docker.internal:5555"
The test fails if any of the following happens:
--android-emulator-adb.git status --short shows unexpected local changes after the run.The test is blocked, not failed, if the host has no prepared Android Emulator environment.
git status --short output.adb devices -l shows unauthorized, unlock the emulator and accept the debugging prompt if one appears.adb devices -l shows emulator-5554, then retry .claude/skills/frb-dev-env/frb_dev_env.py docker exec --android-emulator-adb -- adb devices -l.127.0.0.1, ensure the command uses --android-emulator-adb so the ADB server and adb forward live inside Docker..claude/skills/frb-android-emulator-prepare/SKILL.md and prepare the host Android Emulator environment before retrying.Optionally stop the emulator:
adb -s emulator-5554 emu kill
git status --short
Keep the per-worktree Docker container and the Android SDK/AVD caches unless the user explicitly wants to delete them.
This scenario can be automated on a dedicated macOS Android host with a prepared emulator and Docker Desktop. Keep this as a manual report while emulator lifecycle and local Docker networking remain host-specific.