Agent Skills
› fanfan-de/anybox
› android-emulator-qa
android-emulator-qa
GitHub用于在 Android 模拟器中通过 ADB 验证应用功能流程、复现 UI 缺陷。支持自动安装启动、基于 UI 树的坐标点击与滑动、截图及 Logcat 日志捕获,提供完整的自动化测试辅助命令与脚本指南。
Trigger Scenarios
需要在 Android 模拟器上执行自动化 UI 测试
需要复现或调试 Android 应用的界面交互问题
需要通过 ADB 控制模拟器进行功能验证
Install
npx skills add fanfan-de/anybox --skill android-emulator-qa -g -y
SKILL.md
Frontmatter
{
"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>
Version History
- 08dc189 Current 2026-07-05 19:08


