Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
231 changes: 231 additions & 0 deletions third_party/skills/.agents/skills/android-cli/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
---
name: android-cli
description: Provides instructions for installing and using the `android` CLI. The `android` command-line tool is a critical tool for Android development and helps you create new Android projects, run Android apps on devices, manage and interact with Android virtual devices (including screenshots and UI inspection), manage Android SDK components, look up official Android documentation, and discover and install official Android skills.
license: Complete terms in LICENSE.txt
metadata:
author: Google LLC
keywords:
- sdk
- emulator
- skills
- docs
- knowledge base
- project creation
- screenshots
---
# Android CLI Specialist

This skill provides instructions for using the `android` CLI tool. The tool includes various commands for creating projects, running applications, interacting with devices, and managing the CLI environment.

## Installation

If the android tool is not in the path, install it. To install run the following command:
Linux: curl -fsSL https://dl.google.com/android/cli/latest/linux_x86_64/install.sh | bash
Mac Arm: curl -fsSL https://dl.google.com/android/cli/latest/darwin_arm64/install.sh | bash
Mac Intel: curl -fsSL https://dl.google.com/android/cli/latest/darwin_x86_64/install.sh | bash
Windows: curl -fsSL https://dl.google.com/android/cli/latest/windows_x86_64/install.cmd -o "%TEMP%\i.cmd" && "%TEMP%\i.cmd"

## SDK management
To manage the installation of Android SDKs and tools, use the `sdk` command. For example:

- `android sdk install <package>[@<version>]...`: Install specific packages. Multiple packages can be specified, separated by spaces. `<version>` defaults to latest. For example: `android sdk install platforms/android-30@2 platforms/android-34`
- `android sdk update [<pkg-name>]`: Update a specific package or all packages to the latest version.
- `android sdk remove <pkg-name>`: Remove a package from the local SDK.
- `android sdk list --all`: List installed and available SDK packages.

## Project creation
Create projects from templates using the `create` command.

For example: `android create empty-activity --name="My App" --output=./my-app`

## Interacting with devices
For more information on interacting with running devices, see [here](references/interact.md)

## Running journey tests
For more information on running journeys, see [here](references/journeys.md)

## Doc searching
The `docs` command searches authoritative, high-quality Android developer documentation in the Android Knowledge Base.
By providing a few keywords, this tool will return high quality articles that contain examples or guidance on how to use Android APIs or libraries.
Use this tool to obtain additional information on how to achieve Android-specific tasks or to know more about Android APIs, surfaces, libraries, or devices.

Always use this tool to get the most up-to-date information about Android concepts. Typical good use cases are:
- Finding migration guides for APIs.
- Finding examples for APIs.
- Finding up-to-date information about Android APIs.
- Finding best practices for Android concepts.

## Running APKs
Use the `run` command to run Android apps.

## Managing emulators

Manage Android Virtual Devices (AVDs) using the `android emulator` command

## Capturing screenshots

Capture an image of the current screen of a connected Android device and output it to a file using the `android screenshot` command.

## Managing skills

Manage antigravity agent skills for Android using the `android skills` command.

## Inspecting UI Layouts

Use the `android layout` command to inspect the UI layout of an Android application. It returns the layout tree of an Android application in JSON format. When debugging UI errors, this is often a much faster approach than taking a screenshot.

## Updating the CLI

Update the Android CLI using the `android update` command.

# `android help` output

Usage: android [-hV] [--sdk=PARAM] [COMMAND]
-h, --help Show this help message and exit.
--sdk=PARAM Path to the Android SDK
-V, --version Print version information and exit.
Commands:
create Create a new Android project
describe Analyzes an Android project to generate descriptive metadata.
docs Android documentation commands
emulator Emulator commands
help Shows the help of all commands
info Print environment information (SDK Location, etc.)
init Initializes the environment (eg. skills) for Android CLI.
layout Returns the layout tree of an application
run Deploy an Android Application
screen Commands to view the device
sdk Download and list SDK packages
skills Manage skills
studio Android Studio commands
update Update the Android CLI

create
Usage: android create [-h] [--verbose] [--list] [--minSdk=api]
--name=applicationName [-o=dest-path] [template-name]
Create a new Android project
[template-name] The template name
-h, --help Show this help message and exit.
--minSdk=api The 'minSdk' supported by the application (default
is defined in the template)
--name=applicationName
The name of the application (e.g. 'My Application')
-o, --output=dest-path The destination project directory path (default is
'.')
--verbose Enables verbose output
--list List all available templates

describe
Usage: android describe [-hV] [--project_dir=PARAM]
Analyzes an Android project to generate descriptive metadata.
This command identifies and outputs the paths to JSON files that detail the
project's structure, including build targets and their corresponding output
artifact locations (e.g., APKs). This information enables other tools and
commands to locate build artifacts efficiently.
-h, --help Show this help message and exit.
--project_dir=PARAM The project directory to describe
-V, --version Print version information and exit.

docs
Usage: android docs [-h] [COMMAND]
Android documentation commands
-h, --help Show this help message and exit.
Commands:
search Search Android documentation
fetch Fetch Android documentation

emulator
Usage: android emulator [-h] [COMMAND]
Emulator commands
-h, --help Show this help message and exit.
Commands:
create Creates a virtual device
start Launches the specified virtual device. This command will return when
the emulator is fully started and ready to use.
stop Stops the specified virtual device
list Lists available virtual devices
remove Delete a virtual device

help
Usage: android help [COMMAND]
Shows the help of all commands
[COMMAND] The command to show help for

info
Usage: android info <field>
Print environment information (SDK Location, etc.)
<field> The specific field to print the value of. If omitted print all.

init
Usage: android init
Initializes the environment (eg. skills) for Android CLI.

