| name | android-cli-code-skill |
| description | Navigate and verify Android/Kotlin code through a running Android Studio, using the Android CLI's `android studio` subcommands (find-declaration, find-usages, analyze-file, render-compose-preview, version-lookup). Use this whenever working in an Android codebase and you need to find where a symbol is declared or used, see a file's lint/inspection warnings before building, confirm a Compose preview still renders, or look up the latest version of a dependency. Prefer it over plain text search (grep) for anything symbol-related, since it uses the IDE index and won't conflate same-named symbols — and reach for it especially during refactors and renames and in large codebases. |
Work against a running Android Studio instance through android studio subcommands, so you get the IDE's semantic index instead of grepping text.
Get the project name first with android studio check. It lists each running instance and the projects open in it:
$ android studio check
pid: 12345
version: Quail 2 | 2026.1.2 Canary 2
Projects:
READY MyApp /Users/you/git/MyApp
READY AnotherApp /Users/you/git/AnotherApp
Use the name from the Projects list as --project=<name> (here, MyApp); it has to be READY, meaning the IDE has finished indexing it. Pass --project=<name> to every command below. If several Studio instances are running, also pass --pid=<pid> to pick one.
1. Locate code (instead of grep)
android studio find-declaration --project=<name> <Symbol>
android studio find-usages --project=<name> [--short] <Symbol>
find-declaration returns the defining file, line, and surrounding code.
find-usages lists every usage as file:line across main and test; --short prints locations only.
These use the IDE index, so they tell apart same-named-but-different symbols that a text grep would conflate.
A <Symbol> is just a class, function, or property name — LoginViewModel, fetchUser, isLoggedIn, and so on. For example:
$ android studio find-usages --project=MyApp --short LoginViewModel
app/src/main/kotlin/.../login/LoginScreen.kt:42
app/src/main/kotlin/.../navigation/AppNavHost.kt:88
app/src/test/kotlin/.../login/LoginViewModelTest.kt:15
When the same name is reused elsewhere, pass --context-file=<path> to find-declaration so it resolves the one you mean.
2. Check a file before building
android studio analyze-file --project=<name> <path>
Returns the file's lint / inspection findings (INFO / WARNING), for example a @VisibleForTesting member read from production code, or a dependency declared twice.
Run it after editing a file to catch issues before a costly Gradle build, and chase a finding to its cause with find-declaration.
3. Render a Compose preview
android studio render-compose-preview --project=<name> [--output-image-file=/tmp/preview.png] [--print-semantics] <path> <ComposableName>
Writes the rendered preview to an image, and with --print-semantics prints the layout/semantics tree (text and coordinates) so you can verify the UI without opening the IDE.
4. Look up dependency versions
android studio version-lookup --project=<name> <id> [<id> ...]
Each id is groupId:artifactId (such as androidx.window:window), a Gradle plugin id, or one of gradle / agp / sdk / ndk / studio.
Returns current stable and preview versions, so you add or bump a dependency to a real version instead of guessing.
5. Open a file in the IDE
android studio open-file --project=<name> <path>
Loop
Understand, edit, verify, using the index at each step:
find-declaration / find-usages to see what a change touches.
- Edit the code.
analyze-file (and render-compose-preview for Compose) to verify before building. Re-run find-usages if you changed a symbol's shape.
If Studio isn't running
If android studio check shows no READY project, run studio <project-path> to launch it (JetBrains Toolbox launcher; else open it manually), then re-run android studio check until the project is READY.
Rules
- Get the project name from
android studio check before anything else; the commands need a running Studio with that project open.
- Prefer
find-usages / find-declaration over grep: the index understands symbols, not just text. This matters most in large codebases.
analyze-file reports findings but does not fix them. Read each finding and decide.
- Paths are relative to the current directory or absolute.
Notes
- If multiple Studio instances are running, target one with
--pid=<pid> (from android studio check).
- These commands talk to Android Studio. To drive a device or emulator UI instead, see android-cli-ui-automation-skill.