Android Studio Dolphin | 2021.3.1(2022 年 9 月)

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

Compose 中的新功能

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

Compose 动画协调

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

GIF:检查“所有动画”的界面

Compose Multipreview 注解

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

Multipreview 注解界面

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

在调试 Compose 布局时,了解可组合项在哪些情况下重组或不重组对于理解界面是否正确实现非常重要。 例如,如果重组次数过多,您的应用可能会执行不必要的操作。另一方面,未按预期重组的组件可能会导致意外行为。

借助布局检查器,您可以查看布局层次结构中的各个可组合项是执行了重组还是跳过了重组。此类信息会在您与应用互动时实时显示。首先,请确保您的应用使用的是 Compose 1.2.0-alpha03 或更高版本。然后按照常规方法部署应用。

布局检查器中新增了组合和跳过计数器

打开 Layout Inspector 窗口,然后连接到您的应用进程。在 Component Tree 中,您应该会在布局层次结构旁边看到两个新列。第一列显示每个节点的组合次数。第二列显示每个节点的跳过次数。从 Component TreeLayout Display 中选择可组合项时,您还可以在 Attributes 窗格中看到类似信息。

如果要重置计数,请点击 Component Tree 面板顶部附近的 Reset。重置计数有助于您了解与应用进行特定交互期间的重组或跳过情况。

在布局检查器中启用组合和跳过计数器

更新了 Wear OS 模拟器配对助理

从 Android Studio Dolphin Canary 3 开始,Wear OS 模拟器配对助理改进了相关功能,可让您更轻松地管理和连接 Wear 模拟器。您现在可以执行以下操作:

  • 设备管理器中查看 Wear 设备。
  • 将多个 Wear 设备与一部虚拟或实体手机配对。
  • 当之前已配对的设备启动时,自动重新连接之前已配对的设备。 Android Studio 现在会记住并重新配对上次设置的配对。

如需使用这些新功能,请确保您的手机模拟器是 API 级别 30 或更高级别,并且已安装 Google Play 商店。此外,请确保您的 Wear 模拟器是 API 级别 28 或更高级别。如需将模拟设备升级至最新的系统映像,请依次点击 Tools > SDK Manager

如需了解详情,请参阅使用 Wear OS 模拟器配对助理

更新了 Wear OS 模拟器工具栏

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

  • 如需将您的设备设置为氛围模式,请点击“手掌”按钮。
  • 如需将设备恢复到氛围模式之前的上一个屏幕,请点击“倾斜”按钮。

如需了解详情,请参阅在模拟器中执行常见操作

具有 Wear 专用按钮的 Wear 模拟器

新增了 Wear OS 运行配置

添加了新的运行配置,以快速运行和调试特定于 Wear OS 的 surface(例如表盘、卡片和复杂功能)。您可以在运行应用时通过 Run/Debug Configurations 对话框创建这些新配置。

如需了解详情,请参阅 Wear OS 运行/调试配置

WearOS 新启动配置

更新了 Logcat

更新了 Logcat,让您可以更轻松地解析、查询和跟踪日志。

新增了格式化功能

Logcat 现在会对日志进行格式化,以便更轻松地扫描有用的信息(例如标记和消息)以及识别不同类型的日志(例如警告和错误)。

Logcat 中新增的日志格式化功能

创建多个 Logcat 窗口

您现在可以在 Logcat 中创建多个标签页,以便在不同设备或查询之间轻松切换。右键点击标签页可对其重命名,点击并拖动可重新排列标签页。

此外,为了帮助您更轻松地比较两组日志,您现在可以在一个标签页中拆分视图,方法是右键点击日志视图,然后选择 Right RightSplit Down。如需关闭分屏,请右键点击并选择 Close。每个分屏都允许您设置自己的设备连接、视图选项和查询。

使用拆分创建多个 logcat 窗口

在视图预设之间切换

Logcat 现在可允许您在不同视图模式之间快速切换,包括 StandardCompactCustom。方法是点击 视图模式选择器。 每种视图模式都会提供不同的默认设置,用于向您显示更多或更少的信息,例如时间戳、标记和进程 ID (PID)。您还可以通过选择 Modify View 来自定义每个默认视图模式以及自定义视图模式。

在不同视图模式之间切换的屏幕截图

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

