项目概览和 Soong 工作流程

Android Studio for Platform (ASfP) 中的项目包含为 AOSP 代码库定义工作区的所有内容,包括源代码、资源、测试代码和 Soong build 配置等。

ASfP 基于 IntelliJ 工作区模型构建,可构建大型平台项目,并在启动时从缓存的快照恢复项目模型。out/ 目录中的内容和生成的 gen 文件会从项目搜索范围中排除,以便符号和文件导航保持快速。

项目配置 (.asfp-project)

位于项目目录根目录中的 .asfp-project YAML 文件用于控制 ASfP 项目配置。此文件定义了工作区中包含哪些目录、Soong 模块、语言和 build 标志。

您可以随时使用以下任一选项打开项目配置:

  • 从主菜单中选择 ASfP > Project > Open Config 。
  • 在 Project 工具窗口的根目录中双击 .asfp-project。
  • 在 Soong 工具窗口工具栏中点击 Open Config 。

修改 .asfp-project 后,运行项目同步以使更改生效。

可共享的项目模板(导出和导入)

处理同一子系统(例如 SystemUI、Settings、SurfaceFlinger 或 Automotive)的团队可以将标准 .asfp-project 配置作为模板共享:

  • Export to template:右键点击 .asfp-project 编辑器标签页,或选择 ASfP > Project > Export Config to Template 以保存可共享的模板 文件。

    将 ASfP 项目配置导出为可共享的模板

  • Import from template:在 项目设置向导中创建新项目时,选择 Import from template 并 选择共享的 .asfp-project YAML 文件,以预填充目录、 模块和 build 设置。

配置参数

.asfp-project 文件支持以下参数:

repo

必需:Android 平台代码库检出根目录的绝对路径。

repo: /path/to/aosp

lunch

必需:与您的项目关联的 lunch 目标。用于所有 Soong build、同步和部署操作。

lunch: aosp_cf_x86_64_phone-aosp_current-userdebug

directories

可选:要在项目中包含或排除的目录(相对于 repo 根目录)。支持符号链接目录和源根目录。

directories:
  include:
    -   frameworks/base
    -   packages/apps/Settings
  exclude:
    -   vendor
    -   out/soong

modules

可选:要在项目中包含或排除的特定 Soong 模块。 与 directories 结合使用。支持完整模块名称和缩写模块名称。

modules:
  include:
    -   SystemUI
    -   frameworks/base/services/core/java:services
  exclude:
    -   UnusedModule

test_sources

可选:当 ASfP 的自动 测试源启发法需要手动替换时,要标记为测试源根目录的相对路径。

test_sources:
  -   cts/tests/tests/example
  -   tests/mytests

other_languages

可选:默认启用 Java、Kotlin 和 Android.bp 支持。添加 cpp 以支持 C 和 C++,或添加 rust 以支持 Rust 语言:

other_languages:
  -   cpp
  -   rust

build_config

可选:传递给由 IDE 触发的 Soong build 调用(包括同步、装订线 build 和运行配置)的自定义标志或环境变量:

build_config:
  flags:
    -   -j64
  env:
    SOONG_PARTIAL_COMPILE: true
    SOONG_ALLOW_MISSING_DEPENDENCIES: true

同步模式和 Soong 工具窗口

ASfP 提供了多种方法,可根据您的工作流需求将 IDE 项目与 AOSP 检出同步。您可以从 ASfP > Sync 菜单或 Soong 工具窗口访问这些操作:

  • Sync Project:分析配置的目录和模块,并 更新 IDE 索引和依赖项。
  • Partial Sync:仅同步模块或目录的目标子集, 从而在树的本地化区域中工作时节省时间。
  • No-Build Sync:刷新 IDE 项目结构和源根目录,而无需 运行 Soong build 步骤,这在您添加或移动源文件或 已从终端构建时非常有用。
  • Sync and Full Build:将项目同步与完整的 Soong build 合并为一个步骤。

Soong 工具窗口(View > Tool Windows > Soong )会显示每个同步任务节点的实时状态指示器、快速访问 build 按钮和 Soong 命令执行。


编辑器内 Android.bp build、部署和导航

ASfP 为 Android.bp 文件提供集成编辑器支持:

从装订线构建、运行和调试目标

在项目中打开任何 Android.bp 文件,以从两个装订线图标构建或启动目标:

  • Build 图标(所有命名模块):显示在每个命名 模块(cc_library_shared、java_library、rust_binary、android_app、 和测试目标)的 name: 旁边,用于构建该 Soong 目标(Build "<module>")。
  • Run 或 Debug 图标(*_test、*_test_host 和 android_app):点击测试模块或 android_app 声明旁边的 Run 以运行或 调试模块。android_test 模块通过 atest 进行调试,cc_test* 和 rust_test* 模块在内置 LLDB 下启动。

通过 Android.bp 边线图标构建、运行和调试模块

上下文部署和 Flash 运行配置

对于 Android.bp 文件中的可部署模块,您可以从装订线或右键点击上下文菜单创建和启动上下文 Soong Deploy 运行配置,并具有以下功能:

  • Deployment methods:使用 adb、自定义 shell 脚本、adevice、 或 flashall 进行部署。
  • Pre-run Soong build hooks:在部署到已连接的设备或 Cuttlefish 虚拟设备之前,自动构建目标 Soong 模块。

在 ASfP 中选择 Adevice 或 Flashall 运行配置

在源代码和 Android.bp 之间跳转

在 Project 工具窗口、编辑器标签页或编辑器上下文菜单中的任何源文件或目录中,右键点击并选择 Open Corresponding Android.bp File 。ASfP 会找到并突出显示编译该文件的 Android.bp 模块声明,解析 defaults 代码块、通配符 srcs 模式和符号链接。

打开“打开对应的 Android.bp 文件”上下文菜单操作

Android.bp 编辑器智能和工具提示文档

  • 跨文件导航和使用次数:按住 Control 键并点击任何模块 引用、srcs 文件或 soong_config_module_type,即可跳转到其 声明。可点击的 N Usages 内嵌提示会显示在模块名称和共享 srcs 目标旁边,而未引用的库模块会以视觉方式变暗。
  • Soong 属性文档工具提示:将指针悬停在 Android.bp 文件中的任何 属性上(包括 target、arch 和 multilib 下的架构或目标范围 属性),即可内联查看其 Soong 类型 签名和文档。

Android.bp 属性文档提示和使用情况嵌入提示


Cuttlefish 虚拟设备管理和多屏镜像

ASfP 包含一个内置 Cuttlefish 插件,适用于使用本地构建的 Cuttlefish 虚拟设备的平台、Android Automotive OS (AAOS) 和 软件定义汽车 (SDV) 开发者:

  • 设备管理器中的多设备设置:使用本地 AOSP 检出($ANDROID_BUILD_TOP 和 $ANDROID_PRODUCT_OUT)在 设备管理器 中创建和管理多设备 Cuttlefish 虚拟设备设置。
  • Cuttlefish 工具窗口中的跨屏显示镜像:打开 View > Tool Windows > Cuttlefish 以使用内置 Cuttlefish 跨屏 显示镜像,以便您可以同时查看多个汽车 显示屏并与之互动,从而实现 AAOS 和 SDV 工作流。

ASfP 中的 Cuttlefish 工具窗口和跨屏显示镜像