Token-efficient by default
Default output is a few lines. Drill into errors, warnings, or full logs only when you need them with --verbose and --json. About 96% less output than raw tools.
A production-ready skill of 29 scripts wrapping adb, uiautomator, avdmanager, and the Gradle wrapper with semantic interfaces designed for AI agents and developers.
Principles applied to every script.
Default output is a few lines. Drill into errors, warnings, or full logs only when you need them with --verbose and --json. About 96% less output than raw tools.
Find elements by meaning — text, type, or resource ID — not pixel coordinates. Built on the uiautomator hierarchy, so tests survive UI redesigns.
Everything runs through adb, so the same scripts drive emulators and physical devices. Multiple emulators are supported with batch operations and --serial targeting.
Class-based scripts, modern type hints, Black + Ruff CI, and a mocked pytest suite. Auto device detection. Idempotent emulator lifecycle (create / boot / shutdown / erase / delete).
Every script supports --help and --json, and auto-detects the connected device unless you pass --serial.
app_launcher.pyLaunch, terminate, install/uninstall APKs, deep links, list packages, app state. --launch · --terminate · --install · --uninstall · --open-url · --list · --stateemulator_boot.pyBoot AVDs with optional readiness wait and headless mode. --avd · --wait-ready · --timeout · --headless · --list-avdsemulator_shutdown.pyGracefully shut down emulators, with verification and batch support. --serial · --verify · --timeout · --allemulator_create.pyCreate AVDs by device type and API level. --device · --api · --name · --abi · --variant · --list-devices · --list-imagesemulator_delete.pyDelete AVDs permanently. --name · --listemulator_erase.pyFactory-reset an AVD, wiping user data without deleting it. --name · --force · --listbuild_and_test.pyGradle build/test with progressive disclosure; parses JUnit XML and Gradle/Kotlin/Java errors. --project · --module/-p · --variant · --clean · --test · --suite · --get-errors · --get-warnings · --get-log · --list-buildslog_monitor.pyReal-time logcat with package and severity filtering, dedup, and save-to-file. --app · --serial · --severity · --follow · --duration · --output · --clearscreen_mapper.pyAnalyze the current screen and list interactive elements by type. --serial · --list · --verbosenavigator.pyFind and interact with elements semantically (text, type, resource ID). --find-text · --find-type · --find-id · --tap · --enter-text · --listgesture.pySwipes, scrolls, and long press, including edge swipes. --swipe · --from-edge · --duration · --long-press · --scrollkeyboard.pyType text, press hardware keys/buttons, clear input. --text · --key · --button · --clearaccessibility_audit.pyWCAG checks: content descriptions, touch-target size, EditText hints, image accessibility. --serial · --output · --verbosevisual_diff.pyCompare two screenshots and generate a diff image. --image1 · --image2 · --output · --thresholdtest_recorder.pyDocument test execution with screenshots and UI hierarchy per step. --test-name · --output · --serial · --inline · --size · --app-nameapp_state_capture.pyAll-in-one debugging snapshot: screenshot, UI hierarchy, logs, app info. --package · --output · --serial · --logs/--no-logs · --screenshot-sizeprivacy_manager.pyGrant/revoke runtime permissions (20+ types), with batch support. --grant · --revoke · --list · --package · --list-permissionsstatus_bar.pyDemo-mode status bar: battery, charging, WiFi/mobile signal, time. --battery · --charging · --wifi · --mobile · --time · --resetpush_notification.pySend test notifications and list channels. --package · --title · --message · --id · --data · --list-channels · --methodappearance.pyDark/light mode and font scale, best-effort locale. --theme · --text-size · --font-scale · --locale · --resetlocation.pySimulate GPS via adb emu geo fix: fixed coords, city presets, GPX route replay (emulator only). --lat/--lng · --city · --gpx · --interval/--speed · --clear · --list-citiesandroid_health_check.shVerify the environment (ANDROID_HOME, adb, emulator, avdmanager, sdkmanager, java, Python, Pillow) and list devices/AVDs.device_list.pyList connected devices and defined AVDs with progressive disclosure. --get-details · --device-type/--nameemulator_selector.pySuggest the best AVD (running → recent → latest API → common models); list or boot one. --suggest · --list · --boot · --headless · --countlocalization_audit.pyAudit res/values*/strings.xml for missing keys per locale and placeholder mismatches. --res · --source · --locale · --strictcontainer.pyInspect a debuggable app's sandbox via adb shell run-as: files, shared_prefs, SQLite schema, snapshot export. --package · --ls · --cat · --shared-prefs · --databases · --exportmodel_inspector.pyInspect Room annotations, exported-schema JSON, and live SQLite schema (Room == SQLite). --source · --schema · --show-versions · --raw · --package · --dbanr_watcher.pyRecord & summarise ANRs/jank from logcat with session-based progressive disclosure. --start · --stop · --get-details · --list-sessions · --diff · --watch · --since · --terseThree shared modules back the scripts above — common/device_utils.py (ADB command building & device detection), common/screenshot_utils.py (capture & resize), and common/cache_utils.py (progressive-disclosure cache). The Gradle build system lives in the gradle/ subpackage.
Two commands. Restart Claude Code and the skill loads automatically.
/plugin marketplace add fluxxion82/android-emulator-skill
/plugin install android-emulator-skill@fluxxion82
Prerequisites: Android SDK with platform-tools & emulator · Python 3.8+ · ADB · Gradle (optional) · Pillow for screenshot resizing (optional).
Launch, map the screen, interact, and audit — all semantic, all token-light.
python scripts/app_launcher.py --launch com.example.app
python scripts/screen_mapper.py
python scripts/navigator.py --find-text "Login" --tap
python scripts/navigator.py --find-type EditText --enter-text "user@example.com"
python scripts/accessibility_audit.py