启用了自动完成功能的新查询语法的屏幕截图

借助这个新的查询系统,您无需查询正则表达式即可准确查询内容,还可以从历史记录中撤消以往的查询,并与他人共享这些查询。此外,您仍然可以使用正则表达式,并基于键值对来排除日志。以下示例说明了如何使用新的查询系统,但您也可以直接在查询字段中键入内容以查看相关建议:

  • 本地应用项目的 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 项目中始终位于列表顶部,请点击查询字段末尾的 收藏的查询

包含收藏项的查询历史记录屏幕截图

跟踪应用崩溃/重启日志

借助新的 Logcat,您现在可以更轻松跟踪应用崩溃和重启日志,以免错过这些事件的重要日志。 当 Logcat 发现您的应用进程已停止并重启时,您会在输出中看到一条消息(例如 PROCESS ENDEDPROCESS STARTED),如下所示:

logcat 中的进程重启屏幕截图

重启 Logcat 会保留会话配置(例如标签页拆分、过滤器和视图选项),以便于您轻松继续会话。

Gradle 管理的设备

为了提高使用 Android 虚拟设备执行自动化插桩测试时的一致性、性能和可靠性,我们引入了 Gradle 管理的设备。此功能适用于 API 级别 27 及更高级别,可允许您在项目的 Gradle 文件中配置虚拟测试设备。在执行自动化测试时,构建系统会使用这些配置来完全代管(即创建、部署和拆解)这些设备。

借助这项功能,Gradle 不仅可以了解正在运行的测试,还能了解设备的生命周期,从而通过以下方式提高测试体验的质量:

  • 处理设备相关问题,以确保顺利执行测试
  • 利用模拟器快照缩短设备启动时间,减少内存用量,并在两次测试之间让设备恢复到干净状态
  • 缓存测试结果并仅重新运行可能提供不同结果的测试
  • 为本地测试和远程测试提供一致的测试运行环境

此外,Gradle 管理的设备还引入了一种称为自动测试设备 (ATD) 的新型模拟器设备,该设备经过优化,可在运行插桩测试时提高性能。结合测试分片支持功能,您可以试验在多个 ATD 实例间拆分测试套件,以缩短总测试执行时间。 如需详细了解 Gradle 管理的设备及其相关功能,请参阅使用 Gradle 管理的设备扩展测试

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

优化行信息时,R8 现在可以使用基于指令偏移量的行表来对共享调试信息对象中的信息进行编码。这可以显著减少行信息的开销。其结果是方法中的行不再连续,但可能会跳过间隔,具体取决于指令的大小。请注意,某些工具未考虑这种共享编码。

此外,从 O(API 级别 26)开始的 Android 虚拟机支持在堆栈轨迹中输出指令偏移量(如果方法没有行号信息)。如果使用 minSdk 26 或更高版本进行编译,并且没有源文件信息,R8 会完全删除行号信息。

无状态 lambda 不再作为单例进行脱糖

脱糖时,无状态 lambda 不会再被分配为单例。单例表示方法会增加因添加字段和类初始化程序而产生的代码大小开销,以及因静态类初始化而导致的启动开销。现在,无状态 lambdas 在使用地点的分配方式与有状态 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 补丁 1(2022 年 10 月)

在补丁 1 版本中,Android Studio Dolphin 现在支持 Kotlin 插件 1.7.20。本次要更新还包含以下 bug 修复:

已修复的问题
Android Gradle 插件
通过 Gradle 运行插桩 Android 测试时,无法正确应用脱糖
AGP 7.3.0 会破坏 Gradle 平台项目的 Gradle 同步
Dexer (D8)
添加了一个公共 API,用于在合并 DEX 时解决冲突(针对 Bazel,以允许包含重复的类)
导入/同步
从 Chipmunk 补丁 2 (2021.2.1) 升级后,Gradle 项目导入失败
资源
AarResourceRepositoryCache.createCachingData (AS Dolphin+) 中的 NPE
缩减器 (R8)
在类型替换字段时,系统不复制 Kotlin 元数据
不精确类型发生意外转换:TOP(全部)
Gradle 7.3.0 导致 APK build 错误 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 时抛出编译期间遇到的未定义值
包含间接 instance-of 使用方的类内嵌对象导致编译失败
R8 3.3.75 存在 java.lang.IllegalAccessError