Android Studio 海豚 | 2021.3.1 (2022年9月)

以下是 Android Studio 海豚中的新功能。

Compose 中的新增功能

以下是 Android Studio 中 Jetpack Compose 的新功能和改进。

Compose 动画协调

如果您的动画在可组合预览中进行了描述,您现在可以使用 动画预览 一次性检查和协调所有动画。您还可以冻结特定动画。

Gif showing inspection with All Animations UI

Compose 多预览注释

您现在可以定义一个包含多个 Preview 定义的注释类,并使用该新注释一次性生成这些预览。使用此新注释可以同时预览多个设备、字体和主题,而无需为每个可组合重复这些定义。

Multipreview annotations UI

布局检查器中的 Compose 重组计数

在调试 Compose 布局时,了解可组合何时重组或不重组对于理解 UI 是否正确实现非常重要。例如,如果它重组的次数过多,您的应用可能会执行不必要的工作。另一方面,当您期望组件重组但未重组时,可能会导致意外行为。

布局检查器现在允许您查看布局层次结构中离散的可组合何时重组或跳过。此信息在您与应用交互时实时显示。要开始使用,请确保您的应用使用 Compose 1.2.0-alpha03 或更高版本。然后像往常一样部署您的应用。

New composition and skip counter in Layout Inspector

打开 布局检查器 窗口并连接到您的应用进程。在“组件树”中,您应该会看到布局层次结构旁边出现了两列新列。第一列显示每个节点的组合次数。第二列显示每个节点的跳过次数。当您从“组件树”或“布局显示”中选择可组合时,您还可以在“属性”窗格中看到类似的信息。

如果您想重置计数,请点击组件树面板顶部的重置。重置计数可以帮助您了解在与应用进行特定交互期间发生的重新组合或跳过操作。

Enable the composition and skip counter in Layout Inspector

更新的 Wear OS 模拟器配对助手

从 Android Studio Dolphin Canary 3 开始,Wear OS 模拟器配对助手拥有改进的功能,使管理和连接 Wear 模拟器变得更加容易。您现在可以执行以下操作:

  • 设备管理器中查看 Wear 设备。
  • 将多个 Wear 设备与单个虚拟或物理手机配对。
  • 在启动先前配对的设备时自动重新连接。Android Studio 现在会记住并重新配对上次设置的配对。

要使用这些新功能,请确保您的手机模拟器的 API 级别为 30 或更高,并已安装 Google Play 商店。此外,请确保您的 Wear 模拟器的 API 级别为 28 或更高。要升级到模拟设备的最新系统映像,请转到工具 > SDK 管理器

有关更多信息,请参阅使用 Wear OS 模拟器配对助手

更新的 Wear OS 模拟器工具栏

从 Android Studio Dolphin Canary 2 开始,对于 API 级别为 28 或更高的 Wear 模拟器,模拟器工具栏现在具有模拟设备上物理按钮和常用操作的按钮。新按钮包括:按钮 1 和按钮 2(按钮 2 仅在 API 级别 30 或更高版本上可用)、手掌按钮和倾斜按钮。以下是一些您可以使用 Wear 模拟器上的新按钮执行的操作:

  • 要将设备设置为环境模式,请点击手掌按钮。
  • 要将设备返回到环境模式之前的最后一个屏幕,请点击倾斜按钮。

有关更多信息,请参阅在模拟器中执行常用操作

Wear emulator with Wear-specific buttons

新的 Wear OS 运行配置

已添加新的运行配置,以便快速运行和调试特定于Wear OS的界面,例如表盘、磁贴和复杂功能。在运行应用程序时,您可以从运行/调试配置对话框中创建这些新配置。

有关更多信息,请参阅Wear OS 运行/调试配置

WearOS new launch configurations

新的 Logcat

Logcat 已更新,使其更容易解析、查询和跟踪日志。

新的格式化程序

Logcat 现在可以格式化日志,以便更容易扫描有用的信息(例如标签和消息),并识别不同类型的日志(例如警告和错误)。

New formatting for logs in Logcat

创建多个 Logcat 窗口

您现在可以在 Logcat 中创建多个选项卡,以便轻松地在不同的设备或查询之间切换。右键单击选项卡可以重命名它,并且您可以单击并拖动以重新排列选项卡。

此外,为了帮助您更轻松地在两组日志之间进行比较,您现在可以通过右键单击日志视图并选择向右拆分向下拆分来拆分选项卡内的视图。要关闭拆分,请右键单击并选择关闭。每个拆分都允许您设置自己的设备连接、视图选项和查询。

Create multiple logcat windows using splits

在视图预设之间切换

Logcat 现在允许您通过点击视图模式选择器快速在不同的视图模式(标准紧凑自定义)之间切换。每个视图模式都提供不同的默认设置,以便显示更多或更少的信息,例如时间戳、标签和进程 ID (PID)。您还可以通过选择修改视图来自定义每个默认视图模式以及自定义视图模式。

Screenshot of switching between different view modes

在以前的 Logcat 版本中,您可以选择使用字符串搜索(支持正则表达式)或通过使用 Logcat UI 填充各种字段来创建新的过滤器。第一个选项使搜索更加复杂,第二个选项使共享和设置查询更加困难。我们现在通过在主查询字段中引入键值搜索来简化体验。

Screenshot of new query syntax with auto-complete

