Android Studio Bumblebee | 2021.1.1(2022 年 1 月)

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

支持执行 KMP 测试

您可以从 Android Studio Bumblebee 针对 Kotlin Multiplatform (KMP) 项目运行测试。

为了确保您的测试从 Android Studio 成功运行,您必须满足以下所有要求:

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

新的设备管理器

新的“设备管理器”窗口,其中包含

设备管理器是 AVD 管理器的替代工具,可在 Android Studio 的欢迎屏幕上或在打开项目后找到。设备管理器引入了一些新功能,可让您更轻松地创建和管理所有本地测试设备,例如:

  • 一种更灵活的界面,支持停靠在 Android Studio 中、悬浮起来或以单独的窗口显示,就像其他 Android Studio 工具窗口一样。这样,您就可以更轻松地访问设备,而不会妨碍 Android Studio 的其他窗口。
  • 一个 Virtual 标签页,可让您创建、管理和部署虚拟设备;一目了然地查看每个设备的详细信息;或者通过单击在设备文件浏览器中快速检查设备。
  • 一个 Physical 标签页,可让您使用 ADB Wifi 快速与新设备配对,并一目了然地查看每个实体设备的详细信息。此外,您只需点击按钮,即可使用设备文件浏览器快速检查每台设备的文件系统。

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

  • 在 Android Studio 欢迎屏幕上,依次选择 More Actions > Virtual Device Manager
  • 打开项目后,从主菜单栏中依次选择 View > Tool Windows > Device Manager

布局检查器中的新功能

捕获布局层次结构快照

借助布局检查器,您现在可以保存正在运行应用的布局层次结构快照,以便轻松地与他人分享或日后查看。

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

  1. 将您的应用部署到搭载 API 级别 23 或更高级别的设备中
  2. 依次选择 View > Tool Windows > Layout Inspector,打开布局检查器。
  3. 布局检查器应该会自动连接到您的应用进程。如果未自动连接,请从下拉菜单中选择相应应用进程。
  4. 如需捕获快照,请点击布局检查器工具栏中的 Export snapshot “导出”图标
  5. 在出现的系统对话框中,指定快照的名称和保存位置。请务必以 *.li 扩展名保存文件。

如需加载布局检查器快照,您需要从主菜单栏中依次选择 File > Open,然后打开 *.li 文件。

Sunflower 示例应用的布局检查器快照

支持检查 Compose 语义

在 Compose 中,Semantics无障碍服务和测试框架可以理解的替代方式描述您的界面。在 Android Studio Bumblebee 中,您现在可以使用布局检查器检查 Compose 布局中的语义信息。

通过布局检查器显示的语义信息

选择 Compose 节点时,请使用 Attributes 窗口检查它是否直接声明语义信息以及/或者是否合并其子元素中的语义。如需快速识别哪些节点包含已声明或合并的语义,请在 Component Tree 窗口中选择 View options 下拉菜单,然后选择 Highlight Semantics Layers。这样只会突出显示树中包括语义的节点,您可以使用键盘在节点之间快速导航。

避免重启 Activity

将布局检查器连接到旧版 Android Studio 上正在运行的应用会导致应用的 Activity 重启。设置设备标记以检查应用布局时,必须这样。

在 Android Studio Bumblebee 中,您可以通过以下任一步骤提前设置此标记,从而避免在连接布局检查器时重启 Activity:

  • 启用 Run Configuration 选项

    1. 从主菜单栏中依次选择 Run > Edit Configurations。此时将显示运行/调试配置对话框。
    2. 转到要使用的运行配置。
    3. Layout Inspector options 部分,选中 Connect to Layout Inspector without restarting activity 旁边的复选框。
    4. 下次要使用布局检查器检查应用时,请使用运行配置。
  • 从命令行设置此标记:

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

文档布局检查器快照

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

App Inspection 中的新功能

Android Studio Bumblebee 在 App Inspection 窗口中新增了一些工具和功能。您可以从主菜单栏中依次选择 View > Tool Windows > App Inspection,打开 App Inspector

Network Inspector

Profilers 工具窗口中的网络性能分析器现已移至 App Inspection 工具窗口。如果您之前使用过网络性能分析器,则所有相同的功能和丰富的网络流量数据仍然可用。只需将您的应用部署到搭载 API 级别 26 及更高级别的设备上,然后依次打开 App Inspector > Network Inspector 标签页即可。

检查作业、警报和唤醒锁

现在,除了支持检查工作器外,您还可以使用后台任务检查器检查应用的作业、警报和唤醒锁。现在,每种类型的异步任务都会显示在检查器标签页的相应标题下,便于您轻松监控其状态和进度。与工作器类似,您可以在 Task Details 面板中选择相应作业、警报或唤醒锁,以检查其详细信息。

显示作业、警报和唤醒锁的后台任务检查器

由于工作器在后台使用作业和唤醒锁,因此工作器调度的这些任务会显示为每个工作器的子级。请注意,您只能在图表模式下看到工作器。

性能分析器中的新功能

Android Studio Bumblebee 中新增了一些功能,可让您更深入地了解应用的资源使用情况。如需分析应用的性能,请从主菜单栏中依次选择 View > Tool Windows > Profiler

