Android CLI 概览

Android CLI 是一种命令行界面,可让您使用任意选择的工具更轻松高效地为 Android 构建应用。它可标准化以智能体为先的工作流的核心开发能力,并提供官方工具、技能和知识的入门点,让您能够更高效地进行开发。它还可以简化 CI、维护和任何其他脚本化自动化流程,以应对 Android 开发日益分散的特性。

例如,代理或脚本可以使用 CLI 执行以下任务:

  • 自动设置环境
  • 根据模板搭建新项目
  • 直接从终端管理虚拟设备
  • 使用历程测试应用

Android CLI 还可让您的代理访问 Android 技能和专业的 Android 知识库,以帮助确保您的项目应用 Android 推荐的模式和最佳实践。

安装 Android CLI

如需安装 Android CLI,请按以下步骤操作:

  1. 下载 Android CLI

  2. 为确保您使用的是最新版本,请更新 Android CLI:

    android update
    

如需检查 Android CLI 是否已安装在您的机器上,请运行 which androidcommand -v android:如果返回路径,则表示已安装。

为代理设置

为了帮助代理了解和使用 Android CLI,请运行 init 以安装 android-cli 技能:

android init

收集的数据

Android CLI 会收集有关该工具基本使用情况的数据。以下是我们收集的数据:

  • android 命令和子命令(例如 android runandroid create)的调用。
  • 所使用的非位置实参或选项的名称,例如 --sdk--version
  • 与 Android CLI 管理的一组固定、预定义的系统选项相对应的位置实参和标志值。例如,我们会收集模拟器模板名称(如 medium_phonelarge_desktop)以及代理名称(如 GEMINICLAUDECODEX)。
  • 堆栈轨迹和异常消息,其中身份信息会在收集之前进行匿名化处理,以帮助确保隐私。

以下是我们不会收集的一些数据示例:

  • 我们不会在运行命令时收集 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 -h
  • android 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 createandroid 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,请使用此方法。支持的类型:
    • ACTIVITY
    • WATCH_FACE
    • TILE
    • COMPLICATION
    • DECLARATIVE_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)

选项:

  • --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 的当前版本。