Android Studio 3.4(2019 年 4 月)

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

3.4.2(2019 年 7 月)

此次要更新修正了多个 bug 并进行了多项性能改进。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。

3.4.1(2019 年 5 月)

此次要更新修正了多个 bug 并进行了多项性能改进。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。

3.4.0 已知问题

  • 将应用部署到搭载 Android Q Beta 版的设备时,系统会停用性能分析功能。

  • 使用数据绑定库时,LiveDataListener.onChanged() 可能会因 NPE 而失败。针对此问题的修复程序将包含在 Android Studio 3.4.1 中,并且已在 Android Studio 3.5 的最新预览版中提供。(请参阅问题 #122066788

IntelliJ IDEA 2018.3.4

核心 Android Studio IDE 已通过 2018.3.4 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进。

Android Gradle 插件 3.4.0 更新

如需了解 Android Gradle 插件 3.4.0 中的新变化,请参阅其版本说明

新的“Project Structure”对话框

新的“Project Structure”对话框 (PSD) 可让您更轻松地更新依赖项并配置项目的不同方面,例如模块、build 变体、签名配置和 build 变量。

您可以从菜单栏中依次选择 File > Project Structure 来打开 PSD,也可以通过按 Ctrl+Shift+Alt+S(在 Windows 和 Linux 上)或 Command+;(分号,在 macOS 上)来打开 PSD。您可以在下面找到有关 PSD 的一些新部分和更新部分的说明。

Variables

使用 PSD 新增的“Variables”部分,您可以创建和管理 build 变量,例如用于确保依赖项的版本号在项目中保持一致的 build 变量。

  • 快速查看和修改项目的 Gradle 构建脚本中已有的 build 变量。
  • 直接从 PSD 添加新的项目级或模块级 build 变量。

注意:如果现有 build 配置文件通过复杂的 Groovy 脚本分配值,您可能无法通过 PSD 修改这些值。此外,您也不能使用 PSD 修改以 Kotlin 编写的 build 文件。

Modules

通过 Modules 部分,可以配置应用于现有模块中所有 build 变体的属性,或者向项目添加新模块。例如,您可以在此处配置 defaultConfig 属性或管理签名配置。

Dependencies

检查并在项目依赖关系图中直观呈现每个依赖项(如 Gradle 在项目同步时所解析的那样),具体步骤如下:

  1. 在 PSD 的左侧窗格中,选择 Dependencies
  2. Modules 窗格中,选择您想要检查已解析的依赖项的模块。
  3. 在 PSD 的右侧,打开 Resolved Dependencies 窗格,如下所示。

您还可以快速搜索依赖项并将其添加到项目中,具体方法是:首先从 PSD 的 Dependencies 部分选择一个模块,点击 Declared Dependencies 部分中的 (+) 按钮,然后选择要添加的依赖项类型。

根据您选择的依赖项的类型,您应该会看到一个类似如下的对话框,它可以帮助您向模块中添加依赖项。

Build Variants

在 PSD 的这一部分中,可以为项目中的每个模块创建和配置 build 变体和产品变种。您可以添加清单占位符,添加 ProGuard 文件以及分配签名密钥等。

Suggestions

您可以在 Suggestions 部分中查看为项目依赖项和 build 变量建议的更新,如下图所示。

新的 Resource Manager

Resource Manager 是一个新的工具窗口,用于在应用中导入、创建、管理和使用资源。您可以从菜单栏中依次选择 View > Tool Windows > Resource Manager 来打开该工具窗口。通过 Resource Manager,您可以执行以下操作:

  • 直观地呈现资源:您可以预览可绘制对象、颜色和布局,以快速找到所需的资源。
  • 批量导入:您可以一次导入多项可绘制资源,具体方法是:将这些资源拖放到 Resource Manager 工具窗口中或使用 Import drawables 向导。要访问向导,请选择工具窗口左上角的 (+) 按钮,然后从下拉菜单中选择 Import Drawables
  • 将 SVG 转换为 VectorDrawable 对象:您可以使用 Import Drawables 向导将 SVG 图片转换为 VectorDrawable 对象。
  • 拖放资源:在 Resource Manager 工具窗口中,您可以将可绘制对象拖放到布局编辑器的设计视图和 XML 视图上。
  • 查看备用版本:现在,您可以在 Tool 窗口中双击某项资源来查看该资源的备用版本。此视图会显示您创建的不同版本以及包含的限定符。
  • 选择平铺和列表视图:您可以在工具窗口中更改视图,以便以不同的排列方式显示您的资源。

如需了解详情,请参阅有关如何管理应用资源的指南。

在对 APK 进行性能分析和调试时检查 build ID

当您为 APK 内的 .so 共享库提供调试符号文件时,Android Studio 会验证所提供的符号文件的 build ID 是否与 APK 内 .so 库的 build ID 匹配。

如果您在构建 APK 中的原生库时添加了 build ID,Android Studio 会检查符号文件中的 build ID 是否与原生库中的 build ID 匹配,如果不匹配,会拒绝符号文件。如果您在构建原生库时未添加 build ID,则提供不正确的符号文件可能会导致调试出现问题。

R8 默认处于启用状态

R8 将脱糖、压缩、混淆、优化和 dex 处理整合到一个步骤中,从而显著提高了构建性能。R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。

下图是引入 R8 之前的编译流程的简要概览。

在引入 R8 之前,ProGuard 是一个与 dex 处理和脱糖不同的编译步骤。

现在,有了 R8,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。

有了 R8,可以在一个编译步骤中执行脱糖、压缩、混淆、优化和 dex 处理。

请注意,R8 旨在与您现有的 ProGuard 规则配合使用,因此您可能不需要采取任何操作即可从 R8 中受益。但是,相对专为 Android 项目设计的 ProGuard 而言,R8 是一项不同的技术,因此压缩和优化可能会导致移除 ProGuard 可能没有的代码。因此,在这种情况(尽管不太可能发生)下,您可能需要添加其他规则,以在 build 输出中保留这些代码。

如果您在使用 R8 时遇到问题,请参阅 R8 兼容性常见问题解答一文,以检查是否有针对您的问题的解决方案。如果没有记录的解决方案,请报告 bug。您可以停用 R8,只需将以下其中一行代码添加到项目的 gradle.properties 文件即可:

    # Disables R8 for Android Library modules only.
    android.enableR8.libraries = false
    # Disables R8 for all modules.
    android.enableR8 = false
    
  

注意:对于指定 build 类型,如果您在应用模块的 build.gradle 文件中将 useProguard 设置为 false,Android Gradle 插件会使用 R8 压缩该 build 类型的应用代码,无论您是否在项目的 gradle.properties 文件中停用 R8 都是如此。

现在,Navigation 组件支持的所有参数类型都在 Navigation Editor 中得到支持。如需详细了解支持的类型,请参阅在平台之间传递数据

布局编辑器改进 {:#layout-editor}

布局编辑器中的 Attributes 窗格已经简化为单个页面,您可以展开该页面中的各部分,查看可配置的属性。Attributes 窗格还包含以下更新:

  • 新的 Declared Attributes 部分列出了布局文件指定的属性,并且可让您快速添加新属性。
  • 现在,Attributes 窗格还会在每个属性旁边显示指示符,当该属性的值是资源引用时,这些指示符是非中空的,在其他情况下则是中空的。
  • 现在,系统会突出显示带有错误或警告的属性。红色表示错误(例如,使用无效布局值时),橙色表示警告(例如,使用硬编码值时)。

用于快速导入依赖项的新 intent 操作

如果您开始在代码中使用某些 Jetpack 和 Firebase 类,新的 intent 操作会建议将所需的 Gradle 库依赖项添加到项目中(如果您尚未这样做)。例如,如果您在未先导入所需的 android.arch.work:work-runtime 依赖项的情况下引用 WorkManager 类,intent 操作可让您只需点击一次即可轻松实现此目的,如下所示。

特别是,由于 Jetpack 将支持库重新打包为更易于管理和更新的独立软件包,因此该 intent 操作可帮助您快速地仅添加您想要使用的 Jetpack 组件所需的依赖项。