Android Studio Arctic Fox | 2020.3.1(2021 年 7 月)

Android Studio Arctic Fox 是一个主要版本,包含各种新功能和改进。

新版本编号方案

Android Studio 新版本编号方案

我们更改了 Android Studio 的版本编号系统,以便与 Android Studio 所基于的 IDE IntelliJ IDEA 更紧密地保持一致。

在之前的编号系统中,此版本将被编号为 Android Studio 4.3 或版本 4.3.0.1。采用新编号系统后,它现在是 Android Studio - Arctic Fox | 2020.3.1,或版本 2020.3.1

IntelliJ 版本 旧名称 旧 - 数字系统 新 - 年份系统 新版本名称
2020.3 4.3 4.3.0 2020.3.1 Arctic Fox | 2020.3.1

今后,Android Studio 的版本号将按如下方式确定

<IntelliJ 版本年份>.<IntelliJ 主要版本>.<Studio 主要版本>.<Studio 次要/补丁版本>

  • 前两组数字代表特定 Android Studio 版本所基于的 IntelliJ 平台的版本。对于此版本,它是版本 2020.3
  • 第三组数字代表 Studio 主要版本,从 1 开始,每个主要版本递增 1。
  • 第四组数字代表 Studio 次要/补丁版本,从 1 开始,每个次要版本递增 1。
  • 我们还为每个主要版本赋予一个版本名称,基于动物名称从 A 到 Z 递增。此版本名为 Arctic Fox

Android Gradle 插件的新版本编号方案

我们更改了 Android Gradle 插件 (AGP) 的版本编号,以便与底层 Gradle 构建工具更紧密地匹配。因此,AGP 7.0AGP 4.2 之后的下一个版本。

如需了解详情,请参阅 AGP 版本说明中的版本变更

Android Gradle 插件 7.0.0

最新版 Android Gradle 插件包含许多更新。如需了解详情,请阅读完整的 Android Gradle 插件版本说明

单元测试现使用 Gradle 测试运行器

为了提高测试执行的总体一致性,Android Studio 现在默认使用 Gradle 运行所有单元测试。在许多情况下,此变更不会影响您在 IDE 中的测试工作流程。

例如,当您点击上下文菜单(右键点击测试类时可见)中的 Run 命令或其对应的边栏操作 时,Android Studio 将默认使用 Gradle 运行配置来运行单元测试。

Context menu for running tests

但是,Android Studio 不再识别现有的 Android JUnit 运行配置,因此您应该将可能保存为项目文件的 Android JUnit 运行配置迁移到 Gradle 运行配置。

要创建 Gradle 测试配置,请按照创建新的运行/调试配置中的说明选择 Gradle 模板。创建新配置后,它将显示在 Edit Configurations 对话框的 Gradle 部分中。

Edit test configurations in Android Studio

如果您想检查不再识别的 Android JUnit 配置,可以执行以下两项操作之一

  • 在文本编辑器中打开手动保存的配置。这些文件的位置由用户指定,但文件通常位于 <my-app>/.idea/runConfigurations/ 中。
  • <my-app>/.idea/workspace.xml 中查找临时配置,并在 <component name="RunManager" ...> 节点下查找。例如

    <component name="RunManager" selected="Gradle.PlantTest">
    
    <configuration name="PlantTest" type="AndroidJUnit" factoryName="Android JUnit" nameIsGenerated="true">
          <module name="Sunflower.app" />
          <useClassPathOnly />
          <extension name="coverage">
            <pattern>
              <option name="PATTERN" value="com.google.samples.apps.sunflower.data.*" />
              <option name="ENABLED" value="true" />
            </pattern>
          </extension>
          <option name="PACKAGE_NAME" value="com.google.samples.apps.sunflower.data" />
          <option name="MAIN_CLASS_NAME" value="com.google.samples.apps.sunflower.data.PlantTest" />
          <option name="METHOD_NAME" value="" />
          <option name="TEST_OBJECT" value="class" />
          <option name="PARAMETERS" value="" />
          <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
          <method v="2">
            <option name="Android.Gradle.BeforeRunTask" enabled="true" />
          </method>
        </configuration>
    

AGP 升级助手改进

Android Gradle 插件升级助手现在有一个持久的工具窗口,其中包含将完成的步骤列表。工具窗口右侧还会显示其他信息。如果需要,您还可以选择要升级到的其他 AGP 版本。点击 Refresh 按钮会更新相应的更新步骤。

