Build, test, and automate Android apps from Claude Code using accessibility-driven navigation and structured, token-efficient output instead of pixel coordinates.
Attribution. This project is the Android counterpart of, and was originally seeded from,
ios-simulator-skillby Conor Luddy. It is maintained independently under its own name and owner; that upstream project is gratefully acknowledged here.
Under active repair. Feature parity with the upstream iOS skill is done; the work now is
correcting scripts that were written against assumed adb/Gradle output rather than recorded
output. The repository uses the Claude Code plugin layout, Python 3.12+, strict Black/Ruff linting,
and a mocked pytest suite. See android-emulator-skill/skills/android-emulator-skill/SKILL.md for
the authoritative script list; if a flag documented there does not behave as described, that is a
bug worth reporting.
- Semantic navigation — find elements by text, type, or resource ID, not pixel coordinates.
- Token-efficient — concise 3–5 line default output;
--verboseand--jsonfor detail. - Emulators and real devices —
--serialwith auto-detection. - Lifecycle management — create / boot / shutdown / erase / delete AVDs.
- Gradle build & test, logcat monitoring, accessibility audit, visual diff, test recording, state capture, permissions, status bar, notifications.
SCRIPTS=android-emulator-skill/skills/android-emulator-skill/scripts
# Launch an app, inspect the screen, interact semantically
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"Every script supports --help and --json.
platform-toolsonPATH— every script goes throughadb.cmdline-toolsonPATHfor AVD management (avdmanager,sdkmanager). Not installed by default with Android Studio, and the legacytools/bin/avdmanageris not a substitute: it dies withNoClassDefFoundError: javax/xml/bind/annotation/XmlSchemaon Java 11+, so on a modern JDK it cannot run at all. Install "Android SDK Command-line Tools (latest)", orsdkmanager 'cmdline-tools;latest'.- Java 21 — what current Android Gradle builds expect.
- Python 3.12+.
- Optional: Pillow, for screenshot resizing and image diffs.
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS example
export PATH="$PATH:$ANDROID_HOME/platform-tools"
export PATH="$PATH:$ANDROID_HOME/emulator" # the emulator DIRECTORY, not the SDK root
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"Put
$ANDROID_HOME/emulatoronPATH, not$ANDROID_HOME. The SDK root contains a directory namedemulator; the binary is$ANDROID_HOME/emulator/emulator. With the root onPATH, launchingemulatorhits the directory and fails withPermissionError: [Errno 13] Permission denied— not the "not found" you would go looking for.
This skill is packaged as a Claude Code plugin (.claude-plugin/marketplace.json +
android-emulator-skill/.claude-plugin/plugin.json).
claude plugin marketplace add fluxxion82/android-emulator-skill
claude plugin install android-emulator-skill@fluxxion82@fluxxion82 is the name field in marketplace.json, not a GitHub username — they coincide here.
claude plugin marketplace update fluxxion82 # git-pull the marketplace repo
claude plugin update android-emulator-skill # apply it (restart Claude Code afterwards)The second alone does nothing: it moves the installed plugin to whatever the first fetched. Running only it looks exactly like "no update available".
The skill Claude Code loads is the inner directory
android-emulator-skill/skills/android-emulator-skill (the one holding
SKILL.md and scripts/), not the repository root. Clone the repo
somewhere of your own, then link that directory into place:
git clone https://github.com/fluxxion82/android-emulator-skill ~/src/android-emulator-skill
# Personal: available in every project
ln -s ~/src/android-emulator-skill/android-emulator-skill/skills/android-emulator-skill ~/.claude/skills/android-emulator-skill
# Project-local: commit it, or add it to .gitignore
ln -s ~/src/android-emulator-skill/android-emulator-skill/skills/android-emulator-skill .claude/skills/android-emulator-skillUse cp -R in place of ln -s if you would rather not have a symlink; a
git pull then needs the copy repeating.
android-emulator-skill/skills/android-emulator-skill/SKILL.md— script reference + roadmap.DEV.md— development environment, linting, tests, CI, release process.CLAUDE.md— architecture and conventions for contributors and Claude Code.
MIT — see LICENSE.md.