Agent skill

Injecting Input And State

by skydoves in skydoves/android-testing-skills

A skill your agent uses to drive an Android device from the host shell — inject taps, swipes, text, key events, and drag-and-drop via adb shell input; resize the display with wm size / wm density…

Apache-2.0Auto-check passedMobile

Install Injecting Input And State

skills CLI
$ npx skills add skydoves/android-testing-skills --skill injecting-input-and-state -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install skydoves/android-testing-skills injecting-input-and-state --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/adb/control/injecting-input-and-state .claude/skills/injecting-input-and-state && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
injecting-input-and-state
GitHub stars
333
Token cost
~4.8k tokens
SKILL.md length
1,570 words
Files
1
Skills in repo
50
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses to drive an Android device from the host shell — inject taps, swipes, text, key events, and drag-and-drop via adb shell input; resize the display with wm size / wm density…

  • Drive an Android device from the host shell — inject taps
  • SKILL.md covers When to use this skill, When NOT to use this skill, Prerequisites and input — synthesised user events, plus 9 more sections
  • Calls adb
  • Drag-and-drop via adb shell input

What it does

Injecting Input And State is an agent skill from skydoves/android-testing-skills. Use this skill to drive an Android device from the host shell — inject taps, swipes, text, key events, and drag-and-drop via adb shell input; resize the display with wm size / wm density; flip hermetic-test settings with settings put global windowanimationscale 0; reset app state with pm clear vs am force-stop; launch Activities with am start -n pkg/.Activity; and use the modern cmd <service wrapper (cmd wifi, cmd connectivity, cmd uimode night, cmd locale set-app-locales) instead of the deprecated svc aliases on…

Its SKILL.md is about 4.8k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Mobile testing and debugging. It works with Android. The repository describes itself as: ⚡️ A set of skills for Android testing: Compose UI, AndroidX Test, JVM unit tests, and ADB. The licence is Apache-2.0.

When your agent uses it

  • Drive an Android device from the host shell — inject taps
  • Drag-and-drop via adb shell input
  • Resize the display with wm size / wm density
  • Flip hermetic-test settings with settings put global windowanimationscale 0

Example prompts

  • “input tap”
  • “input swipe”
  • “input text spaces”
  • “/injecting-input-and-state”

What it can do on your machine

Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • adb

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • developer.android.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Injecting Input And State loads about 4.8k tokens when it runs. Until then it costs about 213 tokens; SKILL.md has 1,570 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~213
When it runs · the whole SKILL.md, loaded when a task matches
~4.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from skydoves/android-testing-skills at commit 8665ed5, republished under its Apache-2.0 licence (© skydoves). 1,570 words, ~4,825 tokens.

