Android Studio Dolphin | 2021.3.1 (2022 年 9 月)

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

Compose 中的新功能

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

Compose 动画协调

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

Gif showing inspection with All Animations UI

Compose 多预览注解

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

Multipreview annotations UI

布局检查器中 Compose 重组计数

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

布局检查器现在可让您查看布局层次结构中的离散可组合项何时已重组或跳过。当您与应用交互时,此信息是实时显示的。要开始使用,请确保您的应用使用 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 的特定界面,例如表盘、Tile 和复杂功能。您可以在运行应用时,通过运行/调试配置对话框创建这些新配置。

有关详细信息,请参阅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

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

  • 本地应用项目的 PID: package: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 Managed Devices

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

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

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

此外,Gradle Managed Devices 引入了一种新型的模拟器设备,称为自动化测试设备 (ATD),该设备经过优化,可提高运行插桩测试时的性能。结合支持测试分片,您可以尝试将测试套件分配到多个 ATD 实例中,以缩短总体测试执行时间。要了解有关 Gradle Managed Devices 及其相关功能的更多信息,请参阅使用 Gradle Managed Devices 扩展测试规模

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

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

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

无状态 lambda 不再被 desugar 为单例

无状态 lambda 在 desugar 时不再被分配为单例。将其表示为单例会由于添加的字段和类初始化器而增加代码大小开销,并且由于静态类初始化而增加启动开销。无状态 lambda 现在在使用点分配,其方式与有状态 lambda(具有捕获的 lambda)相同。

R8 避免在 Android 运行时上出现验证减慢

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

通过 Java 8+ API desugaring 支持 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 plugin 1.7.20。此次 minor 更新还包括以下 bug 修复:

已修复问题
Android Gradle Plugin
通过 gradle 运行插桩 android 测试无法正确应用 desugaring
AGP 7.3.0 打破了 gradle 平台项目的 gradle 同步
Dexer (D8)
添加用于合并 DEX 时冲突解决的公共 API(用于 bazel 允许重复类)
导入/同步
从 Chipmunk Patch 2 (2021.2.1) 升级后 Gradle 项目导入失败
资源
AarResourceRepositoryCache.createCachingData 中的 NPE (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 代码是否需要 desugaring
ktor VerifyError
处理 okio-jvm 3.2.0 时抛出编译期间遇到的未定义值
具有间接 instance-of 用户的类内联对象导致编译失败
使用 R8 3.3.75 时出现 java.lang.IllegalAccessError