Android Studio 预览版中的新功能

Android Studio 3.6 已发布稳定版。您可以在此处下载

Android Studio 4.1 目前已发布 Canary 版和开发者版,Android Studio 4.0 目前已发布 Beta 版。

如需了解与各版本有关的最新资讯,包括每个版本中的重要修复的列表,另请参阅版本更新

如果您在使用 Android Studio 预览版时遇到任何问题,请告知我们。您的错误报告有助于我们改进 Android Studio。

Android Studio 4.1

本部分简要介绍了 Android Studio 4.1 中的新功能和变化。

数据库检查器

借助 Android Studio 4.1 Canary 6 及更高版本,您可以使用新版数据库检查器检查、查询和修改应用的数据库。例如,您可以通过修改数据库中的值并在设备上测试更改来调试正在运行的应用。

修改表值并在正在运行的应用中查看更改

要开始使用,请将您的应用部署到搭载 API 级别 26 或更高级别的设备中,然后从菜单栏中依次选择 View > Tool Windows > Database Inspector

如果 Database Inspector 窗口未自动选择您的应用的进程,请从下拉菜单中选择该进程。

检查并修改表

Databases 面板中,您可以查看应用的数据库,还可以展开数据库节点以查看其中的表。当您双击某个表时,检查器会在右侧的一个单独的标签页中打开该表(如以下屏幕截图中所示),您可以在其中检查表中的数据,按列排序数据,或在设备上运行应用的同时修改值。

如需更改表单元格中的值,只需双击该单元格,更改单元格中的值,然后按 Enter 键即可。如果您使用 Room 持久性库并观察数据库(例如使用 LiveData),这些更改应该会立即显示在正在运行的应用中。否则,您可能需要刷新应用的数据库查询信息,才能显示更改。

检查、查询和修改应用的数据库

如果您的应用更新了数据库,并且您希望在检查器窗口中自动显示这些更新,请勾选 Live updates 旁边的复选框。请注意,启用此选项后,检查器中的表将变为只读状态,您无法修改表中的值。

或者,您也可以点击 Refresh Table,手动更新检查器中的数据。同样,如果数据库架构发生变化,请点击 Databases 面板中的 Refresh Schema

查询数据库

如需查询数据库,请点击 Databases 面板中的 Run SQL。这将在右侧打开一个 New Query 标签页。如果应用包含多个数据库,请使用标签页窗口中的下拉菜单选择要查询的数据库。在文本字段中,您可以指定 SQLite 查询,然后点击 Run。检查器会查询应用的数据库并返回结果,如下所示。

查询数据库

如果您使用 Room 持久性库,Android Studio 还会提供边线操作,帮助您快速运行在 @Query 注释中定义的查询。将应用部署到兼容设备上并在 IDE 中打开 Database Inspector 后,请点击 @Query 注释旁边的 按钮,如下所示。

Room 查询注释边线操作

数据库检查器会打开一个新标签页,运行查询并返回结果。如果查询包含已命名的绑定参数(例如 :name),Android Studio 会在运行查询之前请求每个参数的值。

Native Memory Profiler

Android Studio Memory Profiler 现在包含 Native Memory Profiler,该工具适用于部署到搭载 Android 10 或更高版本的物理设备的应用。Native Memory Profiler 的样本大小为 32 个字节,它会跟踪特定时间段内采用原生代码表示的对象的分配/解除分配情况,并提供以下信息:

  • Allocations:在选定时间段内通过 malloc()new 运算符分配的对象数。
  • Deallocations:在选定时间段内通过 free()delete 运算符解除分配的对象数。
  • Allocations Size:在选定时间段内所有分配的总大小(以字节为单位)。
  • Deallocations Size:在选定时间段内所有已释放内存的总大小(以字节为单位)。
  • Total CountAllocations 列中的值减去 Deallocations 列中的值所得的结果。
  • Remaining SizeAllocations Size 列中的值减去 Deallocations Size 列中的值所得的结果。

Native Memory Profiler

要启动录制,请点击 Memory Profiler 窗口顶部的 Record native allocations