Download SKILL.mdSave it as .claude/skills/injecting-input-and-state/SKILL.md (or your agent's skills folder).
name
injecting-input-and-state
description
Use this skill to drive an Android device from the host shell — inject taps, swipes, text, key events, and drag-and-drop via `adb shell input`; resize the display with `wm size` / `wm density`; flip hermetic-test settings with `settings put global window_animation_scale 0`; reset app state with `pm clear` vs `am force-stop`; launch Activities with `am start -n pkg/.Activity`; and use the modern `cmd <service>` wrapper (`cmd wifi`, `cmd connectivity`, `cmd uimode night`, `cmd locale set-app-locales`) instead of the deprecated `svc` aliases on API 30+. If the user mentions "input tap", "input swipe", "input text spaces", "KEYCODE_BACK", "wm size for screen-size matrix", "settings put animation_scale", "force-stop vs pm clear", "svc wifi no-op", "cmd wifi set-wifi-enabled", or "am start intent extras", use this skill.
license
Apache-2.0. See LICENSE for complete terms.
metadata.author
Jaewoong Eum (skydoves)
metadata.keywords
android-testing, adb, input-injection, hermetic-tests, wm-size, settings-put, cmd-service, force-stop, pm-clear, keycode

Injecting Input and State — Drive the Device From the Shell

This skill covers the on-device shell surface a test/QA engineer drives over adb to simulate user gestures, override the screen configuration, flip system settings, reset app state, and launch Activities. Transport (adb devices, USB/TCP) lives in ../../architecture/understanding-adb-architecture/SKILL.md; capturing artefacts after driving the device lives in ../../capture/capturing-screenshots-and-screenrecord/SKILL.md.

When to use this skill

  • The developer needs to script a user journey from CI without writing instrumentation: tap, swipe, type text, press hardware keys.
  • A bug repro requires a specific screen size or density (wm size 411x731, wm density 320) without recreating an emulator AVD.
  • The test suite is flaky because animations are on; the developer wants the canonical hermetic preamble (window_animation_scale = 0 etc.).
  • The developer needs to clear app data between runs and is unsure whether am force-stop is enough (it is not).
  • A script uses adb shell svc wifi disable and silently does nothing on API 30+ — the modern cmd wifi set-wifi-enabled disabled is the fix.
  • The developer needs to launch a deep-link Activity with typed extras (--ez, --ei, --es).

When NOT to use this skill

  • The bytes need to leave the device (screenshots, logs, DB). Use ../../capture/capturing-screenshots-and-screenrecord/SKILL.md, ../../observability/extracting-logs-with-logcat/SKILL.md, ../../transfer/extracting-test-artifacts/SKILL.md.
  • Driving the device from inside an instrumentation test, not from the host. Use ../../../instrumentation/scenarios/launching-activities-with-activityscenario/SKILL.md or UiAutomator.
  • Installing or uninstalling APKs. Use ../../apps/installing-and-managing-apps/SKILL.md.
  • Connecting to the device in the first place. Use ../../devices/connecting-to-devices/SKILL.md or ../../devices/connecting-over-wifi/SKILL.md.

Prerequisites

  • A reachable device or emulator (adb get-state returns device).
  • Platform Tools 23+ on the host. Quoting through adb shell is double-shell (ssh-style) since Platform Tools 23 — load-bearing for any string with spaces (developer.android.com/tools/adb#shellcommands).
  • For cmd wrapper APIs and reliable shell exit codes: device API 24+ (cmd introduced API 24).

input — synthesised user events

input is the on-device wrapper around InputManager.injectInputEvent(). The full grammar:

input [<source>] <command> [<arg>...]

<source> defaults per command (touchscreen for tap/swipe, keyboard for text/keyevent).

Tap, swipe, draganddrop
bash
adb shell input tap <x> <y>
adb shell input swipe <x1> <y1> <x2> <y2> [<duration_ms>]
adb shell input draganddrop <x1> <y1> <x2> <y2> [<duration_ms>]
adb shell input roll <dx> <dy>                        # rotary/trackball axes
adb shell input motionevent <DOWN|UP|MOVE|CANCEL> <x> <y>

swipe defaults to ~300 ms when <duration_ms> is omitted. To synthesise a long-press, swipe in place for the long-press timeout: input swipe <x> <y> <x> <y> 1000. draganddrop differs from swipe in that it emits the drag-and-drop gesture sequence (DOWN → MOVE → UP) consumable by View.OnDragListener, not the same event stream as swipe.

Text input — quoting trap
bash
adb shell input text "<string>"

Caveats (from developer.android.com/tools/adb):

  • Spaces MUST be encoded as %s. input text "hello world" types hello, then nothing.
  • Shell metacharacters (', ", &, (, ), <, >, |, ;, \, backtick) MUST be escaped twice — once for the local shell, once for the device-side shell.
  • Non-ASCII / Unicode is unreliable through input text. Use UiAutomator UiObject2.setText(...) for those.
Key events
bash
adb shell input keyevent [--longpress|--doubletap] <KEYCODE> [<KEYCODE>...]
adb shell input keyevent <NUMERIC_CODE>

Test-relevant KEYCODE_* (KeyEvent constants from frameworks/base; full table in research note A2):

MnemonicNumericNotes
KEYCODE_HOME3Press Home (does not always wake screen).
KEYCODE_BACK4Back button.
KEYCODE_DPAD_UP/DOWN/LEFT/RIGHT/CENTER19-23TV / focus traversal.
KEYCODE_VOLUME_UP/DOWN/MUTE24/25/164
KEYCODE_POWER26Toggles screen off/on.
KEYCODE_TAB61
KEYCODE_ENTER66
KEYCODE_DEL67Backspace.
KEYCODE_MENU82
KEYCODE_APP_SWITCH187Recents button.
KEYCODE_WAKEUP224Wake without unlocking.
KEYCODE_SLEEP223Force sleep.

Wake + dismiss-keyguard for emulator with no lock:

bash
adb shell input keyevent KEYCODE_WAKEUP
adb shell input keyevent 82                     # menu, dismiss the AOSP swipe-up
Source prefixes

input <source> <command> maps to InputDevice.SOURCE_*. Use a source prefix when a screen has multiple input listeners or when targeting non-touch hardware:

SourceTypical use
touchscreenDefault for tap, swipe, draganddrop.
touchpadExternal touchpads (Chromebook / Android tablet keyboard).
dpadTV/focus traversal: input dpad keyevent KEYCODE_DPAD_DOWN.
keyboardDefault for text, keyevent.
mouseMouse buttons + scroll.
trackballTrackball roll.
gamepad / joystickGamepad buttons / joystick axes.
stylusPressure-aware touch (S-Pen).

wm — display size and density overrides

wm is the shell wrapper for IWindowManager. The test-relevant subcommands:

bash
adb shell wm size                               # read current logical size
adb shell wm size 1080x1920                     # override
adb shell wm size reset                         # restore device default

adb shell wm density                            # read current dpi
adb shell wm density 320                        # override
adb shell wm density reset

adb shell wm dismiss-keyguard                   # insecure keyguard only
adb shell wm user-rotation [free|lock [<rotation>]]   # 0,1,2,3 = 0/90/180/270

Use case — screen-size / density matrix without recreating the emulator:

bash
# Per configuration in the matrix
adb shell wm size 411x731
adb shell wm density 240
# … run tests …
adb shell wm size reset
adb shell wm density reset

Caveats:

  • MUST call reset in @AfterClass / suite teardown — otherwise the device stays in the modified configuration after the run, breaking later runs and any human user.
  • wm size / wm density trigger a configuration change that recreates the foreground Activity. Treat them as between-test knobs, not mid-test.
  • am display-size / am display-density are equivalent legacy spellings; wm is preferred.

settings — hermetic test state

bash
adb shell settings [--user <id>] get   <namespace> <key>
adb shell settings [--user <id>] put   <namespace> <key> <value> [<tag>] [default]
adb shell settings [--user <id>] delete <namespace> <key>
adb shell settings [--user <id>] reset <namespace> [<package>] [untrusted_defaults|untrusted_clear|trusted_defaults]
adb shell settings [--user <id>] list  <namespace>

<namespace> is one of global, system, secure.

The hermetic preamble — animation knobs

Set all three to 0 for stable instrumented and screenshot tests:

bash
adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0

Or via Gradle: testOptions.animationsDisabled = true.

Other test-relevant keys
NamespaceKeyPurpose
systemfont_scaleFloat (e.g. 1.0, 1.3); type-scale tests.
secureaccessibility_enabled1 to enable a11y; pair with enabled_accessibility_services.
secureenabled_accessibility_servicesCSV pkg/.Service for a11y tests.
securedefault_input_methodForce a known IME.
secureshow_ime_with_hard_keyboard1 to keep IME visible on emulators.
securelong_press_timeoutStabilise long-press tests.
globalairplane_mode_onPair with am broadcast android.intent.action.AIRPLANE_MODE.
globalpolicy_controlE.g. immersive.full=* to hide system bars.

App state — am force-stop vs pm clear

CommandKills processes?Clears data/cache/prefs?Resets runtime permissions?
am force-stop <pkg>YesNoNo
pm clear <pkg>Yes (implicitly)YesYes
cmd activity stop-app <pkg>Yes (modern, API 28+)NoNo

For a hermetic between-test reset, use pm clear. For "kill the process so the next launch is cold", am force-stop is enough. See ../../apps/installing-and-managing-apps/SKILL.md for the full pm surface.

Launching Activities — am start

bash
# Most reliable for tests: explicit component.
adb shell am start -n com.example.app/.MainActivity

# Force-stop first, then launch (clean cold start).
adb shell am start -S -W -n com.example.app/.MainActivity

# Launch by action + URI (default handler for https://).
adb shell am start -a android.intent.action.VIEW -d 'https://example.com'

# Pass typed extras.
adb shell am start -n com.example.app/.MainActivity \
  --es screen "settings" --ez debug true --ei count 42

# Return to launcher between tests.
adb shell am start -a android.intent.action.MAIN -c android.intent.category.HOME

Intent specifier flags (abridged from developer.android.com/tools/adb#IntentSpec):

TokenEffect
-a actionIntent action (e.g. android.intent.action.VIEW).
-d data_uriData URI.
-t mime_typeMIME type.
-c categoryCategory.
-n componentExplicit component (pkg/.Activity).
-f flagsHex setFlags() value.
`--es-e key value`
--ez key boolBoolean extra.
--ei key intInt extra.
--el key longLong extra.
--ef key floatFloat extra.
--eu key uriURI extra.
--ecn key componentComponentName extra.
--eia/--ela/--efa key v[,v...]Array extras.
--activity-clear-top etc.Map to FLAG_ACTIVITY_*.
-SForce-stop the target before starting.
-WWait for launch to complete.
Show full SKILL.md (675 more words)Show less

cmd <service> — the modern wrapper

cmd is a generic wrapper that calls into a binder service's onShellCommand. Available since API 24. To list services: adb shell cmd -l (or dumpsys -l). Test-relevant entry points:

InvocationEffect
cmd activity stop-app <pkg>Modern equivalent of am force-stop.
cmd activity broadcast …Same as am broadcast.
cmd package install -r -t -g <path>pm install equivalent.
cmd package compile -m speed -f <pkg>Force AOT compilation.
`cmd appops set <pkg> <op> allowdeny
cmd jobscheduler run -f <pkg> <jobId>Force a JobService to run now.
`cmd uimode night yesno
cmd locale set-app-locales <pkg> --locales en-USPer-app locales (Android 13+).
cmd statusbar expand-notifications / collapseExpand/collapse the shade.
`cmd wifi set-wifi-enabled enableddisabled`
`cmd connectivity airplane-mode enabledisable`
cmd testharness enableReset device to a hermetic test-harness state (Android 10+).
svc deprecation on API 30+

svc data, svc wifi, svc bluetooth are no-ops on API 30+ unless invoked from a privileged shell (corpus §I.10). The preferred replacements are the cmd wrappers above.

Patterns

Pattern: WRONG — svc wifi disable on API 30+
bash
# WRONG
adb shell svc wifi disable
# WRONG because: silently no-ops on API 30+ since the svc CLI was demoted from a privileged
# helper to an ordinary shell command. Exit code 0, Wi-Fi still on. The script proceeds
# under a wrong assumption — exactly the worst kind of failure mode.
bash
# RIGHT
adb shell cmd wifi set-wifi-enabled disabled
adb shell cmd wifi status                       # verify
Pattern: WRONG — am force-stop for a between-test reset
bash
# WRONG
adb shell am force-stop com.example.app
./run-next-test.sh
# WRONG because: am force-stop kills the process but leaves shared prefs, databases, the
# image cache, and granted runtime permissions intact. The "next test" inherits state
# from the previous run.
bash
# RIGHT
adb shell pm clear com.example.app
adb shell pm clear com.example.app.test         # also reset test process state
./run-next-test.sh

(Test Orchestrator with clearPackageData: 'true' is the equivalent inside Gradle — see ../../tests/running-instrumented-tests-via-adb/SKILL.md.)

Pattern: WRONG — input text "hello world"
bash
# WRONG
adb shell input text "hello world"
# WRONG because: spaces in `input text` MUST be encoded as %s. The above types only "hello".
bash
# RIGHT
adb shell input text 'hello%sworld'
Pattern: hermetic preamble + Activity launch
bash
adb shell settings put global window_animation_scale 0
adb shell settings put global transition_animation_scale 0
adb shell settings put global animator_duration_scale 0
adb shell pm clear com.example.app
adb shell am start -S -W -n com.example.app/.MainActivity

-S force-stops first; -W blocks until the launch completes.

Pattern: TV / focus navigation via dpad
bash
adb shell input dpad keyevent KEYCODE_DPAD_DOWN
adb shell input dpad keyevent KEYCODE_DPAD_DOWN
adb shell input dpad keyevent KEYCODE_DPAD_CENTER

Source-prefixing dpad ensures the events route to TV-style focus handlers, not the touchscreen pipeline.

Mandatory rules

  • MUST use cmd wifi set-wifi-enabled / cmd connectivity airplane-mode / cmd bluetooth_manager enable on API 30+. MUST NOT rely on svc wifi / svc bluetooth / svc data — they no-op silently on modern releases.
  • MUST use pm clear <pkg> (not am force-stop) when the goal is a hermetic between-test reset. force-stop only kills processes; data is untouched.
  • MUST encode spaces in input text as %s; MUST double-shell quote (ssh-style) any string with shell metacharacters. Platform Tools 23+ (developer.android.com/tools/adb#shellcommands).
  • MUST call wm size reset and wm density reset in suite teardown when the suite overrode them. A leaked override breaks every subsequent run on that device.
  • MUST set the three animation scales to 0 (or use testOptions.animationsDisabled = true in Gradle) before any UI-asserting test run.
  • MUST NOT use Thread.sleep between adb shell input calls to "let the UI catch up". Inside an instrumentation test, use Compose's idle synchronisation (../../../compose/synchronization/synchronizing-with-idle/SKILL.md); from a host script, use adb shell am start -W to block on Activity launch and adb shell wait-for-device between reboots.
  • MUST NOT assume adb shell am instrument returns a meaningful exit code without -w. See ../../tests/running-instrumented-tests-via-adb/SKILL.md and ../../automation/scripting-adb-for-ci/SKILL.md.
  • PREFERRED: am start -S -W -n pkg/.Activity for cold-start launches in tests — -S resets, -W blocks until ready.

Verification

  • adb shell settings get global window_animation_scale returns 0 (or 0.0) before tests run; same for transition_animation_scale and animator_duration_scale.
  • No script in scripts/ or .github/workflows/ uses svc wifi / svc bluetooth / svc data.
  • Every am force-stop between tests is paired with (or replaced by) pm clear.
  • No input text "<string with spaces>" exists; all spaces are %s.
  • Every wm size <override> in setup has a matching wm size reset in teardown.
  • CI passes 50 consecutive runs without a "device entered prior config" flake.

References

  • developer.android.com/tools/adb — am, pm, input, wm, settings, intent specs (https://developer.android.com/tools/adb).
  • developer.android.com/tools/adb#shellcommands — quoting through adb shell since Platform Tools 23.
  • developer.android.com/reference/android/view/KeyEvent — KEYCODE_* constants table.
  • developer.android.com/training/testing/instrumented-tests/stability — the canonical animation-scale-zero recipe.
  • developer.android.com/studio/test/advanced-test-setup#use-gradle-managed-devices — testOptions.animationsDisabled.
  • Research note tasks/research/A2-adb-shell-commands.md — full input / wm / settings / am / pm / cmd / svc tables and verbatim quotes.
  • Sibling skill: ../../architecture/understanding-adb-architecture/SKILL.md — three-piece architecture, server, daemon.
  • Sibling skill: ../../devices/connecting-to-devices/SKILL.md — adb devices states, wait-for-device.
  • Sibling skill: ../../devices/connecting-over-wifi/SKILL.md — adb pair / adb connect.
  • Sibling skill: ../../apps/installing-and-managing-apps/SKILL.md — full pm install / pm uninstall / pm grant surface.
  • Sibling skill: ../../tests/running-instrumented-tests-via-adb/SKILL.md — am instrument -w -r.
  • Sibling skill: ../../capture/capturing-screenshots-and-screenrecord/SKILL.md — capturing artefacts after driving the device.
  • Sibling skill: ../../observability/extracting-logs-with-logcat/SKILL.md — reading device logs.
  • Sibling skill: ../../transfer/extracting-test-artifacts/SKILL.md — adb pull / adb push / run-as.
  • Sibling skill: ../../automation/scripting-adb-for-ci/SKILL.md — bash idioms, retries, port forwarding.
  • Cross-set: ../../../instrumentation/scenarios/launching-activities-with-activityscenario/SKILL.md — launching from inside an instrumentation test.
  • Cross-set: ../../../fundamentals/strategies/applying-testing-strategies/SKILL.md — when to drive via adb vs instrumentation.

© skydoves, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in adb/control/injecting-input-and-state of skydoves/android-testing-skills.

Open the folder on GitHubat commit 8665ed5

Compare with similar skills

Injecting Input And State next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Injecting Input And State compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Injecting Input And State this skillskydoves/android-testing-skills333—~4.8kAutomated safety check: PassApache-2.0
Phone HarnessShawnPana/phone-harness3.2k—~4.3kAutomated safety check: PassMIT
Mobile QAtloncorp/tlon-apps107—~2.4kAutomated safety check: PassMIT
Androidyang1ming/android-harness176—~259Automated safety check: PassMIT
Debug Receiverstimusus/Shuttle2229—~1.9kAutomated safety check: PassApache-2.0
Debug Bridgegetknit/knit132—~2.2kAutomated safety check: PassGPL-3.0

Similar skills

  • Phone Harness

    ShawnPana/phone-harness

    Control the user's phone — an iPhone through the Mac's iPhone Mirroring window, an Android over adb, or a rented cloud Android: open apps, tap, type, swipe, read the screen.

    3.2k GitHub stars~4.3k tokensUpdated today
    MobileAuto-check passed
  • Mobile QA

    tloncorp/tlon-apps

    Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.

    107 GitHub stars~2.4k tokensUpdated today
    MobileAuto-check passed
  • Android

    yang1ming/android-harness

    Direct Android device control through ADB. An agent skill from yang1ming/android-harness.

    176 GitHub stars~259 tokensUpdated 2 mo ago
    MobileAuto-check passed
  • Debug Receivers

    timusus/Shuttle2

    Drive the S2 debug build's playback and queue over ADB broadcasts — play the whole library, play/pause, skip, seek, remove a queue item, toggle shuffle/repeat, dump playback state as JSON, reimport…

    229 GitHub stars~1.9k tokensUpdated today
    MobileAuto-check passed
  • Debug Bridge

    getknit/knit

    Drive and verify Knit on a device or emulator through the headless debug bridge (am broadcast to app.getknit.knit.debug.<ACTION, replies as JSON) — send a message on one phone and confirm it landed…

    132 GitHub stars~2.2k tokensUpdated 4 days ago
    MobileAuto-check passed
  • Android Emulator Skill

    Moustachauve/WLED-Android

    Production-ready scripts for Android app testing, building, and automation.

    169 GitHub starsUsed in 1 repo~911 tokens
    MobileAuto-check passed

More from skydoves/android-testing-skills

All 50 skills in this repo
  • Asserting Bounds And Dimensions

    skydoves/android-testing-skills

    A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…

    333 GitHub stars~3.3k tokensUpdated 4 mo ago
    Auto-check passed
  • Asserting Node State And Text

    skydoves/android-testing-skills

    A skill your agent uses to verify a Compose semantics node's properties from a UI test using assertExists, assertDoesNotExist, assertIsDisplayed, assertIsNotDisplayed, assertIsDeactivated…

    333 GitHub stars~3.6k tokensUpdated 4 mo ago
    Auto-check passed
  • Capturing Preview Screenshots In CI

    skydoves/android-testing-skills

    A skill your agent uses to render every Jetpack Compose @Preview as a screenshot on a real Android device or emulator and publish a browsable HTML catalog from CI.

    333 GitHub stars~4.5k tokensUpdated 4 mo ago
    Auto-check: notes
  • Capturing Screenshots And Screenrecord

    skydoves/android-testing-skills

    A skill your agent uses to capture visual artefacts from a device for test failures, golden image generation, QA repro, and demo videos.

    333 GitHub stars~3.7k tokensUpdated 4 mo ago
    Auto-check passed
  • Choosing Test Rule Vs Runtest

    skydoves/android-testing-skills

    A skill your agent uses to pick the correct Compose UI test entry point.

    333 GitHub stars~4.5k tokensUpdated 4 mo ago
    Auto-check passed
  • Choosing What To Test

    skydoves/android-testing-skills

    A skill your agent uses to pick which behaviors to cover in an Android test suite using Google's five-category state vocabulary plus the explicit "what NOT to test" list from…

    333 GitHub stars~4.6k tokensUpdated 4 mo ago
    Auto-check passed

Works with

Categories

Questions about Injecting Input And State

What does Injecting Input And State do?

A skill your agent uses to drive an Android device from the host shell — inject taps, swipes, text, key events, and drag-and-drop via adb shell input; resize the display with wm size / wm density…. Injecting Input And State is an agent skill from skydoves/android-testing-skills.

When should I use Injecting Input And State?

Injecting Input And State fits situations like: drive an Android device from the host shell — inject taps; drag-and-drop via adb shell input; resize the display with wm size / wm density; flip hermetic-test settings with settings put global windowanimationscale 0.

How do I install Injecting Input And State in Claude Code?

Run `npx skills add skydoves/android-testing-skills --skill injecting-input-and-state -a claude-code`. Or copy the skill folder (adb/control/injecting-input-and-state in skydoves/android-testing-skills) into .claude/skills/injecting-input-and-state in your project. Claude Code loads it when a task matches its description.

How do I install Injecting Input And State in Codex?

Run `npx skills add skydoves/android-testing-skills --skill injecting-input-and-state -a codex`. Or copy the skill folder (adb/control/injecting-input-and-state in skydoves/android-testing-skills) into .agents/skills/injecting-input-and-state in your project. Codex loads it when a task matches its description.

Can I use Injecting Input And State in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add skydoves/android-testing-skills --skill injecting-input-and-state -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/injecting-input-and-state, .gemini/skills/injecting-input-and-state, .github/skills/injecting-input-and-state and .opencode/skills/injecting-input-and-state in your project.

What does Injecting Input And State need to run?

Going by SKILL.md and its folder, Injecting Input And State needs the command-line tools its instructions call (adb).

Does Injecting Input And State access the network?

SKILL.md names 1 domain. As links in the text: developer.android.com. This is read from the text; nothing was executed.

Is Injecting Input And State safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Injecting Input And State use?

Injecting Input And State is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Injecting Input And State use?

About 4.8k tokens (SKILL.md is roughly 19k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Injecting Input And State?

Skills that share tags, products or a category with Injecting Input And State: Phone Harness (ShawnPana/phone-harness, 3.2k stars), Mobile QA (tloncorp/tlon-apps, 107 stars), Android (yang1ming/android-harness, 176 stars) and Debug Receivers (timusus/Shuttle2, 229 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Injecting Input And State?

skydoves (a GitHub user) maintains it in skydoves/android-testing-skills, which has 333 GitHub stars. The repository holds 50 skills in this directory. The repository was last updated on May 25, 2026.

Source: skydoves/android-testing-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.