这个新的查询系统提供了您想要查询内容的准确性,而无需依赖正则表达式,并且能够从历史记录中调用过去的查询,并与他人共享这些查询。此外,您仍然可以选择使用正则表达式,还可以根据键值排除日志。以下是一些使用新查询系统的方法示例,但您也可以在查询字段中开始输入以查看建议:

  • 本地应用项目的 PIDpackage:mine
  • 特定值:
    • package:<package-ID>
    • tag:<tag>
    • level:[VERBOSE | INFO | ASSERT |DEBUG | WARN | ERROR ]
  • 排除特定值,在键前面加上-
    • -tag:<exclude-tag>
  • 使用正则表达式,在键后面加上~
    • tag~:<regular-expression-tag>
    • 与排除标签结合使用:-tag~:<exclude-regular-expression-tag>

您还可以通过点击查询字段中的查询历史记录选择器并在下拉菜单中选择它们来查看查询历史记录。要收藏查询以便它在所有 Studio 项目中都保留在列表顶部,请点击查询字段末尾的收藏查询

Screenshot query history with favourites

跨应用崩溃/重启跟踪日志

新的 Logcat 现在可以更容易地跨应用崩溃和重启跟踪来自应用的日志,这样您就不会错过这些事件中的重要日志。当 Logcat 注意到您的应用进程已停止并重新启动时,您将在输出中看到一条消息——例如PROCESS ENDEDPROCESS STARTED——如下所示:

Screenshot of process restarts in logcat

并且,重新启动 Logcat 会保留您的会话配置(例如选项卡拆分、过滤器和视图选项),以便您可以轻松地继续您的会话。

Gradle 管理的设备

为了提高在使用 Android 虚拟设备进行自动化仪器测试时的稳定性、性能和可靠性,我们引入了 Gradle 管理的设备。此功能适用于 API 级别 27 及更高版本,允许您在项目的 Gradle 文件中配置虚拟测试设备。构建系统使用这些配置来完全管理——即创建、部署和拆除——在执行自动化测试时使用的这些设备。

此功能使 Gradle 不仅能够查看您正在运行的测试,还可以查看设备的生命周期,从而通过以下方式提高测试体验的质量:

  • 处理与设备相关的问题,以确保执行您的测试。
  • 利用模拟器快照来提高设备启动时间和内存使用率,并在测试之间将设备恢复到干净状态。
  • 缓存测试结果,仅重新运行可能提供不同结果的测试。
  • 为在本地和远程测试运行之间运行测试提供一致的环境。

此外,Gradle 管理的设备引入了名为自动化测试设备 (ATD) 的新型模拟器设备,该设备经过优化,可在运行仪器测试时提高性能。结合对测试分片的支持,您可以尝试将测试套件拆分到多个 ATD 实例中,以减少整体测试执行时间。要了解有关 Gradle 管理的设备及其相关功能的更多信息,请参阅使用 Gradle 管理的设备扩展您的测试

使用基于 DEX 指令偏移量的映射文件支持 R8

在优化行信息时,R8 现在可以将信息编码到共享调试信息对象中,其中包含基于指令偏移量的行表。这大大减少了行信息的开销。其效果是方法中的行不再连续,而是可能会根据指令的大小以间隔跳跃。请注意,某些工具不会考虑此共享编码。

此外,从 O(API 级别 26)开始的 Android VM 支持在堆栈跟踪中打印指令偏移量(如果方法没有行号信息)。在使用 minSdk 26 或更高版本编译并且没有源文件信息时,R8 会完全剥离行号信息。

无状态 Lambda 不再作为单例进行反糖化

在反糖化时,无状态 Lambda 不再分配为单例。由于添加的字段和类初始化程序,以及由于静态类初始化导致的启动开销,单例表示形式会增加代码大小开销。无状态 Lambda 现在在使用站点分配,就像有状态 Lambda(带有捕获的 Lambda)一样。

R8 避免在 Android 运行时出现验证速度下降

为了消除 Android 运行时(Dalvik 和 ART)上的性能问题,R8(而不是 D8)现在引入了库存根和对库方法的轮廓调用,用于在运行时可能不存在的库类和方法。这样做消除了许多验证问题,并提高了运行时性能。此功能始终启用。

使用 Java 8+ API 反糖化支持 JDK-11 API

当使用 coreLibraryDesugaring 依赖项时,现在支持基于 JDK-11 的实现库。有关更多信息,请参阅desugar_jdk_libs 更改日志

补丁版本

以下是 Android Studio Dolphin 中补丁版本的列表。

Android Studio Dolphin | 2021.3.1 Patch 1(2022 年 10 月)

在 Patch 1 版本中,Android Studio Dolphin 现在支持 Kotlin 插件 1.7.20。此次小更新还包括以下错误修复:

已修复的问题

Android Gradle 插件
通过 Gradle 运行带插桩的 Android 测试无法正确应用去糖化
AGP 7.3.0 导致 Gradle 平台项目的 Gradle 同步失败
Dexer (D8)
添加一个公共 API 用于合并 DEX 时解决冲突(以便 Bazel 允许重复类)
导入/同步
从 Chipmunk Patch 2 (2021.2.1) 升级后,Gradle 项目导入失败
资源
AarResourceRepositoryCache.createCachingData 中出现空指针异常 (AS Dolphin+)
缩减器 (R8)
类型替换字段时未复制 Kotlin 元数据
意外转换不精确类型:TOP(所有内容)
Gradle 7.3.0 导致 APK 构建错误 com.android.tools.r8.CompilationFailedException
在兼容模式下去除无用的默认构造函数。
与 JetBrains Markdown 冲突
支持 ThreadLocal.withInitial(java.util.function.Supplier
AGP 7.3 为具有损坏构造函数的类生成 dex
意外尝试确定非 CF 代码是否需要去糖化
Ktor VerifyError
处理 okio-jvm 3.2.0 时抛出编译期间遇到未定义值
内联具有间接 instanceof 用户的对象的类的编译失败
使用 R8 3.3.75 时出现 java.lang.IllegalAccessError