“Record native allocations”按钮

当您准备好完成录制时,请点击 Stop recording

使用 TensorFlow Lite 模型

借助机器学习模型绑定,您可以轻松地直接导入 .tflite 模型文件并在项目中使用这些模型文件。Android Studio 会生成易于使用的类,这样您就可以使用更少的代码运行模型并获得更佳的类型安全。

支持的模型

机器学习模型绑定的当前 Canary 版实现支持图像分类和风格迁移模型,前提是这些模型通过元数据得到了增强。随着时间的推移,支持范围将扩展到其他问题领域,例如对象检测、图像分割和文本分类。

TensorFlow Hub 上提供了丰富的预训练图像分类模型,只需查找并下载提及“元数据”的模型格式即可。您还可以自己向 TensorFlow Lite 模型添加元数据,如向 TensorFlow Lite 模型添加元数据中所述。

导入模型文件

如需导入支持的模型文件,请按以下步骤操作:

  1. 在“File”菜单中,依次选择 File > New > Other > TensorFlow Lite Model,打开 TensorFlow Lite 模型导入对话框。
  2. 选择您之前下载或创建的 .tflite 模型文件。
  3. 点击 Finish

这会将模型文件导入您的项目中,并将其放入 ml/ 文件夹中;如果该目录不存在,Android Studio 将为您创建该目录。

导入 TensorFlow Lite 模型

查看模型元数据

如需查看所导入模型的详细信息并获取有关如何在应用中使用该模型的说明,请双击项目中的模型文件以打开模型查看器页面,该页面显示以下信息:

  • Model:模型的简要说明
  • Tensors:输入和输出张量的说明
  • Sample Code:有关如何在应用中与模型交互的示例

TensorFlow Lite 模型查看器的屏幕截图

如果模型不含元数据,此屏幕将仅提供基本信息。

在应用中使用模型

模型查看器提供示例代码,帮助您开始在应用中使用模型。

以下是使用 mobilenet_quant_metadata.tflite 的示例:

Kotlin

    try {
        val model: MobilenetQuantMetadata = MobilenetQuantMetadata.newInstance(this)

        // Creates a TensorImage instance from Bitmap.
        val tensorImage = TensorImage()
        tensorImage.load(bitmap)

        // Runs model inference and gets result.
        val outputs: MobilenetQuantMetadata.Outputs = model.process(tensorImage)
        val tensorLabel: TensorLabel = outputs.getProbabilityAsTensorLabel()
        val probMap = tensorLabel.mapWithFloatValue

        for ((key, value) in probMap) {
            Log.d(TAG, "label = $key, prob = $value")
        }
    } catch (e: IOException) {
        // Handles exception
    }
    

Java

    try {
        MobilenetQuantMetadata model = MobilenetQuantMetadata.newInstance(this);

        // Creates a TensorImage instance from Bitmap.
        TensorImage tensorImage = new TensorImage();
        tensorImage.load(bitmap);

        // Runs model inference and gets results.
        MobilenetQuantMetadata.Outputs outputs = model.process(tensorImage);
        TensorLabel tensorLabel = outputs.getProbabilityAsTensorLabel();
        Map<String, Float> probMap = tensorLabel.getMapWithFloatValue();

        for (Map.Entry<String, Float> entry : probMap.entrySet()) {
          Log.d(TAG, "label = " + entry.getKey() + ", prob = " + entry.getValue());
        }
    } catch (IOException e) {
       // Handles exception
    }
    

如示例所示,Android Studio 创建了一个名为 MobilenetQuantMetadata 的类,用于与模型进行交互。

已知问题与解决方法

  • 目前对除图像分类和风格迁移之外的其他问题领域的 TensorFlow Lite 模型的支持有限。虽然导入应该可以正常运行,但某些模型输入和/或输出由 TensorBuffer 而非友好类型表示。对于不含任何元数据的模型,所有模型输入和输出都将是 TensorBuffer。
  • 如需支持大于 20 MB 的 TensorFlow Lite 模型,请替换以下 IntelliJ IDE 属性:idea.max.content.load.filesize。如需了解详情,请参阅本页面
  • 不支持输入和输出数据类型不为 DataType.UINT8DataType.FLOAT32 的模型。