New persistent tool window in the upgrade assistant

非传递性 R 类的重构

您可以使用 Android Gradle 插件的非传递性 R 类来为具有多个模块的应用构建更快的版本。这样做有助于防止资源重复,确保每个模块的 R 类只包含对其自身资源的引用,而不会从其依赖项中拉取引用。这会导致更最新的构建以及相应的编译避免的好处。

您可以通过转到 Refactor > Migrate to Non-transitive R Classes 来访问此功能。

新的后台任务检查器

您可以使用新的 Background Task Inspector 可视化、监控和调试应用的后台工作器。要开始使用,请将您的应用部署到运行 WorkManager 库 2.5.0 或更高版本的设备上,然后从菜单栏中选择 View > Tool Windows > App Inspection

Active workers in Background Task Inspector

您可以通过点击工作器查看更详细的信息。例如,您可以查看工作器的描述、执行方式、工作器链的详细信息以及执行结果。

Worker Details tab

您还可以通过从表格中选择一个工作器并点击工具栏中的 Show Graph View 来查看工作器链的可视化表示。然后,您可以选择链中的任何工作器来查看其详细信息,或者如果它当前正在排队或运行,则停止它。要返回表格,请点击 Show List View

Background Task Inspector worker chain

为了帮助您调查执行失败的工作器的问题,您可以通过从表格中选择正在运行或已排队的工作器,然后点击工具栏中的 Cancel Selected Worker 来停止它。您还可以使用 All tags 下拉菜单根据分配给工作器的标签过滤表格中的工作器。

Database Inspector 更新

Database Inspector 现已包含在新的 App Inspection 工具窗口中,您还可以在其中找到新的 Background Task Inspector。从工具窗口栏打开 App Inspection 工具窗口,或从菜单栏中选择 View > Tool Windows > App Inspection

从 Database Inspector 导出数据

在 Arctic Fox 中,您可以轻松地从 Database Inspector 导出数据库、表格和查询结果,以便在本地保存、共享或重新创建。当您在 Android Studio 中打开应用项目并在 Database Inspector 中检查该项目的应用时,您可以通过以下方式之一开始导出数据

  • Databases 面板中选择一个数据库或表格,然后点击面板顶部附近的 Export to file
  • 右键点击 Databases 面板中的数据库或表格,然后从上下文菜单中选择 Export to file
  • 在选项卡中检查表格或查询结果时,点击表格或查询结果上方的 Export to file

选择导出操作后,您将使用 Export 对话框来帮助您完成最后步骤,如下所示。根据您是尝试导出数据库、表格还是查询结果,您可以选择将数据导出为以下一种或多种格式:DB、SQL 或 CSV。

Export Database dialog box

Memory Profiler 中的记录 UI 更新

我们整合了 Memory Profiler 的用户界面 (UI),用于执行不同的记录活动,例如捕获堆转储以及记录 Java、Kotlin 和原生内存分配。

Memory allocations displayed in the Memory Profiler

Memory Profiler 提供以下选项

  • Capture heap dump(捕获堆转储):查看您的应用中在特定时间点使用内存的对象。
  • Record native allocations(记录原生分配):查看每个 C/C++ 对象在一段时间内的分配情况。
  • Record Java/Kotlin allocations(记录 Java/Kotlin 分配):查看每个 Java/Kotlin 对象在一段时间内的分配情况。

以下是使用这三个选项的方法

  • 要捕获堆转储,请选择 Capture heap dump,然后选择 Record。分析器完成捕获堆转储后,Memory Profiler UI 将切换到单独的屏幕,显示堆转储。

    Sample heap dump in Memory Profiler

  • 要在运行 Android 10 及更高版本的设备上记录原生分配,请选择 Record native allocations,然后选择 Record。记录会持续进行,直到您点击 Stop ,然后 Memory Profiler UI 将切换到单独的屏幕,显示原生记录。

    在 Android 9 及更低版本上,Record native allocations 选项不可用。

  • 要记录 Java 和 Kotlin 分配,请选择 Record Java / Kotlin allocations,然后选择 Record。如果设备运行的是 Android 8 或更高版本,Memory Profiler UI 会切换到单独的屏幕,显示正在进行的记录。您可以与记录上方的迷你时间轴交互(例如,更改选择范围)。要完成记录,请选择 Stop

    Visualization of Java allocations in Memory Profiler

    在 Android 7.1 及更低版本上,内存分析器使用旧版分配记录,该记录会在时间轴上显示记录,直到您点击 Stop

