Android Studio Bumblebee | 2021.1.1 (2022年1月)

以下是 Android Studio Bumblebee 中的新功能。

支持 KMP 测试执行

您可以从 Android Studio Bumblebee 中运行 Kotlin 多平台 (KMP) 项目的测试。

为了确保您的测试能够从 Android Studio 中成功运行,请确保您满足以下所有要求

  • AGP 7.0.0-alpha08 或更高版本
  • Gradle 6.8.2 或更高版本
  • Kotlin 插件 1.4.30 或更高版本

新的设备管理器

New Device Manager window with

**设备管理器**是 AVD 管理器的替代品,两者都可以在 Android Studio 的欢迎屏幕或打开项目后使用。设备管理器引入了一些新功能,使此功能更易于创建和管理所有本地测试设备,例如

  • 更灵活的 UI,支持停靠在 IDE 中、浮动或在单独的窗口中(就像其他 Android Studio 工具窗口一样)。这样,您可以更轻松地访问您的设备,而不会阻挡 IDE 的其他窗口。
  • 一个**虚拟**选项卡,允许您创建、管理和部署虚拟设备;一目了然地查看每个设备的详细信息;或只需单击一下即可在设备文件浏览器中快速检查设备。
  • 一个**物理**选项卡,允许您使用 ADB Wifi 快速配对到新设备,并一目了然地查看每个物理设备的详细信息。您还可以通过单击按钮快速检查每个设备的文件系统。

要打开新的**设备管理器**,请执行以下操作之一

  • 在 Android Studio 欢迎屏幕中,选择**更多操作 > 虚拟设备管理器**。
  • 打开项目后,从主菜单栏中选择**查看 > 工具窗口 > 设备管理器**。

布局检查器中的新增功能

捕获布局层次结构快照

布局检查器现在允许您保存正在运行的应用的布局层次结构的快照,以便您可以轻松地与他人共享或以后参考。

快照会捕获您在使用布局检查器时通常会看到的的数据,包括布局的详细 3D 渲染、视图、Compose 或混合布局的组件树,以及 UI 每个组件的详细属性。要保存快照,请执行以下操作

  1. 将您的应用部署到运行 API 级别 23 或更高版本的设备上
  2. 通过选择**查看 > 工具窗口 > 布局检查器**打开布局检查器。
  3. 布局检查器应自动连接到您的应用进程。如果没有,请从下拉菜单中选择应用进程。
  4. 当您想要捕获快照时,点击布局检查器工具栏中的**导出快照** 导出图标
  5. 在出现的系统对话框中,指定您要保存快照的名称和位置。请确保使用*.li扩展名保存文件。

然后,您可以通过从主菜单栏中选择**文件 > 打开**并打开*.li文件来加载布局检查器快照。

Layout inspector snapshot for the Sunflower sample app

支持检查 Compose 语义

在 Compose 中,语义 以另一种方式描述您的 UI,这种方式对于辅助功能服务和测试框架来说是可以理解的。在 Android Studio Bumblebee 中,您现在可以使用布局检查器来检查 Compose 布局中的语义信息。

Semantic information displayed via the Layout Inspector

选择 Compose 节点时,使用**属性**窗口检查它是否直接声明语义信息、合并其子元素的语义,或者两者兼而有之。要快速识别包含语义(已声明或合并)的节点,请使用**组件树**窗口中的**视图选项**下拉菜单并选择**突出显示语义层**。这只会突出显示树中包含语义的节点,您可以使用键盘在它们之间快速导航。

避免 Activity 重启

将布局检查器连接到旧版 Android Studio 上运行的应用会导致您的应用 Activity 重启。这是为了设置设备标志,该标志可以启用对应用布局的检查。

在 Android Studio Bumblebee 中,您可以通过提前使用以下步骤之一设置此标志来避免在连接布局检查器时 Activity 重启

  • 启用运行配置选项

    1. 从主菜单栏中选择**运行 > 编辑配置**。将出现**运行/调试配置**对话框。
    2. 导航到您要使用的运行配置。
    3. 在**布局检查器选项**部分,选中**无需重启 Activity 即可连接到布局检查器**旁边的复选框。
    4. 下次您要使用布局检查器检查应用时,使用此运行配置。
  • 从命令行设置标志

    1. 在连接到设备的计算机上打开终端窗口
    2. 使用以下命令为您的应用设置设备标志
    adb shell settings put global debug_view_attributes_application_package <my_package_name>
    
    1. 将您的应用部署到设备并连接布局检查器。Android Studio 将检查标志是否已设置,如果可能,将避免重启 Activity。

记录布局检查器快照

