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.
A skill your agent uses to install, uninstall, list, inspect, and reset Android apps via adb install (with -r reinstall, -d allow-downgrade, -t allow test packages, -g grant all runtime permissions…
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skydoves/android-testing-skills installing-and-managing-apps --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .claude/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.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/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .claude/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-appsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skydoves/android-testing-skills installing-and-managing-apps --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .agents/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .agents/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skydoves/android-testing-skills installing-and-managing-apps --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .cursor/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .cursor/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/skydoves/android-testing-skills.git --path adb/apps/installing-and-managing-apps--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skydoves/android-testing-skills installing-and-managing-apps --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .gemini/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .gemini/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install skydoves/android-testing-skills installing-and-managing-appsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .github/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .github/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install skydoves/android-testing-skills installing-and-managing-apps --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/skydoves/android-testing-skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/adb/apps/installing-and-managing-apps .opencode/skills/installing-and-managing-apps && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "installing-and-managing-apps" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/adb/apps/installing-and-managing-apps into .opencode/skills/installing-and-managing-apps/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "installing-and-managing-apps", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
installing-and-managing-appsA skill your agent uses to install, uninstall, list, inspect, and reset Android apps via adb install (with -r reinstall, -d allow-downgrade, -t allow test packages, -g grant all runtime permissions…
Installing And Managing Apps is an agent skill from skydoves/android-testing-skills. Use this skill to install, uninstall, list, inspect, and reset Android apps via adb install (with -r reinstall, -d allow-downgrade, -t allow test packages, -g grant all runtime permissions, --user per-user install, adb install-multiple for split APKs) and the on-device pm tool (pm list packages [-f|-d|-e|-s|-3|-i|-u], pm path, pm clear, pm grant / pm revoke, pm enable / pm disable, pm uninstall [-k], cmd package dump-profiles). Calls out the canonical hermetic-reset pattern (pm clear wipes data; am force-stop…
Its SKILL.md is about 4.2k 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 and Android development. 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.
Read from SKILL.md and the folder at commit 8665ed5. It shows what the files ask for, not the result of running them.
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.
Shell commands in SKILL.md call:
adbFrom the folder's file list and the shell code blocks in SKILL.md.
Links to these hosts (documentation or services it may open):
developer.android.comFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Installing And Managing Apps loads about 4.2k tokens when it runs. Until then it costs about 237 tokens; SKILL.md has 1,676 words of instructions outside code blocks.
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.
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.
The full file from skydoves/android-testing-skills at commit 8665ed5, republished under its Apache-2.0 licence (© skydoves). 1,676 words, ~4,243 tokens.
.claude/skills/installing-and-managing-apps/SKILL.md (or your agent's skills folder).adb install and pmApp lifecycle from the host. adb install ships an APK; pm is the on-device PackageManager front-end that lists, paths, clears, enables/disables, and grants permissions. The most common subtle bug in test scaffolding is using am force-stop to "reset" an app between tests — that command kills the process but leaves SharedPreferences, the Room DB, and files on disk. The hermetic equivalent is pm clear.
INSTALL_FAILED_VERSION_DOWNGRADE, INSTALL_FAILED_USER_RESTRICTED, or signature mismatch errors.-g), or grant/revoke a single permission post-install.../../tests/running-instrumented-tests-via-adb/SKILL.md.../../devices/connecting-to-devices/SKILL.md.../../architecture/understanding-adb-architecture/SKILL.md.device (see ../../devices/connecting-to-devices/SKILL.md).android:testOnly="true" (Gradle does this for androidTest builds) and install requires -t. 1. Install with the right flags. From pm install (and the adb install wrapper) options table:
| Flag | Meaning |
|---|---|
-r | "Reinstall an existing app, keeping its data." Required when the package is already installed; without it adb install returns INSTALL_FAILED_ALREADY_EXISTS. CI scripts MUST always pass -r for repeat runs. |
-d | "Allow version code downgrade." Required when the new APK has a lower versionCode. Note: per adb help, restricted to debuggable packages on stock builds. |
-t | "Allow test APKs to be installed." Required for any APK whose manifest carries android:testOnly="true" (i.e. all Gradle androidTest builds). |
-g | "Grant all permissions listed in the app manifest." Best for hermetic test runs. |
-l | Forward-lock the application (legacy DRM). Almost never needed today. |
-s | Install on the SD card / external storage (when device supports it). |
--user <id> | Install for a specific user profile. Default: all users. current resolves to the foreground user. |
| `--install-location 0 | 1 |
-f | Install on internal system memory. |
-i <installer_pkg> | Tag the install with an installer package name. |
--fastdeploy | Patch-only install (only changed parts of the APK). |
--incremental / --no-incremental | Streamed install; requires APK Signature Scheme v4 sidecar .idsig. --wait blocks until full APK is available. |
Common recipes:
adb install -r app-debug.apk # ordinary reinstall
adb install -r -d app-debug.apk # allow downgrade
adb install -r -t -g app-androidTest.apk # test APK with all permissions granted
adb install -r -d --user current app-debug.apk # force foreground-user install 2. For split APKs use adb install-multiple. A modern App Bundle produces a base APK plus per-feature/per-config splits — adb install of just one fails:
adb install-multiple -r -t -g \
base-master.apk base-arm64_v8a.apk base-xxhdpi.apk 3. Reset app state between tests with pm clear. Do NOT use am force-stop for hermetic isolation.
am force-stop <pkg> "Force-stop everything associated with package." — kills processes only. SharedPreferences, Room/SQLite databases, files in /data/data/<pkg>, and cache persist.pm clear <pkg> "Delete all data associated with a package." — wipes user data and cache. The next launch starts from a fresh-install state.
For genuine hermetic isolation between tests (the default for instrumented suites), use pm clear. am force-stop is appropriate only when the explicit goal is to kill the process while preserving state (e.g. testing a "resume from killed" path).adb shell pm clear com.example.app Most pipelines wire this up via Test Orchestrator's clearPackageData instrumentation arg — see ../../tests/running-instrumented-tests-via-adb/SKILL.md.
4. List, find, and inspect packages with pm list packages and pm path.
pm list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [--user <id>] [<filter>]| Flag | Meaning |
|---|---|
-f | "See associated file." |
-d | "Filter to only show disabled packages." |
-e | "Filter to only show enabled packages." |
-s | "Filter to only show system packages." |
-3 | "Filter to only show third-party packages." |
-i | "See the installer for the packages." |
-u | "Include uninstalled packages." |
--user <id> | "The user space to query." |
Recipes:
adb shell pm list packages -3 | sort # all sideloaded apps
adb shell pm list packages -f com.example # APK paths for matching pkgs
adb shell pm path com.example.app # package:/data/app/.../base.apk
adb shell dumpsys package com.example.app | head -200 # detailed install/permission info 5. Manage runtime permissions with pm grant / pm revoke (API 23+).
"Grant a permission to an app. On devices running Android 6.0 (API level 23) and higher, the permission can be any permission declared in the app manifest."
adb shell pm grant com.example.app android.permission.CAMERA
adb shell pm revoke com.example.app android.permission.CAMERA
adb shell pm reset-permissions # reset every app to defaults Flagging -g at install time grants every manifest-declared runtime permission in one shot — preferred for hermetic test runs.
6. Enable / disable packages or specific components.
adb shell pm disable com.example.app # whole package
adb shell pm disable-user --user 0 com.example.app # per-user disable (preserves data)
adb shell pm enable com.example.app
adb shell pm enable com.example.app/.MyTestActivity # specific componentUseful for forcing a known accessibility-service / IME state in tests, or for staging A/B comparisons by disabling rivals.
7. Uninstall correctly.
pm uninstall [-k] [--user <id>] [--versionCode <vc>] <package>-k "Keep the data and cache directories after package removal." Useful for upgrade-from-clean tests where the user data simulates an existing install.--user <id> per-user removal.--versionCode <vc> "Only uninstalls if the app has the given version code." Idempotent uninstall in CI scripts.adb uninstall com.example.app # equivalent to: pm uninstall <pkg>
adb shell pm uninstall -k com.example.app # uninstall but preserve data
adb shell pm uninstall --user 0 com.example.app # only from primary user8. Dump a Baseline Profile when needed.
"Starting in Android 7.0 (API level 24), the Android Runtime (ART) collects execution profiles for installed apps...
adb shell cmd package dump-profiles <package>thenadb pull /data/misc/profman/<package>.prof.txt." The doc warns: "It is only possible to retrieve the execution profile filename if you have root access to the file system, for example, on an emulator." On user builds without root, useandroidx.benchmarkMacrobenchmark to extract the profile programmatically.
9. Diagnose common install failures:
| Error | Cause | Fix |
|---|---|---|
INSTALL_FAILED_VERSION_DOWNGRADE | New APK's versionCode is lower than the installed one. | Add -d. |
INSTALL_FAILED_USER_RESTRICTED | Multi-user device: the install user (typically the secondary or work profile) blocks installs. | --user 0 or --user current; have the user disable "Install via USB" restriction in their profile. |
INSTALL_FAILED_UPDATE_INCOMPATIBLE (signature mismatch) | New APK signed with a different key than the installed one. | Uninstall first (adb uninstall <pkg>); resign with the same key. |
INSTALL_FAILED_TEST_ONLY | APK has android:testOnly="true" but -t was omitted. | Add -t (typical for app-androidTest.apk). |
INSTALL_FAILED_INVALID_APK (split APK only) | Tried to install one APK of a split set. | Use adb install-multiple. |
INSTALL_FAILED_INSUFFICIENT_STORAGE | Out of space. | adb shell df /data and cleanup. |
10. Quote the shell correctly (Platform Tools 23+ rule). Verbatim from the adb page:
"With Android Platform Tools 23 and higher,
adbhandles arguments the same way that thessh(1)command does. ...adb shell setprop key 'two words'is now an error ... To make the command work, quote twice, once for the local shell and once for the remote shell, as you do withssh(1). For example,adb shell setprop key \"'two words'\"works because the local shell takes the outer level of quoting and the device still sees the inner level of quoting." Same rule applies for anypmargument with spaces, special characters, or shell metacharacters.
# WRONG
adb shell am force-stop com.example.app
# Run next test...
# WRONG because: force-stop kills the process but leaves SharedPreferences,
# Room DB, files in /data/data/<pkg>, and cache. Tests that read any of those
# carry stale state into the next case. Flake follows.# RIGHT
adb shell pm clear com.example.app
# Run next test against fresh-install state.For test runs, the equivalent done by the runner itself is -e clearPackageData true to AndroidX Test Orchestrator — see ../../tests/running-instrumented-tests-via-adb/SKILL.md.
androidTest APK# WRONG
adb install app-androidTest.apk
# adb: failed to install app-androidTest.apk: Failure [INSTALL_FAILED_TEST_ONLY:
# installPackageLI]
# WRONG because: any APK with android:testOnly="true" (every Gradle-built test
# APK) requires `-t`.# RIGHT
adb install -r -t -g app-androidTest.apk
# -r: reinstall keeping data (or overwriting); -t: allow test packages;
# -g: grant all runtime permissions for hermetic tests.# WRONG
adb install -r app-release.apk
# adb: failed to install app-release.apk: Failure [INSTALL_FAILED_VERSION_DOWNGRADE]
# WRONG because: the installed debug APK has a higher versionCode than the
# release APK being installed.# RIGHT
adb install -r -d app-release.apk # allow downgrade
# Or, when signature also changes:
adb uninstall com.example.app
adb install app-release.apk# WRONG
adb shell pm list packages | grep -v 'com.android'
# WRONG because: many third-party packages also have names containing
# "com.android" (e.g. third-party Android library demos), and Google's own
# pre-installed apps carry varied prefixes (com.google.android.*).# RIGHT
adb shell pm list packages -3
# `-3` filters to third-party (non-system) packages only.pm clear <pkg> to reset app state between tests; am force-stop does NOT clear data.-t when installing any test APK (android:testOnly="true"); add -d when downgrading; add -g to grant all manifest runtime permissions.adb install-multiple for split APKs (App Bundles). Single-APK install of one split fails with INSTALL_FAILED_INVALID_APK.adb install of a freshly built debug APK will replace a release-signed install — signing-conflict errors require uninstall first.pm list packages | grep heuristics; use the documented filters (-3, -s, -d, -e, -u).clearPackageData true through Test Orchestrator (../../tests/running-instrumented-tests-via-adb/SKILL.md) instead of running pm clear manually before every test.adb install -r -t -g app-androidTest.apk returns Success.adb shell pm path com.example.app prints a package:/data/app/...base.apk line for the just-installed package.adb shell pm clear com.example.app returns Success, and adb shell run-as com.example.app ls /data/data/com.example.app shows only freshly created cache/ and code_cache/ entries.adb shell pm list packages -3 | grep com.example.app lists the package after install.adb shell pm grant com.example.app android.permission.CAMERA, adb shell dumpsys package com.example.app | grep CAMERA shows the permission as granted.adb uninstall com.example.app returns Success and pm list packages com.example no longer shows the app.-e clearPackageData true) or an explicit pm clear step in @Before / @After.pm install, pm uninstall, pm clear, pm grant, pm list packages): https://developer.android.com/tools/adb#pmam instrument and orchestrator wiring): https://developer.android.com/studio/test/command-linecmd package dump-profiles: https://developer.android.com/topic/performance/baselineprofilestasks/research/A2-adb-shell-commands.md — verbatim pm install/pm list/pm clear flag tables, force-stop vs pm clear distinction, ssh-style double-shell quoting since Platform Tools 23.docs/CORPUS.md §I.10 — "force-stop does NOT clear data — pair with pm clear for hermetic reset."../../architecture/understanding-adb-architecture/SKILL.md../../devices/connecting-to-devices/SKILL.md../../devices/connecting-over-wifi/SKILL.mdam instrument (and Orchestrator clearPackageData): ../../tests/running-instrumented-tests-via-adb/SKILL.mdAndroidJUnit4: ../../../instrumentation/runner/running-instrumented-tests-with-androidjunit4/SKILL.md../../../jvm-tests/runner/configuring-junit4-on-android/SKILL.md../../../fundamentals/strategies/organizing-test-source-sets/SKILL.md© 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
Just SKILL.md in adb/apps/installing-and-managing-apps of skydoves/android-testing-skills.
Open the folder on GitHubat commit 8665ed5
Installing And Managing Apps 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Installing And Managing Apps this skillskydoves/android-testing-skills | 333 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| Mobile QAtloncorp/tlon-apps | 107 | — | ~2.4k | Automated safety check: Pass | MIT | |
| Frontend Maestronekomangaorg/Neko | 2.8k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Android Emulator SkillMoustachauve/WLED-Android | 169 | 1 repos | ~911 | Automated safety check: Pass | Apache-2.0 | |
| Visualizing Recomposition CascadesrosuH/EasyWatermark | 1.9k | 1 repos | ~4.3k | Automated safety check: Pass | Apache-2.0 | |
| Run Jetpack Android Appwordpress-mobile/WordPress-Android | 3.2k | — | ~886 | Automated safety check: Pass | GPL-2.0 |
tloncorp/tlon-apps
Run a mobile QA checklist on a physical Android device over adb for tlon-apps, then triage what fails into fixes.
nekomangaorg/Neko
Orchestrates macro-level UI architecture, complex Jetpack Compose structures, and screen-to-screen flows.
Moustachauve/WLED-Android
Production-ready scripts for Android app testing, building, and automation.
rosuH/EasyWatermark
A skill your agent uses to drive the active investigation features of the skydoves/compose-stability-analyzer IntelliJ / Android Studio plugin: the static Recomposition Cascade visualizer that walks…
wordpress-mobile/WordPress-Android
Builds the Jetpack debug app with Gradle and installs it on a connected Android device or an emulator started from an available AVD.
stablyai/orca
Android device and emulator control from inside Orca over adb, with the live device view in Orca's emulator pane. Use when driving an adb-connected emulator…
skydoves/android-testing-skills
A skill your agent uses to verify Compose layout measurements from a UI test using assertWidthIsEqualTo, assertHeightIsEqualTo, assertWidthIsAtLeast, assertHeightIsAtLeast…
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…
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.
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.
skydoves/android-testing-skills
A skill your agent uses to pick the correct Compose UI test entry point.
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…
Categories
A skill your agent uses to install, uninstall, list, inspect, and reset Android apps via adb install (with -r reinstall, -d allow-downgrade, -t allow test packages, -g grant all runtime permissions…. Installing And Managing Apps is an agent skill from skydoves/android-testing-skills. Use this skill to install, uninstall, list, inspect, and reset Android apps via adb install (with -r reinstall, -d allow-downgrade, -t allow test packages, -g grant all runtime permissions, --user per-user install, adb install-multiple for split APKs) and the on-device pm tool (pm list packages [-f|-d|-e|-s|-3|-i|-u], pm path, pm clear, pm grant / pm revoke, pm enable / pm disable, pm uninstall [-k], cmd package dump-profiles).
Installing And Managing Apps fits situations like: reset Android apps via adb install (with -r reinstall; -d allow-downgrade; -t allow test packages; -g grant all runtime permissions.
Run `npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a claude-code`. Or copy the skill folder (adb/apps/installing-and-managing-apps in skydoves/android-testing-skills) into .claude/skills/installing-and-managing-apps in your project. Claude Code loads it when a task matches its description.
Run `npx skills add skydoves/android-testing-skills --skill installing-and-managing-apps -a codex`. Or copy the skill folder (adb/apps/installing-and-managing-apps in skydoves/android-testing-skills) into .agents/skills/installing-and-managing-apps in your project. Codex loads it when a task matches its description.
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 installing-and-managing-apps -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/installing-and-managing-apps, .gemini/skills/installing-and-managing-apps, .github/skills/installing-and-managing-apps and .opencode/skills/installing-and-managing-apps in your project.
Going by SKILL.md and its folder, Installing And Managing Apps needs the command-line tools its instructions call (adb).
SKILL.md names 1 domain. As links in the text: developer.android.com. This is read from the text; nothing was executed.
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.
Installing And Managing Apps 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.
About 4.2k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Installing And Managing Apps: Mobile QA (tloncorp/tlon-apps, 107 stars), Frontend Maestro (nekomangaorg/Neko, 2.8k stars), Android Emulator Skill (Moustachauve/WLED-Android, 169 stars) and Visualizing Recomposition Cascades (rosuH/EasyWatermark, 1.9k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
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.