此功能仍在开发中,欢迎您提供反馈或报告错误

支持 Jetpack Compose

Jetpack Compose 工具包提供了一种用于构建应用界面的现代方法。此外,该工具包还融合了 Kotlin 的所有优势,如帮助您编写可完全与 Java 互操作的简洁而惯用的代码。

为了获得最佳 Jetpack Compose 开发体验,您应使用最新版本的 Android Studio 4.1。这是因为,当您搭配使用 Android Studio 和 Jetpack Compose 开发应用时,可以从智能编辑器功能中受益,这些功能包括“新建项目”模板和立即预览 Compose 界面等。

如需了解详情并开始使用,请转到 Jetpack Compose 概览

调试 build 中的断言

现在,在部署应用的调试版本时,会启用 Java 代码中的断言。由于 Android 运行时不支持在运行时启用断言(即,将 -ea/-enableassertions 标记的等效内容传递到 Java 虚拟机),因此应用中的断言以前没有任何作用。

现在,当您使用 Android Gradle 插件 4.1.0-alpha01 及更高版本构建和部署应用的调试版本时,内置编译器 (D8) 会重写代码以在编译时启用断言,因此您始终可以使断言检查处于活动状态。

4.1 预览版的已知问题

本部分介绍了 Android Studio 4.1 预览版的当前已知问题。

补丁程序在 4.1 Canary 2 中无法正常使用

Android Studio 4.1 Canary 2 的补丁程序目前已损坏。如需更新到较新的 Android Studio 4.1 版本,请关闭 Android Studio,然后下载并安装最新软件包

此问题已在 Android Studio 4.1 Canary 3 中修复。

CPU Profiler 中的超时错误

如果您选择采样 Java 方法跟踪 Java 方法配置,则可能会在 Android Studio CPU Profiler 中遇到“停止录制失败”错误。这些是常见的超时错误,当您在 idea.log 文件中看到以下错误消息时尤为如此:

Wait for ART trace file timed out

超时错误对所跟踪方法的影响往往大于所采样方法,对较长时间录制的影响往往大于较短时间的录制。作为临时解决方法,尝试较短时间的录制以查看错误是否消失可能会很有帮助。

如果您在使用 Profiler 时遇到超时问题,请提交错误,其中包含设备品牌/型号以及来自 idea.log 和 logcat 的所有相关条目。

IDE 中的 Git 版本控制错误

Git 版本控制中需要进行身份验证的操作在 Android Studio 4.1 Canary 1 的 IDE 中损坏。

如需解决此问题,请升级到 Android Studio 4.1 Canary 2。

Android Studio 4.0

本部分简要介绍了 Android Studio 4.0 中的新功能和变更。

CPU Profiler 界面升级

系统轨迹界面升级

根据您的反馈,CPU Profiler 界面经过了全新改版,以提供更直观的工作流。显著变更包括:

  • CPU 记录现在已从主分析器时间轴分离出来,使分析更加容易。记录的数据按组显示在 Profiler 窗口的左侧。您可以通过点击窗口右上角的 分析器中的选项图标 选项图标或通过拖放组中的各项来上下移动组以重新整理列表。
  • 为使并排分析更容易,您现在可以查看线程活动时间轴中的所有线程活动(包括方法、函数和事件)。
  • 现在,Flame ChartTop DownBottom Up 分析对应的标签页位于右侧列中。在“Threads”组中,对于系统轨迹记录,线程会自动展开;对于其他记录类型,线程会默认收起。双击线程名称可将其展开或收起。
  • 系统轨迹界面(如上面的屏幕截图中所示)也得到了改进。例如,为了让您更容易区分,系统现在使用独特的颜色显示不同的事件。

此功能仍在开发中,因此请继续提供反馈

移除了“分离注释处理”功能