您现在可以捕获应用布局层次结构的快照以供以后保存、共享或检查。快照会捕获您在使用布局检查器时通常会看到的的数据,包括布局的详细 3D 渲染、视图、Compose 或混合布局的组件树,以及 UI 每个组件的详细属性。检查正在运行的应用的布局时,点击布局检查器工具栏中的**导出快照** 导出图标,并使用*.li扩展名保存快照。然后,您可以通过从主菜单栏中选择**文件 > 打开**并打开*.li文件来加载布局检查器快照。快照将显示在编辑器窗口的选项卡中,以便您可以轻松地将其与正在运行的应用进行比较。

应用检查中的新增功能

在 Android Studio Bumblebee 中,应用检查窗口中有一些新的工具和功能。您可以通过从主菜单栏中选择**查看 > 工具窗口 > 应用检查**来打开**应用检查器**。

网络检查器

**分析器**工具窗口中的网络分析器现已移至**应用检查**工具窗口。如果您之前使用过网络分析器,则所有相同的功能和丰富的网络流量数据仍然可用。只需将您的应用部署到运行 API 级别 26 或更高版本的设备上,然后打开**应用检查 > 网络检查器**选项卡。

检查作业、警报和唤醒锁

除了对检查 Worker 的现有支持外,**后台任务检查器**现在还允许您检查应用的作业、警报和唤醒锁。每种类型的异步任务现在都显示在检查器选项卡中的相应标题下,使您能够轻松监控其状态和进度。与 Worker 类似,您可以选择一个作业、警报或唤醒锁以在**任务详细信息**面板中检查其详细信息。

Background Task Inspector showing Jobs, Alarms, and Wakelocks

由于 Worker 在后台使用作业和唤醒锁,因此由 Worker 调度的那些任务将显示为每个 Worker 的子项。请记住,您只能在**图形模式**下看到 Worker。

分析器中的新增功能

在 Android Studio Bumblebee 中,有一些新功能可以让您更深入地了解应用如何使用资源。要分析您的应用,请从主菜单栏中选择**查看 > 工具窗口 > 分析器**。

卡顿检测轨迹

使用运行 Android 11(API 级别 30)或更高版本的设备分析应用时,CPU 分析器现在显示一组新的轨迹,这些轨迹说明了**帧生命周期**下每个帧的阶段:**应用**、**等待 GPU**、**合成**和**显示帧**。每个轨迹都使用帧号标记帧,并对矩形进行颜色编码,以便您可以轻松地可视化特定帧在其生命周期中的位置,以及您可以切换以与 Vsync 事件进行比较的指南。您可以使用这些数据来了解应用中可能发生卡顿的位置,并调查根本原因。在**分析**面板中,现在有一个**帧**选项卡,它方便地总结了所有帧的渲染信息。有关更多信息,请参阅UI 卡顿检测

可分析应用分析支持

在分析应用时,使用最接近用户将安装的应用版本的版本生成准确的数据非常重要。为此,您现在可以在应用清单中包含<profileable>属性来分析不可调试的应用,如下面的代码所示。

<profileable android:shell="true"/>

Profileable 是 Android 10 中引入的清单配置,可用于 CPU 和内存分析任务。与可调试标志相比,使用 profileable 标志的主要优点是性能测量的开销更低;但是,某些分析功能不适用于 Profileable 构建,例如事件时间线、API 发起的 CPU 分析、堆转储或实时位置记录。有关更多信息,请参阅可分析应用

折叠调用栈帧

在**分析器**工具窗口中检查**调用栈样本记录**时,您现在可以折叠与您的调查无关的帧。调用栈有助于了解代码的哪一部分已执行,以及为何调用它。但是,Java/Kotlin 程序的调用栈通常不仅包含 Java/Kotlin 代码,还包含可能分散注意力的本机代码的帧。要了解有关优化调用栈视图的更多信息,请参阅检查调用栈帧

无线调试

Android Studio Bumblebee 支持 Android 11 及更高版本设备上的无线调试功能。通过 Wi-Fi 从 Android Studio 配对和部署您的应用,无需使用 USB 线缆或使用命令行管理 Android 调试桥 (adb) 连接。要使用,请从设备选择菜单中导航到**使用 Wi-Fi 配对设备**选项,然后选择 QR 码或配对 PIN 码。然后在您的 Android 11 及更高版本设备上,在**开发者选项**下,找到**无线调试**屏幕,并使用 Android Studio 无线初始化并连接到 adb 会话。在通过 Wi-Fi 连接到设备 (Android 11+)处详细了解无线调试设置。

Pairing a device over Wi-Fi