layout
Usage: android layout [-dhp] [--device=PARAM] [-o=PARAM]
Returns the layout tree of an application
-d, --diff Returns a flat list of the layout elements that have
changed since the last invocation of ui-dump
--device=PARAM The device serial number
-h, --help Show this help message and exit.
-o, --output=PARAM Writes the layout tree to the specified file or
directory. If omitted, prints the tree to standard
output
-p, --pretty Pretty-prints the returned JSON

run
Usage: android run [-h] [--debug] [--activity=PARAM] [--device=PARAM]
[--type=PARAM] [--apks=PARAM[,PARAM...]]...
Deploy an Android Application
--activity=PARAM The activity name
--apks=PARAM[,PARAM...]
The paths to the APKs
--debug Run in debug mode
--device=PARAM The device serial number
-h, --help Show this help message and exit.
--type=PARAM The component type (ACTIVITY, SERVICE, etc.)

screen
Usage: android screen [-h] [COMMAND]
Commands to view the device
-h, --help Show this help message and exit.
Commands:
capture Outputs the device screen to a PNG
resolve Target UI elements visually

sdk
Usage: android sdk [COMMAND]
Download and list SDK packages
Commands:
install Install SDK packages
update Update one or all packages to the latest version
remove Remove a package from the SDK
list List installed and available SDK packages

skills
Usage: android skills [COMMAND]
Manage skills
Commands:
add Install a skill
remove Remove a skill
list List available skills
find Find skills by keyword

studio
Usage: android studio [-h] [COMMAND]
Android Studio commands
-h, --help Show this help message and exit.
Commands:
find-declaration Find declaration of a symbol
find-usages Find usages of a symbol
open-file Open a file in Android Studio
check Check the status of running Studio instances
analyze-file Analyze a file in Android Studio
render-compose-preview Render a Compose preview in Android Studio
version-lookup Looks up the latest available versions on the
internet of maven artifacts, Android versions, and
more.

update
Usage: android update [--url=PARAM]
Update the Android CLI
--url=PARAM The URL to download the update from
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# Tools
Run `android layout --help` and `android screen --help`.

## UI Dump
`android layout` returns a flat JSON list of the UI elements on screen.
`android layout --diff` returns a flat JSON list of the UI elements that have changed since the last call to `layout` or `layout --diff`

Each JSON object represents a UI element in the Android app. The following properties may be present:
- `text` - any literal text the element contains
- `resourceId` - the Android resource id used to refer to the element
- `contentDesc` - a description of a UI element for use by accessibility tools
- `interactions` - the set of user interactions the element supports. May contain one or more of: `checkable`, `clickable`, `focusable`, `scrollable`, `long-clickable`, `password`
- `state` - the set of states the element is in. May contain one or more of `checked`, `focused`, `selected`
- `bounds` - the screen coordinates of the bounding rectangle of the element, in the format `[min X,min Y][max X, max Y]`
- `center` - the screen coordinates of the center of the element, in the format `[x,y]`
- `off-screen` - if true, the element is in the UI hierarchy but not visible; it may require scrolling to view.

Use `layout` as a primary means of examining an Android app. Use `layout --diff` to focus on changes and to keep your context small.
Example: When entering digits into a calculator, use `layout --diff` to output only the digit readout element.

`layout` may fail due to the app displaying a WebView or animation; in these cases, use `android screen --annotate` to inspect the app.
This failure will likely resolve after navigating away from the current screen.

## Screenshot
`android screen capture -o <file path>` saves a PNG of the current device screen to `<file path>`

Use `screen capture` as a secondary means of examining an Android app
Examples:
- Understanding the content of an on-screen image
- Looking at a `WebView` (web content does not always appear in the ui dump)
- Trying to find a UI element by its visual appearance

**IMPORTANT**: Always *VISUALLY* examine the PNG image returned from `android screen` BEFORE doing anything else.

## Annotated Screenshot
`android screen capture --annotate -o <file path>`
`android screen resolve --screen <path> --string <string>`

The `--annotate` command adds numerical labels and bounding boxes around UI elements. Use this command to locate UI elements that cannot
be located in the `layout` output.

**IMPORTANT**: When using `android screen --annotate`, always *VISUALLY* examine the resulting PNG file.

To refer to these labels in input commands, use `screen resolve` to convert labels into coordinates:

`android screen resolve --screen <file path> --string "#3"` returns `<x coord of region 3> <y coord of region 3>`

To save turns, you can combine shell commands:

`adb shell input $(android screen resolve --screen screen.png --string "tap #34")`

This command taps on region #34 from `screen.png`

## Input
Use `adb shell input` for interacting with Android devices.
Refer to the `"interactions"` property of an element for what interactions can be performed on a particular element.

Interact with UI elements with their `center` coordinate or their `bounds` coordinates:
```json
{
"key": -248568265,
"class": "android.widget.Button",
"bounds": "[138,9][167,38]",
"center": "[152,23]"
}
```
To tap on this button, you would execute `adb shell input tap 152 23`. This taps the center.

```json
{
"key": 12487234,
"class": "com.example.ui.ScrollableList",
"bounds": "[100,200][400,600]",
"center": "[250,400]"
}
```
To scroll down on this list, you would execute `adb shell input swipe 250 400 600 500`. This swipes from the center to the bottom over 500ms.

# Android Interaction Rules
1. Always ensure text input fields have `"focused"` in their `"state"` list before entering text
2. If an element has `"scrollable"` in its `"interactions"` list, try scrolling it when looking for missing UI elements
2. Always scroll slowly when executing scroll inputs. The 5th argument to `adb shell input swipe` controls scroll duration.
3. Content may take time to load; if a `layout` is missing information after you take an action, wait a few seconds, then perform `layout --diff` to see if anything changes.
Loading
Loading