已移除将注释处理进程分离到一项专门任务中的功能。此选项过去用于在纯 Java 项目中使用非增量注释处理器时维持增量 Java 编译;过去的启用方法是在 gradle.properties 文件中将 android.enableSeparateAnnotationProcessing 设为 true,但这种方法不再起作用。

您应改为使用增量注释处理器来提升构建性能。

“Build Speed”窗口

将 Android Studio 4.0 Canary 3 与 Android Gradle 插件 4.0.0-alpha03 及更高版本一起使用时,Build Speed 窗口可帮助您了解和诊断与构建流程有关的问题,如优化被停用和任务配置不当问题。将 Android Studio 4.0 Canary 3 及更高版本与 Android Gradle 插件 4.0.0-alpha03 及更高版本一起使用时,您可以按如下方式打开 Build Speed 窗口:

  1. 通过从菜单栏中依次选择 Build > Make Project 来构建应用(如果您尚未这样做)。
  2. 从菜单栏中依次选择 View > Tool Windows > Build
  3. Build 窗口中,通过以下某种方式打开 Build Speed 窗口:
    • Android Studio 构建完您的项目后,点击 Build Speed 标签页。
    • Android Studio 构建完您的项目后,点击 Build Output 窗口右侧的链接。

Build Speed 窗口将可能的构建问题组织在左侧的树中。您可以检查并点击每个问题,以在右侧的面板中调查其详细信息。当 Android Studio 分析您的构建时,它会计算决定构建时长的一组任务,并提供直观的图表以帮助您了解其中每项任务所产生的影响。您也可以展开 Warnings 节点以获取有关警告的详细信息。

构建速度图表

哪些任务决定构建时长?

Gradle 按任务的相互依赖性、项目结构和 CPU 负载来决定任务的执行,并按顺序或并行执行任务。对于给定的构建,Build Speed 窗口会突出显示决定当前构建时长的一组按顺序执行的任务。如需缩短总体构建时间,最好首先解决这些突出显示的任务执行效率低下的问题。

请注意,对于您执行的每次构建,您可能会看到一组不同的任务决定了构建时长。例如,如果您对构建配置进行更改、通过一组不同的任务运行构建(如增量构建)或在不同的约束条件(如较重的 CPU 负载)下运行构建,则“Build Speed”窗口可能会突出显示对该构建的时长影响最大的一组不同的任务。由于这种变化,您可能希望在多次构建之间使用“Build Speed”窗口来不断缩短构建时长。

实时布局检查器

您可以使用更新后的实时布局检查器调试布局,该工具可以在将应用部署到设备时提供应用界面的完整实时数据分析。

如需打开一个布局检查器窗口,请依次转到 View > Tools Windows > Layout Inspector。除了与现有布局检查器相同的许多功能之外,实时布局检查器还包含如下功能:

  • 动态布局层次结构:随着设备上的视图发生变化而进行更新。

动态布局层次结构

  • 属性值解析堆栈:调查资源属性值在源代码中的来源位置,点击属性窗格中的超链接即可转到其位置。

属性值解析堆栈

  • 3D 视图:使用高级 3D 可视化功能,在运行时查看应用的视图层次结构。如需使用此功能,只需在实时布局检查器窗口中点击相应的布局并进行旋转。

布局检查器:3D 视图

只有在将您的应用部署到搭载 API 级别 29 或更高级别的设备上时,才能使用实时布局检查器。您还必须启用该功能,方法是依次转到 File > Settings > Experimental 并勾选 Enable Live Layout Inspector 旁边的框。

Multi Preview

Multi Preview 是一款可视化工具,用于同时预览不同设备中及采用不同配置的布局,这样可帮助找出布局中的潜在问题。

您可以通过点击 IDE 窗口右上角的 Multi Preview 标签页来使用该功能:

Multi Preview 标签页

有两个不同的配置集可供您选择,即“Pixel Devices”和“Project Locales”。如需在这些配置集之间切换,请从 Multi Preview 窗口顶部的下拉列表中进行选择:

Multi Preview 演示

D8 和 R8 中的 Java 8 库脱糖

Android Studio 现在支持使用多种 Java 8 语言 API,而无需为应用设置最低 API 级别。