默认启用 Compose 交互式预览

从 Android Studio Bumblebee 开始,交互式预览功能默认启用。交互式预览允许您与预览进行交互,就像在设备上一样。交互式预览与沙盒环境中的其他预览隔离,您可以在其中点击元素并在预览中输入用户输入。这是一种快速测试可组合组件的不同状态和手势的方法,例如选中或未选中的复选框。

预览交互模式直接在 Android Studio 内部运行,无需运行模拟器,这导致了一些限制

  • 无法访问网络。
  • 无法访问文件。
  • 某些 Context API 可能无法完全使用。

User interacting with a preview inside Android Studio

动画矢量可绘制对象 (AVD) 预览

动画矢量可绘制对象工具提供了预览动画可绘制资源的功能。此工具可帮助您在 Android Studio 中预览<animation-list><animated-vector><animated-selector>资源,并简化自定义动画的完善过程。

User previewing and playing an animation inside Android Studio

默认启用非传递性 R 类

非传递性 R 类现在默认启用。您可以将非传递性 R 类与 Android Gradle 插件一起使用,为包含多个模块的应用程序构建更快的构建。这样做有助于防止资源重复,方法是确保每个模块的 R 类仅包含对其自身资源的引用,而不会从其依赖项中提取引用。这将导致更及时的构建以及相应的编译避免优势。

您可以通过转到**重构 > 迁移到非传递性 R 类...**来获取有关使用此功能的帮助。

Apple Silicon 支持更新

对于在 Apple Silicon (arm64) 硬件上使用 macOS 的用户,Android Studio Arctic Fox 和 Android 模拟器从去年开始就支持这种新的架构。但是,在此版本中,我们现在已更新 Android SDK 平台工具 v32.0.0(包括 adb 和 fastboot)和构建工具 v32.1.0(包括 aapt)为通用二进制文件,以便您的 Android 开发者工具不再需要 Rosetta 二进制翻译器即可运行。请参阅SDK 平台工具发行说明

更新的设计工具设备选择器

为了简化您针对各种 Android 设备设计应用程序的过程,我们更新了各种设计工具窗口(例如布局编辑器和布局验证)中的设备选择器,其中包含反映每种设备外形尺寸流行尺寸的参考设备。从手机到平板电脑,从 Wear 设备到 Android 电视,现在可以更轻松地在最能代表流行的现实世界设备的屏幕尺寸上预览、验证或编辑您的布局。

Device picker with devices and their size and density, grouped by class

Android 测试

Android Studio Bumblebee 和 AGP 7.1 引入了多项新功能和改进,可帮助您更可靠、更可扩展地运行自动化仪器测试,并查看可用于调试问题的有用结果。

统一的 Gradle 测试运行器

Android Gradle 插件 7.1.0 和 Android Studio Bumblebee 及更高版本使用 Gradle 自身的 Android 仪器测试运行器实现来运行仪器测试。通过使用相同的测试运行器,无论您是使用命令行(例如在持续集成服务器上)还是从 Android Studio 中使用 AGP 运行,结果都可能保持一致。

Unified Gradle test runner in Bumblebee

以前的 Android Studio 版本使用 IntelliJ Android 仪器测试运行器而不是 Gradle 的 Android 仪器测试运行器。因此,如果您没有使用最新版本的 Android Studio,则根据您是从 Android Studio 还是从命令行使用 Gradle 插件运行测试,您可能会看到不同的测试结果,例如使用一个运行器通过而另一个运行器失败的测试。

Discrete test runners in older versions of Android Studio

如果您已经在项目中保存了仪器测试配置,它们将使用 Gradle 在您连接的设备上运行测试。您可以使用测试类或方法旁边的代码行操作创建新的仪器测试配置,如下所示。

Run tests from gutter action

运行仪器测试时,您可以通过检查测试矩阵中 Gradle 任务输出的测试输出,确认 Android Studio 是否正在使用 Gradle 测试运行器。虽然我们正在通过每个 Android Studio 版本改进此功能,但存在一些已知问题。如果您遇到问题,请报告错误。您还可以禁用新的测试管道以恢复旧行为。

Android 模拟器现在默认直接在 Android Studio 中运行

Android 模拟器默认直接在 Android Studio 中运行。这使您可以节省屏幕空间,使用热键在模拟器和编辑器窗口之间快速导航,并在单个应用程序窗口中组织您的 IDE 和模拟器工作流程。

The emulator launching in a tool window in Android Studio.