Refresh Linked C++ Project 的更新

我们已将与配置无关的文件从 .cxx/ 文件夹移动到 build/ 文件夹。CMake C++ 构建需要配置阶段,该阶段会生成用于执行编译和链接步骤的 Ninja 项目。CMake 生成的项目生成成本很高,并且预计能够在 gradle clean 之间保留。因此,它们存储在 build/ 文件夹旁边的名为 .cxx/ 的文件夹中。通常,Android Gradle 插件会注意到配置更改并自动重新生成 Ninja 项目。但是,并非所有情况都可以检测到。发生这种情况时,可以使用“Refresh Linked C++ Project”选项手动重新生成 Ninja 项目。

多设备测试的新测试矩阵

检测测试现在可以在多个设备上并行运行,并且可以使用专门的检测测试结果面板进行调查。使用此面板,您可以确定测试是否因 API 级别或硬件属性而失败。

Instrumentation test panel

在各种 API 级别和外形规格的设备上测试您的应用是确保所有用户在使用您的应用时都能获得出色体验的最佳方法之一。

要利用此功能

  1. 在 IDE 顶部中央的目标设备下拉菜单中选择 Select Multiple Devices

    Modify device set dialog

  2. 选择目标设备,然后点击 OK

    Modify device set dialog

  3. 运行测试。

要在 Run 面板中查看测试结果,请转到 View > Tool Windows > Run

新的测试结果面板允许您按状态、设备和 API 级别过滤测试结果。此外,您可以通过点击表头对每一列进行排序。通过点击单个测试,您可以分别查看每个设备的日志和设备信息。

数据绑定中的 StateFlow 支持

对于使用协程的 Kotlin 应用,您现在可以使用 StateFlow 对象作为数据绑定源,以自动通知 UI 数据中的更改。您的数据绑定将感知生命周期,并且仅在 UI 在屏幕上可见时触发。

要将 StateFlow 对象与您的绑定类一起使用,您需要指定一个生命周期所有者来定义 StateFlow 对象的范围,并在您的布局中,使用绑定表达式将您的 ViewModel 组件的属性和方法分配给相应的视图,如下例所示

class ViewModel() {
   val username: StateFlow<String>
}
<TextView
    android:id="@+id/name"
    android:text="@{viewmodel.username}" />

如果您正在使用 AndroidX 的 Kotlin 应用中,数据绑定的功能中会自动包含 StateFlow 支持,包括协程依赖项。

要了解详情,请参阅使用可观测数据对象

改进的建议导入功能

我们改进了建议导入功能支持的库数量,并更频繁地更新索引。建议导入可帮助您快速轻松地将某些 Google Maven 工件导入到您的类和 Gradle 项目中。当 Android Studio 检测到某些 Google 库中的未解析符号时,IDE 会建议将该库导入到类和项目中。

Build Analyzer 中对配置缓存的支持

构建分析器 现在可以识别出项目何时没有启用 配置缓存,并将其作为一个优化项提供。在启用配置缓存之前,构建分析器会运行兼容性评估,以告知您项目中是否存在任何相关问题。

Configuration cache information in Build Analyzer

对 Jetpack Compose 工具的支持

我们现在为使用 Jetpack Compose 的应用的预览和测试提供额外支持。为了获得最佳的 Jetpack Compose 开发体验,您应该使用最新版本的 Android Studio Arctic Fox,这样您就可以受益于智能编辑器功能,例如新建项目模板以及立即预览 Compose UI 的能力。

Compose 预览

@Preview 方法的以下参数现已可用

  • showBackground:打开和关闭预览的背景。
  • backgroundColor:设置仅在预览表面使用的颜色。
  • uiMode:这个新参数可以采用 Configuration.UI_* 常量中的任何一个,并允许您更改预览的行为,例如,将其设置为夜间模式以查看主题的反应。

Compose preview UI

互动式预览

您可以使用此功能与您的 UI 组件交互,点击它们,并查看状态如何变化。这是快速获取有关 UI 反应以及预览动画反馈的方法。要启用它,请点击 Interactive 图标 ,预览将切换模式。

要停止,请点击顶部工具栏中的 Stop Interactive Preview