通过一个称为“脱糖”的过程,Android Studio 3.0 及更高版本中的 DEX 编译器 D8 已经为 Java 8 语言功能(如 lambda 表达式、默认接口方法、try-with-resources 等等)提供了大量的支持。在 Android Studio 4.0 中,脱糖引擎经过扩展,能够使 Java 语言 API 脱糖。这意味着,您现在可以在支持旧版 Android 的应用中添加过去仅在最新 Android 版本中可用的标准语言 API(如 java.util.streams)。

此版本支持下面一组 API:

  • 顺序流 (java.util.stream)
  • java.time 的子集
  • java.util.function
  • java.util.{Map,Collection,Comparator} 的最近新增内容
  • 可选内容(java.util.Optional, java.util.OptionalIntjava.util.OptionalDouble)以及对上述 API 很有用的一些其他新类
  • java.util.concurrent.atomic 的一些新增内容(AtomicIntegerAtomicLongAtomicReference 的新方法)
  • ConcurrentHashMap(包含 Android 5.0 的问题修复)

为了支持这些语言 API,D8 编译了一个单独的库 DEX 文件,其中包含缺失 API 的实现,并将其添加到您的应用中。脱糖过程会重新编写应用的代码,以便在运行时改用此库。

如需启用对这些语言 API 的支持,请在模块的 build.gradle 文件中添加以下内容:

android {
      defaultConfig {
        // Required when setting minSdkVersion to 20 or lower
        multiDexEnabled true
      }

      compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
      }
    }

    dependencies {
      coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5'
    }
    

如果您遇到问题或希望支持其他 API,请告知我们,只需在我们的错误跟踪器中提交错误即可。

支持 Kotlin DSL 脚本文件

Android Gradle 插件现在支持 Kotlin DSL 构建脚本文件 (*.kts)。与 Android Studio 一起使用时,某些 IDE 功能(如“Project Structure”对话框和构建脚本快速修复)现在也支持读取和写入 Kotlin 构建脚本文件。

适用于 ProGuard 规则的智能编辑器功能

Android Studio 现在可以在您打开 ProGuard 规则文件时提供智能编辑器功能,如语法突出显示、代码补全和错误检查。该编辑器还与 Android Studio 项目集成,以便为所有类、方法和字段提供完整的符号补全,并且包括快速导航和重构功能。

修改 ProGuard 规则文件时使用的智能编辑器功能

新的 Motion Editor

Android Studio 现在包含一个适用于 MotionLayout 布局类型的视觉设计编辑器,可让您更轻松地创建和预览动画。

Motion Editor 提供了一个简单的界面来操控 MotionLayout 库中的元素,该库是 Android 应用中动画的基础。在之前的版本中,创建和更改这些元素需要手动修改 XML 资源文件中的约束。现在,Motion Editor 支持开始状态和结束状态、关键帧、转换和时间轴,可以为您生成此 XML 文件。

要开始使用 Motion Editor,请执行以下操作:

  1. 创建一个 ConstraintLayout
  2. 右键点击 Layout Editor 中的预览区域。
  3. 点击 Convert to MotionLayout,如下所示。

Android Studio 将 ConstraintLayout 转换为 MotionLayout 后,也会将一个 Motion Scene 文件添加到包含您的 XML 文件的目录中。

MotionLayout 随后成为您的根布局,并且它会出现在 Motion Editor 界面中。布局已包含开始 ConstraintSet、结束 ConstraintSet 以及从开始到结束的转换。

您可以使用概览图来选择 ConstraintSetTransition 并在选择面板中选择组件。

然后,您可以修改开始或结束 ConstraintSet 的约束和属性,修改方式与修改 ConstraintLayout 一样。

如果您要在图中构建更多元素,可以使用创建图标来快速添加 ConstraintSetTransitionOnClick/OnSwipe 手势。

如需添加关键帧,请先点击 Transition 箭头:

然后,在 Transition 时间轴窗格中,点击右上角并选择 KeyPosition

此操作会打开一个对话框,您可以从中设置关键帧的属性。

