name: "android-emulator-qa" description: "Use when validating Android feature flows in an emulator with adb-driven launch, input, UI-tree inspection, screenshots, and logcat capture."
Android Emulator QA
Validate Android app flows in an emulator using adb for launch, input, UI-tree inspection, screenshots, and logs.
When to use
- QA a feature flow in an Android emulator.
- Reproduce UI bugs by driving navigation with adb input events.
- Capture screenshots and logcat output while testing.
Quick start
- List emulators and pick a serial:
adb devices
- Build and install the target variant:
./gradlew :<module>:install<BuildVariant> --console=plain --quiet- If unsure about task names:
./gradlew tasks --all | rg install
- Launch the app:
- Resolve activity:
adb -s <serial> shell cmd package resolve-activity --brief <package> - Start app:
adb -s <serial> shell am start -n <package>/<activity>
- Resolve activity:
- Capture a screenshot for visual verification:
adb -s <serial> exec-out screencap -p > /tmp/emu.png
adb control commands
- Tap (use UI tree-derived coordinates):
adb -s <serial> shell input tap <x> <y>
- Swipe:
adb -s <serial> shell input swipe <x1> <y1> <x2> <y2>- Avoid edges (start ~150-200 px from left/right) to reduce accidental back gestures.
- Text:
adb -s <serial> shell input text "hello"
- Back:
adb -s <serial> shell input keyevent 4
- UI tree dump:
adb -s <serial> exec-out uiautomator dump /dev/tty
Coordinate picking (UI tree only)
Always compute tap coordinates from the UI tree, not screenshots.
- Dump the UI tree to a step-specific file:
adb -s <serial> exec-out uiautomator dump /dev/tty > /tmp/ui-settings.xml
- Find the target node and derive center coordinates (
x y) from bounds:- Bounds format:
bounds="[x1,y1][x2,y2]" - Helper script:
python3 <path-to-skill>/scripts/ui_pick.py /tmp/ui-settings.xml "Settings"
- Bounds format:
- If the node is missing and there are
scrollableelements:- swipe, re-dump, and re-search at least once before concluding the target is missing.
- Tap the center:
adb -s <serial> shell input tap <x> <y>
UI tree skeleton (helper)
Use this helper to create a compact, readable overview before inspecting full XML.
- Dump full UI tree:
adb -s <serial> exec-out uiautomator dump /dev/tty > /tmp/ui-full.xml
- Generate summary:
python3 <path-to-skill>/scripts/ui_tree_summarize.py /tmp/ui-full.xml /tmp/ui-summary.txt
- Review
/tmp/ui-summary.txtto choose likely targets, then compute exact bounds from full XML.
Logs (logcat)
- Clear logs:
adb -s <serial> logcat -c
- Stream app process logs:
- Resolve pid:
adb -s <serial> shell pidof -s <package> - Stream:
adb -s <serial> logcat --pid <pid>
- Resolve pid:
- Crash buffer only:
adb -s <serial> logcat -b crash
- Save logs:
adb -s <serial> logcat -d > /tmp/logcat.txt
Package shortcuts
- List installed packages:
adb -s <serial> shell pm list packages
- Filter to your namespace:
adb -s <serial> shell pm list packages | rg <company_or_app_id>
- Confirm the activity resolves before launching:
adb -s <serial> shell cmd package resolve-activity --brief <package>