Interactive preview UI

部署到设备

您可以使用此功能将 UI 片段部署到设备。这有助于在设备中测试您的代码的小部分,而无需启动整个应用。

点击 @Preview 注解旁边或预览顶部的 Deploy to Device 图标 ,Android Studio 会将该 @Preview 部署到您连接的设备或模拟器上。

字面量的 Live Edit

我们添加了字面量 Live Edit 功能,以帮助使用 Compose 的开发者快速编辑代码中的字面量(字符串、数字、布尔值),并立即看到结果,而无需等待编译。此功能的目标是通过让代码更改几乎即时地显示在预览、模拟器或物理设备中来帮助提高您的工作效率。

Editing number and stringd update immediately in the preview and on device

Layout Inspector 中的 Compose 支持

Layout Inspector 允许您查看在连接设备上运行的应用布局的详细信息。您可以与您的应用交互,并在工具中查看实时更新,以快速调试可能出现的问题。

您可以检查使用新的 Android 声明式 UI 框架 Jetpack Compose 编写的布局。无论您的应用是完全使用 Compose 编写的布局,还是使用 Compose 和 View 混合的布局,Layout Inspector 都可帮助您了解您的布局如何在运行设备上渲染。

开始使用

要开始使用,请将您的应用部署到连接设备,然后通过选择 View > Tool Windows > Layout Inspector 打开 Layout Inspector 窗口。如果 Layout Inspector 未自动连接到您的应用进程,请从进程下拉菜单中选择所需的应用进程。您很快就会在工具窗口中看到您的应用布局已渲染。要开始检查您的 Compose 布局,请选择渲染中可见的布局组件或从 Component Tree 中选择它。

Layout inspector UI

Attributes 窗口显示了当前选定的 Compose 函数的详细信息。在此窗口中,您可以检查函数的参数及其值,包括修饰符和 lambda 表达式。对于 lambda 表达式,检查器提供了快捷方式,可帮助您导航到源代码中的表达式。

Layout Inspector 显示调用堆栈中向您的应用布局发出组件的所有 Compose 函数。在许多情况下,这包括 Compose 库内部调用的 Compose 函数。如果您只想在 Component Tree 中查看您的应用直接调用的 Compose 函数,请点击过滤 操作,这可能有助于将树中显示的节点数量减少到您可能想要检查的节点。

改进的部署下拉菜单

设备下拉菜单现在可以区分您选择的设备配置中的不同类型的错误。图标和样式更改现在区分错误(导致配置损坏的设备选择)和警告(可能导致意外行为但仍可运行的设备选择)。

此外,如果您尝试将项目启动到存在相关错误或警告的设备上,Android Studio 现在会发出警告。

新的 Wear OS 配对助手

新的 Wear OS 配对助手将逐步指导开发者直接在 Android Studio 中将 Wear OS 模拟器与物理或虚拟手机配对。该助手可以帮助您在手机上安装正确的 Wear OS Companion 应用,并设置两台设备之间的连接。您可以通过转到设备下拉菜单 > Wear OS Emulator Pairing Assistant 来开始使用。

Demo of the Wear OS pairing assistant

响应式布局模板

Android Studio Arctic Fox 现在包含一个新的布局模板,可适应各种显示尺寸和应用大小调整,例如手机、折叠设备、平板电脑和分屏模式。创建新项目或模块时,选择响应式 Activity 模板可创建包含可动态调整大小的组件的布局。

Responsive layout template in small screen Responsive layout template in mid screen Responsive layout template in large screen

要开始使用,请导航到 File > New,选择 New ProjectNew Module,然后选择 Responsive Activity 模板。

Responsive layout template in new project wizard

Layout Editor 的无障碍功能扫描器

我们已将 Android Accessibility Test Framework 集成到 Android Studio 中,以帮助您在布局中查找无障碍功能问题。该工具会报告与无障碍功能相关的问题,并为一些常见问题(例如,缺少内容描述或对比度低)提供建议的修复方法。要启动面板,请点击 Layout Editor 中的错误报告按钮

Demo of the Accessibility Scanner

对 Apple Silicon 的支持

Android Studio 和 Android Emulator 现在初步支持在 Apple Silicon (arm64) 硬件架构上运行核心开发者工作流程,包括相应的模拟器系统映像。