模拟器运行时,您可以访问常见的模拟器操作(如旋转)以及扩展的控制选项(如导航回放)。要改为在单独的窗口中运行模拟器,请转到**文件 > 设置 > 工具 > 模拟器**(在 macOS 上为**Android Studio > 首选项 > 工具 > 模拟器**),然后取消选中**在工具窗口中启动**。

禁用新的测试管道

默认情况下,Android Studio Bumblebee 使用 Gradle 运行其仪器测试。如果您遇到问题,可以按如下方式禁用此行为

  1. 选择**文件 > 设置 > 构建、执行、部署 > 测试**(或在 MacOS 上选择**Android Studio > 首选项 > 构建、执行、部署 > 测试**)。
  2. 取消选中**使用 Gradle 运行 Android 仪器测试**旁边的复选框,然后单击**确定**。

您还可以通过执行以下操作之一恢复旧行为

  • 从命令行运行 Gradle 任务时,使用以下命令行参数:-Pandroid.experimental.androidTest.useUnifiedTestPlatform=false
  • 将以下参数添加到项目的gradle.properties文件中:android.experimental.androidTest.useUnifiedTestPlatform=false

为了帮助解决您可能遇到的问题,请报告错误

补丁版本

以下是 Android Studio Bumblebee 中的补丁版本。

Android Studio Bumblebee | 2021.1.1 Patch 3 (2022 年 4 月)

此次小更新包含以下错误修复

  • Android Gradle 插件
    • R8 报告的重复类问题
  • 构建变体
    • versionNameSuffix如果变体的版本名称是通过新的 onVariants API 设置的,则不再起作用
  • Compose 预览
    • 与性能和稳定性相关的错误修复。
    • 解决在使用文字的实时编辑功能时偶尔发生的冻结问题。
  • 导入/同步
    • “需要 Gradle 同步”消息包含冗余的 AGP 版本
    • 重新编译 Foo.java/kt 清理过多且未重新编译正确的组件
  • 项目结构
    • 更改目标版本时,AGP 升级助手稳定性改进
    • AGP 升级助手现在会通知用户有关正在升级的 Gradle 插件的信息
  • 网络检查器
    • Bumblebee 更新后,新的网络检查器崩溃
    • 在最新版本的 Android Studio 中连接调试器时,我不断收到此错误。
    • TrackedHttpURLConnection.getHeaderField使用NullPointerException崩溃

有关更多信息,请参阅Android Studio Bumblebee Patch 3 博客文章

Android Studio Bumblebee | 2021.1.1 Patch 2 (2022 年 2 月)

此更新包含以下错误修复

  • C++ 构建
    • ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, "")不能为 null
  • 代码编辑器
    • Android Studio 实时模板中的错误 - className()表达式未解析类名
  • D8/R8
    • java.lang.NoSuchMethodError:没有静态方法$jacocoInit
    • 由于 Mockito 错误导致 Android 测试覆盖率中断
    • 需要针对 API 31 上损坏的 CAS 实现的解决方法
    • 不支持密封类
    • 在 Chrome 中启用水平类合并时出现NullPointerException
    • 虚拟方法合并后出现AbstractMethodError
    • 由于 init-class 输出类型不正确导致无法验证堆栈帧
    • Dex 输入使用未定义的寄存器
    • StringBuilderOptimizerAnalysisTest在发布分支上失败
    • R8 中的不确定性
  • 部署
    • 设备所有者应用程序的项目运行失败,并显示无法终止现有进程错误消息
  • 设计工具
    • 启用非传递性 R 类时,Compose 预览无法找到其他模块中的资源
    • Studio 在构建时冻结。
  • 嵌入式模拟器
    • 其他性能和稳定性改进。
  • 导入/同步
    • 启动 Bumblebee 时出现 IDE 错误:输出列表构建文件不可用于IdeBuildTasksAndOutputInformationImp中的 Apk 输出类型
  • IntelliJ
    • 从 Mac OS X Monterey Dock 启动时未获取环境变量
  • Jetpack (androidx) > 导航
    • 升级 SafeArgs 以在最新的稳定 AGP 上构建
  • 工具窗口
    • 无法运行 Android 设备管理器
    • BumbleBee 中的网络检查器未以可读格式显示 API 响应

有关更多信息,请参阅Android Studio Bumblebee Patch 2 博客文章

Android Studio Bumblebee | 2021.1.1 Patch 1 (2022 年 2 月)

此次小更新包含以下错误修复

  • 模拟器
    • 升级到 Bumblebee 后无法连接到嵌入式模拟器(Mac M1)
  • IntelliJ
    • 从 Mac OS X Monterey Dock 启动时未获取环境变量

有关更多信息,请参阅Android Studio Bumblebee Patch 1 博客文章