您还可以在属性面板中向转换添加 OnClickOnSwipe 处理程序。

此操作会打开一个对话框,您可以从中设置点击操作的属性,如目标组件和拖动方向。

Motion Editor 支持在设计图面上预览动画。选择动画后,点击时间轴上方的 Play 图标 即可预览动画。

Android Gradle 插件 4.0.0 中的新功能

本部分介绍了 Android Gradle 插件 4.0.0 中包含的新功能和行为变化。

用于启用或停用构建功能的新选项

Android Gradle 插件 4.0.0-alpha05 引入了一种新方法来控制您要启用和停用的构建功能,如视图绑定、数据绑定和 Jetpack Compose。添加新功能后,默认情况下,这些功能处于停用状态。您随后可以使用 buildFeatures 块来仅启用所需的功能,它可以帮助您优化项目的构建性能。您可以在模块级 build.gradle 文件中为每个模块设置相应的选项,如下所示:

    android {
        // The default value for each feature is shown below. You can change the value to
        // override the default behavior.
        buildFeatures {
            // Determines whether to generate a BuildConfig class.
            buildConfig = true
            // Determines whether to support View Binding.
            // Note that the viewBinding.enabled property is now deprecated.
            viewBinding = false
            // Determines whether to support Data Binding.
            // Note that the dataBinding.enabled property is now deprecated.
            dataBinding = false
            // Determines whether to generate binder classes for your AIDL files.
            aidl = true
            // Determines whether to support RenderScript.
            renderScript = true
            // Determines whether to support injecting custom variables into the module's R class.
            resValues = true
            // Determines whether to support shader AOT compilation.
            shaders = true
        }
    }
    

您还可以为项目中的所有模块指定这些功能的默认设置,方法是在项目的 gradle.properties 文件中添加下面的一项或多项,如下所示。请注意,您仍然可以使用模块级 build.gradle 文件中的 buildFeatures 块替换这些项目范围的默认设置。

android.defaults.buildfeatures.buildconfig=true
    android.defaults.buildfeatures.aidl=true
    android.defaults.buildfeatures.renderscript=true
    android.defaults.buildfeatures.resvalues=true
    android.defaults.buildfeatures.shaders=true
    

功能对功能的依赖性

在以前的 Android Gradle 插件版本中,所有动态功能模块都只能依赖于应用的基础模块。使用 Android Gradle 插件 4.0.0 时,您现在可以添加依赖于其他功能模块的功能模块。也就是说,:video 功能可以依赖于 :camera 功能,后者依赖于基础模块,如下图所示。

功能对功能的依赖性

:video 动态功能依赖于 :camera 功能,后者依赖于 :app 基础模块。

这意味着,当您的应用请求下载某个动态功能模块时,它也会下载该模块所依赖的其他功能模块。为您的应用创建动态功能模块后,您可以在模块的 build.gradle 文件中声明功能对功能的依赖性。例如,:video 模块声明对 :camera 的依赖性,如下所示:

// In the build.gradle file of the ':video' module.
    dependencies {
        // All dynamic feature modules must declare a dependency
        // on the base module.
        implementation project(':app')
        // Declares that this module also depends on the 'camera'
        // dynamic feature module.
        implementation project(':camera')
        ...
    }
    

此外,您还应在 Android Studio 中启用功能对功能的依赖性功能(例如,为了在修改运行配置时支持该功能),方法是从菜单栏中依次点击 Help > Edit Custom VM Options,并添加以下内容:

-Drundebug.feature.on.feature=true
    

移除了“feature”和“instantapp”Android Gradle 插件

Android Gradle 插件 3.6.0 弃用了功能插件 (com.android.feature) 和免安装应用插件 (com.android.instantapp),改为使用动态功能插件 (com.android.dynamic-feature),以通过 Android App Bundle 构建和打包免安装应用。

在 Android Gradle 插件 4.0.0-alpha01 及更高版本中,完全移除了这些已弃用的插件。因此,如需使用最新的 Android Gradle 插件,您需要迁移免安装应用以支持 Android App Bundle。通过迁移免安装应用,您可以利用 app bundle 的优势,并简化应用的模块化设计