目前尚不支持所有 SDK 和 NDK 命令行工具。您可能需要在机器上运行 Rosetta 2 才能运行某些工具。

Apple silicon support

Arctic Fox 的已知问题

本部分介绍了 Android Studio Arctic Fox 中当前的已知问题。

v3.6-v4.1 在 Windows 上应用的补丁无法正常工作

在 Windows 平台上将 v3.6-v4.1 升级到 Android Studio Arctic Fox 稳定版时,补丁可能无法正常工作。

补丁版本

以下是 Android Studio Arctic Fox 的补丁版本。

Android Studio Arctic Fox | 2020.3.1 补丁 4(2021 年 12 月)

此次小版本更新包含以下 bug 修复

  • Android Gradle 插件
    • VariantOutput.version 设置 Provider 可能导致配置缓存中断
    • 发布签名时 gradeResValues.xml 未更新
  • D8/R8
    • R8 压缩构建中类的构造函数抛出 java.lang.ClassCastException
    • dex 合并期间无法到达的类型调整
    • java.lang.VerifyError: 验证器无法验证,因为无法从类型 Reference.java.lang.Object 的对象访问实例字段
  • Lint
    • 禁用 MediaCapabilities lint 检查
    • 启用 shrinkResources 时,Lint 报告误报 [Instantiable] 错误
  • 模板
    • 导入模块选项变灰

有关更多信息,请参阅 2020.3.1 补丁 4 博客文章

Android Studio Arctic Fox | 2020.3.1 补丁 3(2021 年 10 月)

此次小版本更新包含以下 bug 修复

  • Android Gradle 插件
    • lint 独立插件无法正确处理 gradleApi() 依赖项
    • 在 Studio 外部运行 Gradle 构建时触发 JPS 构建
    • 在一个项目中同时启用 KSP 和 Kapt,且两者都包含生成源的处理程序,会导致 BundleLibraryClassesInputs 中断
  • C++ 编辑器
    • 由于后台 JniReferencesSearch 计算时间过长导致 UI 冻结
  • Database Inspector
    • 允许保存 DB
    • 路径中包含空格时无法使用 App Inspection/Database Inspector 导出数据
  • Dexer (D8)
    • Java lambda 在子类化子类时导致意外行为
  • Shrinker (R8)
    • r8 压缩期间出现 Cannot constrain type 错误
    • 执行 R8 3.0.69(来自 AGP 7.0.2)和 3.0.72 时出现问题

有关更多信息,请参阅 2020.3.1 补丁 3 博客文章

Android Studio Arctic Fox | 2020.3.1 补丁 2(2021 年 9 月)

此次小版本更新包含以下 bug 修复

  • Android Gradle 插件
    • 从 AS Arctic Fox Canary 7 升级到 Canary 8 后,Gradle 同步启动了 10 次
    • 脱糖和可重现构建
  • C++ 构建
    • 如果使用 tasks.whenTaskAdded 闭包,Android Gradle 插件 7.0.0 不会将 jniLibs 包含在 APK 中
  • 编辑
    • MergedManifestRefreshListener 在 Arctic Fox 中陷入无限循环
  • Lint
    • “lint 检查的 lint 检查”未运行
  • Shrinker (R8)
    • 在 AGP7 中使用 R8 运行构建时出现 ClassNotFoundException

有关更多信息,请参阅 2020.3.1 补丁 2 博客文章

Android Studio Arctic Fox | 2020.3.1 补丁 1(2021 年 8 月)

本次更新包含以下问题的修复

  • Android Gradle 插件
    • TypedefRemover 使用 ASM5,与需要 ASM7 的 JDK 11 源不兼容
    • 在 AGP 7.0.0 中无法从 Groovy DSL 使用一些新的 DSL 块
    • AGP 7.0.0 稳定版在 libraryVariants.all{applicationId} 上抛出 ExternalApiUsageException
  • C++ 调试器
    • 在 Mac M1 上启动原生调试会话时 AS Arctic Fox 错误,“Found broken LLDB configuration”
  • Resource Manager
    • (Windows)New > Vector Asset > picture.svg:生成的文件中包含无效的“减号”字符xml
  • Shrinker (R8)
    • BridgeHoisting 中的 NPE
    • 升级到 7.0.0 后,R8 崩溃并出现“Unexpected usage left in method after inline”错误

有关更多信息,请参阅 2020.3.1 补丁 1 博客文章