Android Check
Adyen/adyen-android
Run compile, lint, and unit test checks. An agent skill from Adyen/adyen-android.
Agent skill
A skill your agent uses to stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner, the correct AndroidJUnitRunner Gradle wiring, and supporting infrastructure…
$ npx skills add skydoves/android-testing-skills --skill running-instrumented-tests-with-androidjunit4 -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install skydoves/android-testing-skills running-instrumented-tests-with-androidjunit4 --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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .claude/skills/running-instrumented-tests-with-androidjunit4 && 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 "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .claude/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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/instrumentation/runner/running-instrumented-tests-with-androidjunit4Type 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 running-instrumented-tests-with-androidjunit4 -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install skydoves/android-testing-skills running-instrumented-tests-with-androidjunit4 --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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .agents/skills/running-instrumented-tests-with-androidjunit4 && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .agents/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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 running-instrumented-tests-with-androidjunit4 -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install skydoves/android-testing-skills running-instrumented-tests-with-androidjunit4 --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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .cursor/skills/running-instrumented-tests-with-androidjunit4 && 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 "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .cursor/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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 instrumentation/runner/running-instrumented-tests-with-androidjunit4--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 running-instrumented-tests-with-androidjunit4 -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install skydoves/android-testing-skills running-instrumented-tests-with-androidjunit4 --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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .gemini/skills/running-instrumented-tests-with-androidjunit4 && 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 "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .gemini/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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 running-instrumented-tests-with-androidjunit4Installs 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 running-instrumented-tests-with-androidjunit4 -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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .github/skills/running-instrumented-tests-with-androidjunit4 && 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 "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .github/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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 running-instrumented-tests-with-androidjunit4 -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 running-instrumented-tests-with-androidjunit4 --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/instrumentation/runner/running-instrumented-tests-with-androidjunit4 .opencode/skills/running-instrumented-tests-with-androidjunit4 && 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 "running-instrumented-tests-with-androidjunit4" agent skill from https://github.com/skydoves/android-testing-skills/tree/main/instrumentation/runner/running-instrumented-tests-with-androidjunit4 into .opencode/skills/running-instrumented-tests-with-androidjunit4/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "running-instrumented-tests-with-androidjunit4", 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.
running-instrumented-tests-with-androidjunit4A skill your agent uses to stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner, the correct AndroidJUnitRunner Gradle wiring, and supporting infrastructure…
Running Instrumented Tests With Androidjunit4 is an agent skill from skydoves/android-testing-skills. Use this skill to stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner, the correct AndroidJUnitRunner Gradle wiring, and supporting infrastructure (Test Orchestrator, runtime permission grants, size annotations, SDK suppression, hermetic animation defaults). Covers androidx.test:core:1.7.0 / :runner:1.7.0 / :rules:1.7.0 / androidx.test.ext:junit:1.3.0 coordinates, androidx.test.platform.app.InstrumentationRegistry, and the androidTestUtil configuration trap for…
Its SKILL.md is about 4.5k 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 Testing & QA, covering Unit testing and Meeting notes and agendas. It works with Android, Gradle and JUnit. 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.
Running Instrumented Tests With Androidjunit4 loads about 4.5k tokens when it runs. Until then it costs about 221 tokens; SKILL.md has 1,200 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,200 words, ~4,550 tokens.
.claude/skills/running-instrumented-tests-with-androidjunit4/SKILL.md (or your agent's skills folder).Instrumentation tests fail before any assertion runs when the runner stack is misconfigured: a deprecated AndroidJUnit4 import, the orchestrator on androidTestImplementation instead of androidTestUtil, the deprecated androidx.test.InstrumentationRegistry instead of androidx.test.platform.app.InstrumentationRegistry. This skill encodes the exact dependency matrix, the runner Gradle config, and the supporting annotations and rules.
androidx.test.runner.AndroidJUnit4 as @Deprecated, or the test compiles but emits the deprecation warning.am instrument returns INSTRUMENTATION_FAILED: <pkg>/androidx.test.runner.AndroidJUnitRunner or Test runner not found.-e size small / -e package com.foo via am instrument and the test ignores it — RunnerArgs is unwired.ACCESS_FINE_LOCATION / RECORD_AUDIO etc. and the user is hand-rolling permission grants from adb.Activity or driving lifecycle — see ../../scenarios/launching-activities-with-activityscenario/SKILL.md.../../espresso/writing-espresso-tests/SKILL.md.../../uiautomator/cross-app-tests-with-uiautomator/SKILL.md.../../../jvm-tests/runner/configuring-junit4-on-android/SKILL.md.../../../fundamentals/strategies/applying-testing-strategies/SKILL.md.com.android.application or com.android.library).src/androidTest/ source set on disk (./gradlew :module:connectedDebugAndroidTest should resolve).junit:junit:4.13.2); JUnit 5 requires a Vintage engine bridge and is out of scope.androidTestImplementation. These are the canonical 2026 GA versions per docs/CORPUS.md H.1:dependencies {
androidTestImplementation("androidx.test:core:1.7.0")
androidTestImplementation("androidx.test:runner:1.7.0")
androidTestImplementation("androidx.test:rules:1.7.0")
androidTestImplementation("androidx.test.ext:junit:1.3.0")
androidTestImplementation("androidx.test.ext:junit-ktx:1.3.0")
androidTestImplementation("androidx.test.ext:truth:1.7.0")
}androidx.test.ext:junit is the artifact that owns the non-deprecated AndroidJUnit4 runner and the non-deprecated ActivityScenarioRule. androidx.test:runner still ships the legacy AndroidJUnit4 (deprecated) — never import from there. See tasks/research/R1-androidx-test-core.md lines 481-490.
testInstrumentationRunner in the module's android.defaultConfig. The runner FQCN is androidx.test.runner.AndroidJUnitRunner — note this is the runner class, distinct from the deprecated AndroidJUnit4 test runner annotation. From tasks/research/R1-androidx-test-core.md lines 270-289:android {
defaultConfig {
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
// Optional: pass `-e key value` args to every run via Gradle
testInstrumentationRunnerArguments["clearPackageData"] = "true"
}
testOptions {
animationsDisabled = true // hermetic — see Pattern below
}
}@RunWith(AndroidJUnit4::class) from androidx.test.ext.junit.runners. This is the only correct import:import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
class LoginActivityTest {
@Test fun loginSucceeds() { /* ... */ }
}The deprecated androidx.test.runner.AndroidJUnit4 is @Deprecated at runner-1.7.0/androidx/test/runner/AndroidJUnit4.java:43-44. It still works at runtime but the IDE warns and codemods will replace it.
androidx.test.platform.app.InstrumentationRegistry. The legacy androidx.test.InstrumentationRegistry (no platform.app) is @Deprecated and @InlineMe'd to the canonical class — see tasks/research/R1-androidx-test-core.md lines 142-153:import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.core.app.ApplicationProvider
val instrumentation = InstrumentationRegistry.getInstrumentation()
val args: Bundle = InstrumentationRegistry.getArguments() // -e key value extras
val targetContext: Context = ApplicationProvider.getApplicationContext()
val testContext: Context = instrumentation.context // package context of the test APKInstrumentationRegistry.getArguments() exposes the -e key/value pairs from am instrument -e key value, e.g. -e size small -e numShards 4. The canonical list of supported keys is in runner-1.7.0/androidx/test/internal/runner/RunnerArgs.java lines 54-99 (see tasks/research/R1-androidx-test-core.md lines 295-336).
@SmallTest / @MediumTest / @LargeTest from androidx.test.filters. Used together with am instrument -e size small to filter by speed envelope. From the package KDocs: SmallTest ≤200ms, MediumTest ≤1000ms, LargeTest >1000ms. Sibling annotations: @FlakyTest, @RequiresDevice, @Suppress.import androidx.test.filters.SmallTest
import androidx.test.filters.SdkSuppress
@RunWith(AndroidJUnit4::class)
@SmallTest
class LoginViewModelTest { /* ... */ }
@Test
@SdkSuppress(minSdkVersion = 26)
fun usesApi26OnlyApi() { /* ... */ }@SdkSuppress(minSdkVersion, maxSdkVersion, excludedSdks, codeName) lives at runner-1.7.0/androidx/test/filters/SdkSuppress.java:39-58. Tests outside the API range are skipped (assumption-failure, exit code -4), not failed.
androidTestUtil — NOT androidTestImplementation. This is the most common single misconfiguration in the runner stack. Test Orchestrator runs each @Test in its own instrumentation process so a crash kills only that one test, with optional clearPackageData between tests:dependencies {
androidTestUtil("androidx.test:orchestrator:1.6.1") // installs orchestrator APK on device
androidTestUtil("androidx.test:services:1.6.0") // required for clearPackageData
}
android {
testOptions {
execution = "ANDROIDX_TEST_ORCHESTRATOR"
}
defaultConfig {
testInstrumentationRunnerArguments["clearPackageData"] = "true"
}
}androidTestUtil is a special AGP configuration that installs helper APKs on the device prior to running tests. Putting orchestrator on androidTestImplementation compiles, silently does nothing, and the test still runs in a single shared process. See tasks/research/R1-androidx-test-core.md lines 683-687.
GrantPermissionRule.grant(...) instead of adb shell pm grant. The rule ships in androidx.test:rules and grants permissions for the duration of the test class:import androidx.test.rule.GrantPermissionRule
import org.junit.Rule
@get:Rule
val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.RECORD_AUDIO,
)The rule is implemented at rules-1.7.0/androidx/test/rule/GrantPermissionRule.java. On API 23+ it uses UiAutomation.grantRuntimePermission; on older devices the permission must already be granted in the manifest (the rule is a no-op).
8. Disable animations for hermetic runs. testOptions { animationsDisabled = true } toggles window_animation_scale, transition_animation_scale, and animator_duration_scale to 0 for the duration of the test run, then restores the previous values on teardown. Without this, tap-to-focus, ripple, and Activity transitions race with assertions.
9. (Optional) Order multiple @Rules with @Rule(order = N). Lower order numbers evaluate outer first. Hilt requires @HiltAndroidRule at order = 0:
@get:Rule(order = 0) val hiltRule = HiltAndroidRule(this)
@get:Rule(order = 1) val activityRule = ActivityScenarioRule(LoginActivity::class.java)./gradlew :app:connectedDebugAndroidTest
# or via adb directly:
adb shell am instrument -w -r \
-e size small \
-e clearPackageData true \
com.example.app.test/androidx.test.runner.AndroidJUnitRunner-w (wait) is required for the exit code to be meaningful. Without it, $? is 0 even on test failure. See docs/CORPUS.md I.5.
AndroidJUnit4 import// WRONG
import androidx.test.runner.AndroidJUnit4 // @Deprecated since androidx.test:runner 1.x
@RunWith(AndroidJUnit4::class)
class FooTest
// WRONG because: this class is @Deprecated at runner-1.7.0/.../AndroidJUnit4.java:43-44.
// The IDE flags it; codemods replace it; the doc explicitly redirects to ext.junit.// RIGHT
import androidx.test.ext.junit.runners.AndroidJUnit4
@RunWith(AndroidJUnit4::class)
class FooTestInstrumentationRegistry import// WRONG
import androidx.test.InstrumentationRegistry // @Deprecated, every member @InlineMe'd
val ctx = InstrumentationRegistry.getTargetContext() // returns target package context, NOT the application
// WRONG because: monitor-1.8.0/androidx/test/InstrumentationRegistry.java:34 is @Deprecated.
// Use androidx.test.platform.app.InstrumentationRegistry + ApplicationProvider.// RIGHT
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.core.app.ApplicationProvider
val instrumentation = InstrumentationRegistry.getInstrumentation()
val ctx: Context = ApplicationProvider.getApplicationContext()// WRONG
dependencies {
androidTestImplementation("androidx.test:orchestrator:1.6.1")
}
android.testOptions.execution = "ANDROIDX_TEST_ORCHESTRATOR"
// WRONG because: orchestrator must be installed as a separate APK on the device.
// `androidTestImplementation` puts it on the test APK classpath instead, where it does
// nothing. Tests still run in one shared process. No error, just silent inactivation.// RIGHT
dependencies {
androidTestUtil("androidx.test:orchestrator:1.6.1")
androidTestUtil("androidx.test:services:1.6.0") // required for clearPackageData
}
android.testOptions.execution = "ANDROIDX_TEST_ORCHESTRATOR"RunnerArgs# Run a single method
adb shell am instrument -w -r \
-e class com.example.LoginActivityTest#loginSucceeds \
com.example.app.test/androidx.test.runner.AndroidJUnitRunner
# Filter by size annotation
adb shell am instrument -w -r -e size small com.example.app.test/androidx.test.runner.AndroidJUnitRunner
# Shard across N runners (CI fan-out)
adb shell am instrument -w -r -e numShards 4 -e shardIndex 0 \
com.example.app.test/androidx.test.runner.AndroidJUnitRunnerThe full list of supported -e keys lives in runner-1.7.0/androidx/test/internal/runner/RunnerArgs.java:54-99 (class, package, notClass, size, annotation, notAnnotation, numShards, shardIndex, clearPackageData, coverage, debug, listener, etc.). To consume them inside the test, read InstrumentationRegistry.getArguments().
androidx.test.ext.junit.runners.AndroidJUnit4 for @RunWith(...). The androidx.test.runner.AndroidJUnit4 form is @Deprecated.androidx.test.platform.app.InstrumentationRegistry. The bare androidx.test.InstrumentationRegistry is @Deprecated.androidx.test:orchestrator on androidTestUtil, never on androidTestImplementation. Putting it on the wrong configuration fails silently.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" (the runner class — that one is not deprecated, only the test-runner annotation is).-w to am instrument so the exit code reflects test result. Without it, $? is meaningless.Thread.sleep to wait for instrumentation lifecycle (onCreate, onStart). Use ActivityScenario.moveToState (see ../../scenarios/launching-activities-with-activityscenario/SKILL.md) or an IdlingResource.adb shell pm grant from inside the test — use GrantPermissionRule.grant(...) so the grant scopes to the test class and reverts cleanly.@Rule public ActivityTestRule — it is @Deprecated. Use @get:Rule val rule = ActivityScenarioRule(...).@SmallTest / @MediumTest / @LargeTest so CI shards can filter by size.testOptions.animationsDisabled = true even when individual tests don't seem to need it; ripple/transition flake silently corrupts unrelated tests../gradlew :<module>:connectedDebugAndroidTest runs without Test runner not found or INSTRUMENTATION_FAILED.androidx.test.runner.AndroidJUnit4 or androidx.test.InstrumentationRegistry (legacy paths).grep -r "androidTestImplementation.*orchestrator" build.gradle* returns nothing — orchestrator is on androidTestUtil.adb shell am instrument -w -r -e size small <pkg>.test/androidx.test.runner.AndroidJUnitRunner returns a non-zero exit code on test failure.adb logcat | grep AndroidTestOrchestrator shows per-test process spawning.testOptions.animationsDisabled = true is set in the module's android block.@get:Rule val rule = GrantPermissionRule.grant(...) (not a manual adb shell pm grant).runner-1.7.0/androidx/test/runner/AndroidJUnit4.java lines 41-44 — @Deprecated public final class AndroidJUnit4 extends Runner.junit-1.3.0/androidx/test/ext/junit/runners/AndroidJUnit4.java line 49 — current non-deprecated runner; delegates to Robolectric on JVM and AndroidJUnit4ClassRunner on device.runner-1.7.0/androidx/test/runner/AndroidJUnitRunner.java lines 270-372 — the runner class am instrument invokes; lifecycle and orchestrator wait logic.runner-1.7.0/androidx/test/internal/runner/RunnerArgs.java lines 54-99 — canonical list of every -e key the runner accepts.monitor-1.8.0/androidx/test/InstrumentationRegistry.java line 34 — @Deprecated legacy registry; every member @InlineMe'd to the platform.app form.monitor-1.8.0/androidx/test/platform/app/InstrumentationRegistry.java — current canonical registry.rules-1.7.0/androidx/test/rule/GrantPermissionRule.java lines 1-100 — static GrantPermissionRule grant(String...).runner-1.7.0/androidx/test/filters/SdkSuppress.java lines 39-58 — minSdkVersion/maxSdkVersion/excludedSdks/codeName.tasks/research/R1-androidx-test-core.md — full runner / test-core deep dive (lines 269-740 for runner; 481-490 for the dual-AndroidJUnit4 confusion).docs/CORPUS.md Section H — instrumentation library coordinates and deprecation table.../../managed-devices/running-tests-on-gradle-managed-devices/SKILL.md — running these tests on emulators Gradle provisions/boots/tears down (reproducible in CI).../../../adb/tests/running-instrumented-tests-via-adb/SKILL.md — invoking the runner directly via adb shell am instrument -w -r.../../../platform/legacy/migrating-from-android-test-classes/SKILL.md — if the module still uses the legacy android.test.* classes / InstrumentationTestRunner, migrate it onto this runner stack first.© 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 instrumentation/runner/running-instrumented-tests-with-androidjunit4 of skydoves/android-testing-skills.
Open the folder on GitHubat commit 8665ed5
Running Instrumented Tests With Androidjunit4 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 |
|---|---|---|---|---|---|---|
| Running Instrumented Tests With Androidjunit4 this skillskydoves/android-testing-skills | 333 | — | ~4.5k | Automated safety check: Pass | Apache-2.0 | |
| Android CheckAdyen/adyen-android | 149 | — | ~357 | Automated safety check: Pass | MIT | |
| Android Unit Testnwjs/chromium.src | 160 | — | ~1.8k | Automated safety check: Pass | BSD-3-Clause | |
| Incremental Java ProgrammerArabelaTso/Skills-4-SE | 253 | — | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Jvm Helpershepherdjerred/monorepo | 112 | — | ~1.9k | Automated safety check: Pass | GPL-3.0 | |
| Native Testing Strategybladeofgod/flutter-ai-harness | 116 | — | ~345 | Automated safety check: Pass | MIT |
Adyen/adyen-android
Run compile, lint, and unit test checks. An agent skill from Adyen/adyen-android.
nwjs/chromium.src
Guide for writing and converting Chromium Android unit tests across host Robolectric (chromejunittests) and on-device (chromepublicunittestapk) suites.
ArabelaTso/Skills-4-SE
Incrementally implement new features in Java repositories from natural language descriptions.
shepherdjerred/monorepo
Current Java, Kotlin, Gradle, Maven, JUnit, JVM diagnostics, packaging, and performance guidance.
bladeofgod/flutter-ai-harness
适用:设计或审查 Kotlin/Swift 原生模块、Bridge Adapter、Host 编译、模拟器/设备和系统能力验证。不适用:纯 Dart/Flutter 测试或用 Fake 代替相机和权限真机验证。触发词:JUnit、XCTest、Robolectric、instrumented test、Swift Testing、Framework Fake、Gradle…
permissionlesstech/bitchat-android
Run, diagnose, and extend bitchat Android Mesh Lab physical-device tests.
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…
A skill your agent uses to stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner, the correct AndroidJUnitRunner Gradle wiring, and supporting infrastructure…. Running Instrumented Tests With Androidjunit4 is an agent skill from skydoves/android-testing-skills. Use this skill to stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner, the correct AndroidJUnitRunner Gradle wiring, and supporting infrastructure (Test Orchestrator, runtime permission grants, size annotations, SDK suppression, hermetic animation defaults).
Running Instrumented Tests With Androidjunit4 fits situations like: stand up an Android instrumentation test source set with the canonical AndroidJUnit4 runner; the correct AndroidJUnitRunner Gradle wiring; supporting infrastructure (Test Orchestrator; runtime permission grants.
Run `npx skills add skydoves/android-testing-skills --skill running-instrumented-tests-with-androidjunit4 -a claude-code`. Or copy the skill folder (instrumentation/runner/running-instrumented-tests-with-androidjunit4 in skydoves/android-testing-skills) into .claude/skills/running-instrumented-tests-with-androidjunit4 in your project. Claude Code loads it when a task matches its description.
Run `npx skills add skydoves/android-testing-skills --skill running-instrumented-tests-with-androidjunit4 -a codex`. Or copy the skill folder (instrumentation/runner/running-instrumented-tests-with-androidjunit4 in skydoves/android-testing-skills) into .agents/skills/running-instrumented-tests-with-androidjunit4 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 running-instrumented-tests-with-androidjunit4 -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/running-instrumented-tests-with-androidjunit4, .gemini/skills/running-instrumented-tests-with-androidjunit4, .github/skills/running-instrumented-tests-with-androidjunit4 and .opencode/skills/running-instrumented-tests-with-androidjunit4 in your project.
Going by SKILL.md and its folder, Running Instrumented Tests With Androidjunit4 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.
Running Instrumented Tests With Androidjunit4 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.5k tokens (SKILL.md is roughly 18k 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 Running Instrumented Tests With Androidjunit4: Android Check (Adyen/adyen-android, 149 stars), Android Unit Test (nwjs/chromium.src, 160 stars), Incremental Java Programmer (ArabelaTso/Skills-4-SE, 253 stars) and Jvm Helper (shepherdjerred/monorepo, 112 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.