依赖项元数据

使用 Android Gradle 插件 4.0.0-beta02 及更高版本构建应用时,该插件包含描述已编译到应用中的依赖项的元数据。上传应用时,Play 管理中心会检查此元数据,以便为您提供以下优势:

  • 获取有关您的应用使用的 SDK 和依赖项的已知问题的提醒
  • 接收可解决这些问题的反馈

数据经过压缩,并由 Google Play 签名密钥加密,然后存储在您的发布应用的签名分块中。但是,您可以在以下目录中的本地中间构建文件中自行检查元数据:<project>/<module>/build/outputs/sdk-dependencies/release/sdkDependency.txt

如果您不希望分享这些信息,则可以通过在模块的 build.gradle 文件中添加以下内容来选择退出:

android {
        dependenciesInfo {
            // Disables dependency metadata when building APKs.
            includeInApk = false
            // Disables dependency metadata when building Android App Bundles.
            includeInBundle = false
        }
    }
    

Kotlin Android 实时模板

Android Studio 现在包含适用于 Kotlin 类的 Android 实时模板。例如,您现在可以输入 toast 并按 Tab 键来快速插入一个消息框。如需查看可用实时模板的完整列表,请从菜单栏中依次点击 File > Settings(或在 macOS 上,依次点击 Android Studio > Preferences),然后依次转到 Editor > Live Templates

Fragment 向导和新的 Fragment 模板

现在,当您依次转到 File > New > Fragment > Gallery 或在 Navigation Editor 中点击 Create new destination 时,会出现新的 Android Fragment 向导和新的 Fragment 模板。

Fragment 库向导。

Fragment 库向导。

从 AAR 依赖项导入原生库

从 Android Gradle Plugin 4.0 Canary 9 开始,您可以从应用的 AAR 依赖项导入 C/C++ 库。当您按照下述配置步骤操作时,Gradle 会自动将这些原生库用于您的外部原生构建系统,例如 CMake。请注意,Gradle 仅向您的版本提供这些库;您仍须配置构建脚本才能使用它们。

使用 Prefab 软件包格式导出库。

每个依赖项最多可以显示一个包含一个或多个模块的 Prefab 软件包。Prefab 模块是一个单独的库,可以是共享库、静态库或仅针对头文件的库。

通常,软件包名称与 Maven 工件名称相匹配,模块名称与库名称相匹配,但并不总是如此。由于您需要知道库的软件包和模块名称,因此您可能需要参考依赖项文档以确定这些名称。

配置外部原生构建系统

如需查看需要遵循的步骤,请点击您计划使用的外部原生构建系统。

AAR 中包含的原生依赖项通过 CMAKE_FIND_ROOT_PATH 向您的 CMake 项目公开。当系统调用 CMake 时,Gradle 会自动设置此值,因此如果您的版本修改了此变量,请务必确保对其附加相应值而不是直接赋值。

每个依赖项都会向您的 CMake 版本公开 config-file 软件包,您将使用 find_package 命令导入该版本。此命令会搜索与给定软件包名称和版本匹配的 config-file 软件包,并显示它定义将在您的版本中使用的目标。例如,如果您的应用定义了 libapp.so 并且使用了 curl,您应在 CMakeLists.txt 文件中包含以下内容:

add_library(app SHARED app.cpp)

    # Add these two lines.
    find_package(curl REQUIRED CONFIG)
    target_link_libraries(app curl::curl)
    

您现在可以在 app.cpp 中指定 #include "curl/curl.h"。当您构建项目时,您的外部原生构建系统会自动关联 libapp.solibcurl.so 并将 libcurl.so 打包在 APK 或 app bundle 中。

4.0 预览版的已知问题

本部分介绍了 Android Studio 4.0 预览版的当前已知问题。

Beta 4 中停用了 Build 分析器

Android Studio 4.0 Beta 4 中停用了 Build 分析器。Beta 5 中将重新启用该分析器。

CPU Profiler 中的超时错误