卡顿检测跟踪

使用搭载 Android 11(API 级别 30)或更高版本的设备分析应用性能时,CPU 性能分析器会显示一组新的轨迹,描述了 Frame Lifecycle 下每个帧的阶段:ApplicationWait for GPUCompositionFrames on display。每个轨迹都通过帧编号标记帧,并用颜色标示矩形,便于您直观了解特定帧处在其生命周期的哪个阶段,并提供了可切换的辅助线,便于您与 Vsync 事件进行对比。您可以通过此数据了解应用中可能出现卡顿的位置,并调查根本原因。在 Analysis 面板中,现在有一个 Frames 标签页,可以方便地汇总所有帧的渲染信息。如需了解详情,请参阅界面卡顿检测

可分析应用的性能分析支持

在对应用进行性能分析时,请务必使用与您的用户将安装的应用版本最相符的应用版本生成准确的数据。为此,您现在可以在应用清单中包含 <profileable> 属性,以对不可调试的应用进行性能分析,如以下代码所示。

<profileable android:shell="true"/>

“可分析”是 Android 10 中引入的清单配置,可用于 CPU 和内存性能分析任务。使用可分析标记代替可调试标记具有降低性能衡量开销的关键优势;不过,某些性能分析功能(例如 Event 时间轴、API 发起的 CPU 性能分析、堆转储或实时位置记录)不适用于可分析 build。如需了解详情,请参阅可分析应用

收起调用堆栈帧

现在,在性能分析器工具窗口中检查调用堆栈示例记录时,您可以收起与调查无关的帧。调用堆栈有助于您了解已执行代码的哪个部分,以及调用该部分的原因。不过,Java/Kotlin 程序的调用堆栈通常不仅包含 Java/Kotlin 代码,还包含来自原生代码的帧,可能会对用户造成干扰。如需详细了解如何优化调用堆栈视图,请参阅检查调用堆栈帧

无线调试

Android Studio Bumblebee 支持在搭载 Android 11 及更高版本的设备上使用无线调试功能。无需使用 USB 线或使用命令行管理 Android 调试桥 (adb) 连接,即可通过 Wi-Fi 从 Android Studio 配对和部署应用。如需使用此功能,请找到设备选择菜单中的 Pair devices using Wi-Fi 选项,并选择一个二维码或配对 PIN 码。然后,在 Android 11 及更高版本的设备上,在开发者选项下,找到无线调试屏幕,接着通过 Android Studio 初始化并与 adb 会话进行无线连接。如需详细了解无线调试设置,请参阅通过 Wi-Fi 连接到设备 (Android 11+)

通过 Wi-Fi 与设备配对

默认启用 Compose 互动式预览

从 Android Studio Bumblebee 开始,互动式预览功能默认处于启用状态。借助互动式预览,您可以与预览互动,就像在设备上操作一样。互动式预览处于沙盒环境中,并与其他预览相互隔离,您可以在其中点击元素并在预览中输入用户输入。通过这种模式,您可以快速测试可组合项的不同状态和手势,例如勾选或清空复选框。

预览互动模式直接在 Android Studio 中运行,并未运行模拟器,因此存在一些限制:

  • 无法访问网络。
  • 无法访问文件。
  • 有些 Context API 不一定完全可用。

用户是在 Android Studio 中与预览互动

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

动画形式的矢量可绘制对象工具使您能够预览动画形式的可绘制资源。此工具可帮助您在 Android Studio 中预览 <animation-list><animated-vector><animated-selector> 资源,使您能够更轻松地优化自定义动画。

用户在 Android Studio 中预览和播放动画

非传递 R 类默认处于开启状态

非传递 R 类现在默认处于开启状态。可以将非传递 R 类与 Android Gradle 插件一起使用,以便为具有多个模块的应用构建更快的 build。这样做有助于确保每个模块的 R 类仅包含对其自身资源的引用,而不会从其依赖项中提取引用,从而帮助防止资源重复。这样可以获得较新的 build,以及避免编译的相应优势。

如需使用此功能,请依次转到 Refactor > Migrate to Non-transitive R Classes...

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 TV,您现在可以更轻松地在最能代表真实设备大小的屏幕上预览、验证或修改布局。

包含设备及其尺寸和屏幕密度的设备选择器(按类分组)

Android 测试

Android Studio Bumblebee 和 AGP 7.1 引入了一些新功能和改进,可帮助您更可靠、可扩展地运行自动化插桩测试,并获得可用于调试问题的有用结果。

统一 Gradle 测试运行程序

Android Gradle 插件 7.1.0 和 Android Studio Bumblebee 及更高版本使用 Gradle 自己的 Android 插桩测试运行程序实现来运行插桩测试。如果同样使用这个测试运行程序,那么无论您是使用 AGP 从命令行运行测试(例如在持续集成服务器上),还是从 Android Studio 运行测试,结果很可能是一致的。

Bumblebee 中的统一 Gradle 测试运行程序

