Android CLI 是一种命令行界面,可让您使用任意选择的工具更轻松高效地为 Android 构建应用。它可标准化以智能体为先的工作流的核心开发能力,并提供官方工具、技能和知识的入门点,让您能够更高效地进行开发。它还可以简化 CI、维护和任何其他脚本化自动化流程,以应对 Android 开发日益分散的特性。
例如,代理或脚本可以使用 CLI 执行以下任务:
- 自动设置环境
- 根据模板搭建新项目
- 直接从终端管理虚拟设备
- 使用历程测试应用
Android CLI 还可让您的代理访问 Android 技能和专业的 Android 知识库,以帮助确保您的项目应用 Android 推荐的模式和最佳实践。
安装 Android CLI
如需安装 Android CLI,请按以下步骤操作:
为确保您使用的是最新版本,请更新 Android CLI:
android update
如需检查 Android CLI 是否已安装在您的机器上,请运行 which android 或 command -v android:如果返回路径,则表示已安装。
为代理设置
为了帮助代理了解和使用 Android CLI,请运行 init 以安装 android-cli 技能:
android init
收集的数据
Android CLI 会收集有关该工具基本使用情况的数据。以下是我们收集的数据:
android命令和子命令(例如android run和android create)的调用。- 所使用的非位置实参或选项的名称,例如
--sdk或--version。 - 与 Android CLI 管理的一组固定、预定义的系统选项相对应的位置实参和标志值。例如,我们会收集模拟器模板名称(如
medium_phone和large_desktop)以及代理名称(如GEMINI、CLAUDE或CODEX)。 - 堆栈轨迹和异常消息,其中身份信息会在收集之前进行匿名化处理,以帮助确保隐私。
以下是我们不会收集的一些数据示例:
- 我们不会在运行命令时收集 CLI 的响应。
- 我们不会收集传递给 CLI 的用户创建的输入内容或外部标识符,例如特定的 Maven 坐标、本地文件路径或自定义项目名称。例如,如果执行了命令
android create --name=com.company.internal.app,我们会记录android create是使用--name实参执行的,但不会存储值com.company.internal.app。
已知问题
- 适用于 Windows 的
android emulator命令目前已停用。 - 目前不支持从 Windows PowerShell 下载 Android CLI。
如果您遇到任何问题或想提供反馈,请报告 bug。
配置 Android CLI
创建 .androidrc 文件,以便在每次调用 Android CLI 时自动应用标志和选项。将文件保存到以下位置,具体取决于您的操作系统:
- macOS 和 Linux:
~/.androidrc - Windows:
%USERPROFILE%\.androidrc
添加要自动应用于文件的标志,每行一个。
例如,如需让 Android CLI 每次都默认使用特定的 Android SDK,请向您的文件中添加 --sdk 标志:
--sdk=<path-to-sdk>
全局选项
这些是可选标志,可与其他 Android CLI 命令搭配使用。
-h, --help
用法: android <command> -h
说明:显示相应工具或特定命令的帮助手册。
示例:
android -handroid create -h
--sdk
用法: android --sdk=<path-to-sdk> <command>
说明:您要用于后续命令的 Android SDK 的路径。您可以使用 --sdk 设置来暂时替换默认 Android SDK,而不必每次想切换时都更改全局环境变量。如需查看您默认使用的 Android SDK,请运行 android info。
示例: android --sdk=<path/to/sdk> sdk list
命令
本部分列出了所有 Android CLI 命令,并介绍了它们的作用。所有这些命令都应以 android 开头,例如 android create、android run 等。可选修饰符用方括号 [] 括起来,而必需实参则不用。
create
用法: android create [--dry-run] [--verbose] [--name=<application-name>] [--output=<dest-path>] [<template-name>]
说明:从模板初始化新项目。如需查看模板选项,请运行 android create -h。
实参(必需):
-o, --output- 目标项目目录路径。
选项:
--dry-run- 模拟整个项目创建过程,但不实际保存任何文件。例如,您可以先进行试运行,了解不同模板的功能,然后再选择其中一个。--verbose- 启用详细输出,包括从模板复制的文件等信息。--name=<application-name>- 项目目录的名称。如果省略,则使用输出目录。<template-name>- 要创建新项目的模板的名称。 如果省略,则使用empty-activity-agp-9。
示例: android create --dry-run --verbose empty-activity-agp-9
create list
用法: android create list
说明:列出所有可用于创建新项目的可用模板。
describe
用法: android describe [--project_dir=<project-directory>]
说明:分析 Android 项目以生成描述性元数据。 此命令可识别并输出 JSON 文件的路径,这些文件详细说明了项目的结构,包括 build 目标及其对应的输出工件位置(例如 APK 文件)。此信息可让其他工具和命令高效地找到 build 工件。
选项:
--project_dir- 要描述的项目目录。如果省略,则使用当前目录。
示例: android describe --project_dir=/path/to/your/project
docs
用法:
android docs search <query>android docs fetch <kb-url>
说明:android docs 命令是一个两步流程,用于直接从 CLI 访问 Android 知识库。首先,使用 search 命令搜索与您的查询相关的文档。搜索结果将包含以 kb:// 开头的特殊网址,然后您可以将这些网址与 fetch 命令搭配使用,以将文档命令输出到终端。
示例:
android docs search 'How do I improve my app performance?'android docs fetch kb://android/topic/performance/overview
emulator create
用法: android emulator create [--list-profiles] [--profile=<profile-name>]
说明:创建虚拟设备。
选项:
--list-profiles- 列出可用于创建设备的设备配置文件。--profile=<profile-name>- 创建具有指定配置的设备。如果省略此参数,系统将创建medium_phone个人资料。
emulator list
用法: android emulator list
说明:列出可用的虚拟设备。
emulator start
用法: android emulator start <device-name>
说明:启动指定的虚拟设备。
实参(必需):
<device-name>- 要启动的设备名称(例如medium_phone)。使用android emulator list可查看可用设备。
示例: android emulator start medium_phone
emulator stop
用法: android emulator stop <device-serial-number>
说明:停止指定的虚拟设备。
实参(必需):
<device-serial-number>- 要停止的设备序列号。
示例: android emulator stop emulator-5554
info
用法: android info
说明:显示所用默认 Android SDK 的路径。如需更改所用的 Android SDK,请使用 --sdk。
init
用法: android init
说明:通过安装 android-cli 技能,为代理设置环境。
layout
用法: android layout [--pretty] [--output] [--diff]
说明:以 JSON 格式返回有效 Android 应用(通过实体设备或模拟器连接)的界面布局。
选项:
-p, --pretty- 使用缩进和换行符设置 JSON 输出的格式,以便于用户阅读。-o, --output- 指定用于保存布局树的文件位置。如果省略,JSON 会直接输出到标准输出。-d, --diff- 返回自上次拍摄内部快照(上次运行布局)以来发生更改的布局元素列表,而不是完整的布局树。
示例:android layout --output=./hierarchy.json
run
用法: android run [--debug] [--activity=<activity-name>] [--device=<serial-number>] [--type=<param>] --apks=<apk-paths>
说明:将 Android 应用部署到已连接的设备或模拟器。它不会执行任何构建步骤;您必须提供要安装的 APK 文件的路径。
实参(必需):
--apks- 要安装的 APK 文件路径的逗号分隔列表。该路径相对于您当前在文件系统中的位置。
选项:
--activity- APK 安装完成后要启动的 activity 的名称。如果有多个 activity,您必须指定一个要最初启动的 activity。--debug- 在调试模式下部署应用。在调试模式下运行应用后,您必须从 IDE(例如 Android Studio)或命令行工具连接调试器,才能开始调试。--device- 目标设备或模拟器的序列号。仅在连接多个设备时才需要使用。如需查找设备序列号,请运行adb devices。--type- 要启动的组件类型。如果您想直接启动后台服务而不是界面 activity,请使用此方法。支持的类型:ACTIVITYWATCH_FACETILECOMPLICATIONDECLARATIVE_WATCH_FACE
示例:
android run --apks=app/build/outputs/apk/debug/app-debug.apk- 将单个 APK 部署到默认设备。android run --apks=base.apk,density-hdpi.apk,lang-en.apk- 将多个 APK 部署到默认设备。android run --apks=app-debug.apk --type=SERVICE --activity=.sync.DataSyncService- 测试没有 activity 的服务。android run --apks=app-debug.apk --device=emulator-5554- 将 APK 部署到特定设备。
screen capture
用法: android screen capture [--output] [--annotate]
说明:捕获已连接设备的屏幕截图。
选项:
-o, --output- 指定用于保存屏幕截图的文件位置。如果省略,原始 PNG 数据将直接打印到标准输出。-a, --annotate- 在图片上检测到的所有界面元素周围绘制带标签的边界框,以便与resolve命令搭配使用。
示例: android screen capture --output=ui.png
screen resolve
用法: android screen resolve --screenshot=<path> --string=<string>
说明:将使用 screen capture 捕获的带注释的屏幕截图中的视觉标签转换为实际屏幕坐标 (x, y)。有助于通过脚本点击元素,而无需手动计算其位置。
标志:
--screenshot- 带注释的屏幕截图的路径。--string- 一个字符串,其中包含至少一个与界面元素标签对应的占位符,格式为#<number>。#<number>部分将被屏幕坐标替换。
示例:
如果标签 5 位于坐标 (500, 1000),则以下命令
android screen resolve --screenshot=ui.png --string="input tap #5"
返回输出
input tap 500 1000
sdk install
用法: android sdk install <package[@version]> [--beta] [--canary] [--force]
说明:安装指定的 SDK 软件包。
实参(必需):
package[@version]- 以空格分隔的待安装软件包列表。如果未指定版本,则会安装渠道中的最新版本(默认情况下为稳定版渠道)。
选项:
--beta- 包含 Beta 版软件包。--canary- 包含 Canary 版软件包。--force- 强制降级到旧版本。
示例:
android sdk install platforms/android-34 build-tools/34.0.0- 从稳定版渠道安装最新版本的 Android SDK Platform 34 和 SDK Build Tools 34.0.0 软件包。android sdk install platforms/android-34@2- 安装 Android SDK 平台 34 软件包的版本 2。android sdk install --canary system-images/android-35/google_apis/x86_6- 从 Canary 渠道安装最新版本的 Android 35 系统映像。android sdk install --force platforms/android-33@1- 从稳定渠道恢复到 Android SDK Platform 33 软件包的版本 1。
sdk list
用法: android sdk list <package-pattern>
说明:列出已安装和可用的 SDK 软件包。
实参(必需):
<package-pattern>- 按模式过滤软件包。支持正则表达式。
选项:
--all- 显示所有已安装和可用的软件包。--all-versions- 显示每个软件包的所有版本。--beta- 包含 Beta 版软件包。--canary- 包含 Canary 版软件包。
sdk remove
用法: android sdk remove <package-name>
说明:从 SDK 中移除软件包。
实参(必需):
<package-name>- 要移除的软件包的名称。
示例: android sdk remove build-tools/36.1.0
sdk update
用法: android sdk update [--beta] [--canary] [<package-name>]
说明:将一个或所有软件包更新为渠道中的最新版本(默认情况下为稳定版渠道)。如果您未指定软件包,则所有软件包都将更新。
选项:
<package-name>- 要更新的软件包的名称。--beta- 包含 Beta 版软件包。--canary- 包含 Canary 版软件包。--force- 强制降级到旧版本。
示例:
android sdk update- 检查并安装 SDK 中所有内容的更新。android sdk update build-tools/34.0.0- 将 Android SDK Build Tools 34.0.0 软件包更新为稳定渠道中的最新版本。android sdk update --canary platforms/android-35- 将 Android SDK 平台 35 软件包更新为 Canary 渠道中的最新版本。
skills add
Android 技能是专门设计的指令,旨在帮助智能体更好地理解和执行遵循 Android 开发最佳实践和指南的特定模式。如需了解详情,请参阅 Android 技能简介。
用法: android skills add [--all] [--agent=<agent-name>] [--skill=<skill-name>]
说明:将 Android 技能安装到所有检测到的代理的技能目录中。如果您没有任何现有的代理目录,并且未指定特定代理,则技能将安装到 ~/.gemini/antigravity/skills 中,供 Gemini 和 Antigravity 使用。如果您已安装 Android 技能,skills add 会将技能更新为最新版本。
选项:
--all- 一次性安装或更新所有 Android 技能。如果省略此参数(且未指定--skill),则只会安装android-cli技能。--agent- 要安装或更新技能的代理的英文逗号分隔列表。如果省略,系统将为所有检测到的代理安装技能。--skill- 要安装或更新的技能的名称。如果省略(且未指定--all),则仅安装或更新android-cli技能。
示例: android skills add --agent='gemini' edge-to-edge
skills find
用法: android skills find <string>
说明:查找与给定字符串匹配的技能。
实参(必需):
string- 与技能说明匹配的字符串。
示例: android skills find 'performance'
skills list
用法: android skills list [--long]
说明:列出可用的技能。
选项:
--long- 输出每项技能的其他信息,包括技能说明以及已安装技能的代理。
skills remove
用法: android skills remove [--agent] --skill=<skill-name>
说明:移除技能。如果您未指定特定代理,系统会为所有代理移除该技能。
实参(必需):
--skill- 要移除的技能的名称。
选项:
--agent- 要移除技能的客服人员列表(以逗号分隔)。如果省略,则会为所有代理移除相应技能。
示例: android skills remove --agent='gemini' --skill=edge-to-edge
studio check
studio 命令可让您或 AI 智能体与 Android Studio 的活跃实例进行互动。通过连接到正在运行的实例,您可以使用 IDE 的功能来分析文件、查找符号声明和用法、渲染 Compose 预览,以及查找依赖项版本。
用法: android studio check
说明:检查正在运行的 Android Studio 实例的状态,并列出打开的项目。请先运行此命令,以验证 CLI 与 IDE 之间的连接,并选择要连接的 PID 和项目(如果有多个)。
输出示例:
如果已连接,输出会列出正在运行的 Android Studio 实例的 PID、版本以及打开项目的状态:
pid: 32942
version: Android Studio Quail
Projects:
READY MyApplication /Users/username/AndroidStudioProjects/MyApplication
studio analyze-file
用法: android studio analyze-file [--pid=<pid>] [--project=<project>] <path>
说明:使用 IDE 的内置检查引擎分析 Android Studio 中的文件,查找错误、警告和 lint 问题。
实参(必需):
<path>- 要分析的 Kotlin 或 Java 文件的路径。
选项:
--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行analyze-file命令,则默认使用该项目。
示例:
android studio analyze-file \
--project=MyApplication \
/Users/username/AndroidStudioProjects/MyApplication/app/src/main/java/com/example/myapp/MainActivity.kt
studio find-declaration
用法: android studio find-declaration [--short] [--context-file=<path>] [--pid=<pid>] [--project=<project>] <symbol>
说明:使用语义解析在整个项目中查找符号(类、方法、变量、字段、常量或 Android 资源)的确切声明位置。
实参(必需):
<symbol>- 要查找声明的代码符号的名称。
选项:
--context-file=<path>- 包含符号引用的文件的可选路径。提供上下文的描述文件有助于通过提供导入和范围来解析不明确或过载的符号。--short- 简化输出,仅显示文件位置和匹配的行。--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行find-declaration命令,则默认使用该项目。
示例:
android studio find-declaration --short HotelDetailScreen
studio find-usages
用法: android studio find-usages [--short] [--pid=<pid>] [--project=<project>] <symbol>
说明:使用语义分析在整个项目中查找符号的所有引用和用法。
实参(必需):
<symbol>- 要查找其用法的符号的名称。
选项:
--short- 简化输出,仅显示匹配的文件位置。--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行此命令,则系统会默认使用该项目。
示例:
android studio find-usages --short HotelDetailScreen
studio open-file
用法: android studio open-file [--pid=<pid>] [--project=<project>] <path>
说明:直接在 Android Studio 的活动编辑器窗口中打开文件。
实参(必需):
<path>- 要打开的文件的路径。可以指定为相对于项目根目录的路径,也可以指定为绝对路径。
选项:
--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行open-file命令,则默认使用该项目。
示例:
android studio open-file app/src/main/java/com/example/myapp/ui/DetailScreen.kt
studio render-compose-preview
用法: android studio render-compose-preview [--print-semantics] [--output-image-file=<filename>] [--pid=<pid>] [--project=<project>] <path> <composable>
说明:渲染 Jetpack Compose 界面预览,并可选择返回其布局语义树。这对于进行视觉测试或使 AI 代理能够处理界面布局非常有用。
实参(必需):
<path>- 包含 Compose 预览的 Kotlin 文件的路径。<composable>- 可组合项预览函数的名称(标有@Preview)。
选项:
--output-image-file=<filename>- 指定要将渲染后的 PNG 图像写入到的文件名。如果省略,则会创建一个临时文件。--print-semantics- 如果为 true,则以 JSON 格式输出渲染的 Compose 预览版的无障碍语义树。这样,代理就可以解析界面的结构和互动元素。--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行render-compose-preview命令,则默认使用该项目。
示例:
android studio render-compose-preview \
--output-image-file=preview_hotel.png \
--print-semantics \
app/src/main/java/com/example/myapp/ui/DetailScreen.kt \
HotelDetailScreenPreview
studio version-lookup
用法: android studio version-lookup [--pid=<pid>] [--project=<project>] <artifacts...>
说明:在 Google Maven 等代码库中查找常见依赖项、Android 平台和 SDK 工具的最新可用版本。这提供了一种以程序化方式替代手动检查依赖项版本的方法。
实参(必需):
<artifacts...>- 以空格分隔的标识符列表。您可以使用单个命令查询多个制品。支持的标识符包括:- Maven 库:
groupId:artifactId注释(例如androidx.window:window)。 - Gradle 插件:插件 ID(例如
com.android.application)。 - 关键字:
gradle(Gradle 构建工具)studio(Android Studio)agp(Android Gradle 插件)ndk(Android NDK)sdk(Android SDK)emulator(Android 模拟器)adb(Android 调试桥)compose(Jetpack Compose BOM)kotlin(Kotlin 运行时和编译器)android(Android 操作系统版本)platform-tools(Android SDK Platform-Tools)cmdline-tools(Android SDK 命令行工具)build-tools(Android SDK Build-Tools)
- Maven 库:
选项:
--pid=<pid>- 要连接到的特定 Android Studio 实例的 PID(如果有多个)。--project=<project>- 要查询的在 Android Studio 中打开的项目名称(如果有多个)。如果您从项目目录中运行version-lookup命令,则默认使用该项目。
示例:
android studio version-lookup \
androidx.compose.ui:ui \
com.android.application \
agp \
kotlin
update
用法: android update
说明:更新 Android CLI。
-V, --version
说明:显示 Android CLI 的当前版本。