如果您选择采样 Java 方法跟踪 Java 方法配置,则可能会在 Android Studio CPU Profiler 中遇到“停止录制失败”错误。这些是常见的超时错误,当您在 idea.log 文件中看到以下错误消息时尤为如此:

Wait for ART trace file timed out

超时错误对所跟踪方法的影响往往大于所采样方法,对较长时间录制的影响往往大于较短时间的录制。作为临时解决方法,尝试较短时间的录制以查看错误是否消失可能会很有帮助。

如果您在使用 Profiler 时遇到超时问题,请提交错误,其中包含设备品牌/型号以及来自 idea.log 和 logcat 的所有相关条目。

补丁程序在 4.0 Beta 2 中无法正常使用

Android Studio 4.0 Beta 2 的补丁程序目前已损坏。如需更新到较新的 Android Studio 4.0 版本,请关闭 Android Studio,然后下载并安装最新软件包

此问题已在 Android Studio 4.0 Beta 3 中修复。

IDE 中的 Git 版本控制错误

Git 版本控制中需要进行身份验证的操作在 Android Studio 4.0 Beta 1 的 IDE 中损坏。

如需解决此问题,请升级到 Android Studio 4.0 Beta 2 或更高版本。

缺少“Run”、“Debug”和“Profile”工具栏按钮

如果您对操作按钮的 Run/Debug 组进行了自定义(例如,通过在 SettingsPreferences 窗口中的 Appearance & Behavior > Menus and Toolbars 下修改选项),那么在您重启 IDE 后,这些操作按钮可能会从工具栏中消失。这是 Android Studio 4.0 所基于的 IntelliJ 版本的已知问题(请参阅问题 IDEA-228450)。

如需解决此问题,请还原您对这些按钮所做的任何自定义,具体操作步骤如下:

  1. 依次选择 File > Settings(或在 macOS 上,依次选择 Android Studio > Preferences)。
  2. 在窗口左侧,依次转到 Appearance & Behavior > Menus and Toolbars
  3. 在窗口右侧,依次转到 Main Toolbar > Toolbar Run Actions,然后选择 Run/Debug
  4. 在窗口顶部附近,点击 Revert 图标 ,然后选择 Restore Run/Debug
  5. 点击 OK。您现在应该会在工具栏中看到缺少的按钮。

Canary 5 没有可用的补丁程序

Android Studio 4.0 Canary 5 没有可用于之前发布的 Android Studio 4.0 Canary 版本的补丁程序。如需安装 Android Studio 4.0 Canary 5,请从 Android Studio 下载页面进行下载。

Canary 5 中的分析器和实时布局检查器

从 Android Studio 4.0 Canary 5 开始,实时布局检查器和分析器无法在 Windows 上正常运行,从而导致出现以下错误消息:

    transfer error: couldn't create file: Read-only file system.
    

如需解决此问题,请升级到 Android Studio 4.0 Canary 7 或更高版本。

缺少 Kotlin Maven 代码库

如果您使用的是 Android Studio 4.0 Canary 4 或更低版本,则可能会看到以下错误消息:

Application build has failed with an error (Could not find org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.60-eap-25)
    

如需解决此问题,请更新到 Android Studio 4.0 Canary 5 或更高版本。

部署具有原生依赖项的应用时出现 IllegalStateException

如果您的应用包含原生依赖项并且具有 androidParallelJsonGen=true(默认值),您在从 Android Studio 部署应用时会遇到 IllegalStateException 异常。如需解决此问题,请在项目的 gradle.properties 文件中设置 android.enableParallelJsonGen=false。如需了解详情,请参阅问题 149575364

包括原生依赖项的问题

Android Gradle 插件当前默认为旧版 Prefab,该版本存在一些已知问题:

  • 库路径在 Windows 上被错误转义。
  • CMake 插件错误地导出静态库。
  • 有效的 STL 组合可能被错误拒绝。

最新版本的 Prefab 修复了这些问题。如需使用最新版本的 Prefab,请在项目的 gradle.properties 文件中将 android.prefabVersion 设置为 1.0.0-alpha6 或更高版本。