以前版本的 Android Studio 使用 IntelliJ Android 插桩测试运行程序,而非 Gradle 的 Android 插桩测试运行程序。因此,如果您使用的不是最新版本的 Android Studio,可能会看到不同的测试结果(具体取决于您是从 Android Studio 运行测试,还是使用 Gradle 插件从命令行运行测试),例如在使用一个运行程序时测试结果为通过,而在使用另一个运行程序时则为失败。

以前版本的 Android Studio 中的独立测试运行程序

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

通过边线操作运行测试

运行插桩测试时,您可以通过检查 Test Matrix for Gradle 任务输出中的测试输出,来确认 Android Studio 使用的是不是 Gradle 测试运行程序。尽管我们在针对 Android Studio 的每个版本改进此功能,但仍存在一些已知问题。如果您遇到问题,请报告 bug。您还可以停用新的测试流水线,以还原到旧行为。

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

默认情况下,Android 模拟器会直接在 Android Studio 中运行。这样,您就可以节省屏幕空间,使用热键在模拟器窗口和编辑器窗口之间快速导航,并在单个应用窗口中整理 IDE 和模拟器工作流。

在 Android Studio 的工具窗口中启动的模拟器。

当模拟器运行时,您将能够使用常见模拟器操作(如旋转),以及扩展控制选项(如导航播放)。如需在单独的窗口中运行模拟器,请依次转到 File > Settings > Tools > Emulator(在 macOS 设备中则依次转到 Android Studio > Preferences > Tools > Emulator),并取消选择 Launch in a tool window

停用新的测试流水线

默认情况下,Android Studio Bumblebee 会使用 Gradle 运行其插桩测试。如果您遇到问题,可以按以下方法停用此行为:

  1. 依次选择 File > Settings > Build, Execution, Deployment > Testing(在 MacOS 设备上,则依次选择 Android Studio > Preferences > Build, Execution, Deployment > Testing)。
  2. 取消选中 Run Android instrumented testing using Gradle 旁边的方框,然后点击 OK

您还可以通过执行以下操作之一来还原到之前的行为:

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

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

补丁版本

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

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

本次要更新包含以下 bug 修复:

  • Android Gradle 插件
    • R8 报告的重复类问题
  • Build Variants
    • 如果通过新的 onVariants API 设置变体的版本名称,versionNameSuffix 无法正常运行
  • Compose 预览
    • 修复了与性能和稳定性相关的 bug。
    • 解决了使用“实时修改字面量”功能时偶尔发生的冻结问题。
  • 导入/同步
    • “需要同步 Gradle”消息有多余的 AGP 版本
    • 重新编译 Foo.java/kt 会清理过多内容,并且不会重新编译正确的组件
  • 项目结构
    • 改变目标版本时,AGP 升级助理稳定性得到提升
    • AGP 升级助理现在会告知用户 Gradle 插件正在升级
  • Network Inspector
    • Bumblebee 更新后,新的 Network Inspector 发生崩溃
    • 在最新版本的 Android Studio 上连接调试程序时,我总是遇到这个错误。
    • TrackedHttpURLConnection.getHeaderField 会崩溃并出现 NullPointerException

如需了解详情,请参阅 Android Studio Bumblebee 补丁 3 博文

Android Studio Bumblebee | 2021.1.1 补丁 2(2022 年 2 月)

本更新包含以下 bug 修复:

  • C++ build
    • ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, "") 不能为 null
  • 代码编辑器
    • Android Studio Live Templates 中的 bug:className() 表达式无法解析类名称
  • D8/R8
    • java.lang.NoSuchMethodError:无静态方法 $jacocoInit
    • Android 测试覆盖率因 Mockito 错误而损坏
    • 需要针对 API 31 上的已损坏 CAS 实现提供解决方法
    • 不支持密封类
    • 在 Chrome 中启用水平类合并时出现 NullPointerException
    • 合并虚拟方法后出现 AbstractMethodError
    • init 类 out-type 不正确,无法验证堆栈帧
    • Dex 输入使用未定义的寄存器
    • StringBuilderOptimizerAnalysisTest 在版本分支上失败
    • R8 中的非确定性问题
  • 部署
    • 运行设备所有者应用项目失败,并显示 Couldn't terminate the existing process for 这一错误消息
  • 设计工具
    • 启用非传递 R 类时,Compose 预览无法从其他模块查找资源
    • Android Studio 在构建时卡顿。
  • 嵌入式模拟器
    • 其他性能和稳定性改进。
  • 导入/同步
    • 启动 Bumblebee 时出现 IDE 错误:输出列表 build 文件不适用于 IdeBuildTasksAndOutputInformationImp 的输出类型 Apk
  • IntelliJ
    • 从 Mac OS X Monterey Dock 启动时,未确定环境变量的来源
  • Jetpack (androidx) > 导航
    • 升级了 SafeArgs,使其在最新的稳定 AGP 上构建
  • Tools Windows
    • 无法运行 Android 设备管理器
    • BumbleBee 中的 Network Inspector 无法以可读格式显示 API 响应

如需了解详情,请参阅 Android Studio Bumblebee 补丁 2 博文

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

本次要更新包含以下 bug 修复:

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

如需了解详情,请参阅 Android Studio Bumblebee 补丁 1 博文