以下是 Android Studio 3.6 及更低版本以及 Android Gradle 插件 3.6.0 及更低版本的版本说明。
旧版 Android Studio
3.6(2020 年 2 月)
Android Studio 3.6 是一个主要版本,包含各种新功能和改进。
另外,我们还要感谢所有为此版本提供过帮助的社区贡献者。
3.6.3(2020 年 4 月)
此次要更新包含多项 bug 修复。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
3.6.2(2020 年 3 月)
此次要更新包含多项 bug 修复。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
3.6.1(2020 年 2 月)
此次要更新包含多项 bug 修复。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
设计工具
此版本的 Android Studio 包含对多个设计工具的更新,其中包括布局编辑器和 Resource Manager。
设计编辑器中的拆分视图和缩放控件
此版本包含对视觉设计编辑器的以下更新:
-
设计编辑器(如布局编辑器和 Navigation Editor)现在提供了 Split 视图,可让您同时查看界面的 Design 视图和 Code 视图。在编辑器窗口的右上角,现在提供三个按钮 ,可用于在视图选项之间切换以启用相应视图:
- 如需启用拆分视图,请点击 Split 图标 。
- 如需启用 XML 源代码视图,请点击 Source 图标 。
- 如需启用设计视图,请点击 Design 图标 。
-
设计编辑器中的缩放和平移控件已移至编辑器窗口右下角的浮动面板。
如需了解详情,请参阅使用布局编辑器构建界面。
颜色选择器 Resource 标签页
为了帮助您在使用 XML 或设计工具中的颜色选择器时快速更新应用中的颜色资源值,Android Studio 现在会为您填充颜色资源值。
Resource Manager
Resource Manager 包含以下更新:
- Resource Manager 现在支持大多数资源类型。
- 在搜索资源时,Resource Manager 现在会显示所有项目模块中的搜索结果。以前,该工具只会返回已选定模块中的搜索结果。
- 借助过滤器按钮,您可以查看本地相关模块、外部库和 Android 框架中的资源。您还可以使用该过滤器来显示主题背景属性。
- 现在,您可以在导入过程中点击资源上方的文本框来重命名相应资源。
如需了解详情,请参阅使用 Resource Manager 管理应用的界面资源。
Android Gradle 插件的更新
最新版 Android Gradle 插件包含许多更新,其中包括针对构建速度的优化、对 Maven 发布插件的支持以及对视图绑定的支持。如需了解详情,请参阅完整的版本说明。
视图绑定
通过视图绑定,您能够为每个 XML 布局文件生成绑定类,从而更轻松地编写可与视图交互的代码。这些类包含对在相应布局中具有 ID 的所有视图的直接引用。
由于视图绑定取代了 findViewById()
,因此可以消除因视图 ID 无效而引发 null 指针异常的风险。
如需启用视图绑定,您需要使用 Android Gradle 插件 3.6.0 或更高版本,并在每个模块的 build.gradle
文件中添加以下代码:
Groovy
android { buildFeatures.viewBinding = true }
Kotlin
android { buildFeatures.viewBinding = true }
Apply Changes
您现在可以添加一个类,然后将该代码更改部署到正在运行的应用,方法是点击 Apply Code Changes 或 Apply Changes and Restart Activity。
如需详细了解这两项操作之间的区别,请参阅 Apply Changes。
重构菜单选项以启用免安装应用支持
现在,您可以在创建应用项目后随时使基础模块支持免安装体验,具体操作步骤如下:
- 从菜单栏中依次选择 View > Tool Windows > Project,打开 Project 面板。
- 右键点击基础模块(通常名为“app”),然后依次选择 Refactor > Enable Instant Apps Support。
- 在出现的对话框中,从下拉菜单中选择基础模块。
- 点击 OK。
注意:已移除 Create New Project 向导中用于使基础应用模块支持免安装体验的选项。
如需了解详情,请参阅 Google Play 免安装体验概览。
在 APK 分析器中对类和方法字节码进行去混淆处理
使用 APK 分析器检查 DEX 文件时,您可以对类和方法字节码进行去混淆处理,操作步骤如下所示:
- 从菜单栏中依次选择 Build > Analyze APK。
- 在出现的对话框中,转到您要检查的 APK 并选择该 APK。
- 点击 Open。
- 在 APK 分析器中,选择您要检查的 DEX 文件。
- 在 DEX 文件查看器中,为您要分析的 APK 加载 ProGuard 映射文件。
- 右键点击您要检查的类或方法,然后选择 Show bytecode。
原生工具
以下更新支持 Android Studio 中的原生 (C/C++) 开发。
Kotlin 支持
Android Studio 中的以下 NDK 功能以前在 Java 中受支持,现在也在 Kotlin 中受支持:
-
从 JNI 声明前往 C/C++ 中的对应实现函数。只需将鼠标悬停在托管源代码文件中的行号附近的 C 或 C++ 项标记上方,即可查看此映射。
-
自动为 JNI 声明创建存根实现函数。首先定义 JNI 声明,然后输入“jni”或 C/C++ 文件中的方法名称进行激活。
-
未使用的原生实现函数会在源代码中突出显示为警告。缺少实现的 JNI 声明也会突出显示为错误。
-
如果您重命名(重构)某个原生实现函数,所有对应的 JNI 声明都会更新。重命名 JNI 声明可更新原生实现函数。
-
对隐式绑定的 JNI 实现进行签名检查。
其他关于 JNI 的改进
Android Studio 中的代码编辑器现在支持更顺畅的 JNI 开发流程,包括改进后的类型提示、自动补全、检查和代码重构。
针对原生库重新加载 APK {:#3.6-reload-apk}
当项目中的 APK 在 Android Studio 之外更新时,您不再需要创建新项目。Android Studio 会检测 APK 中的更改,并为您提供重新导入 APK 的选项。
附加纯 Kotlin APK 源代码
现在,当您对预构建的 APK 进行性能分析和调试时,可以附加纯 Kotlin 外部 APK 源代码。如需了解详情,请参阅附加 Kotlin/Java 源代码。
内存分析器中的泄漏检测
在内存分析器中分析堆转储时,您现在可以过滤 Android Studio 认为可能表明应用中的 Activity
和 Fragment
实例存在内存泄漏的分析数据。
过滤器显示的数据类型包括:
-
已销毁但仍被引用的
Activity
实例。 -
没有有效的
FragmentManager
但仍被引用的Fragment
实例。
附加纯 Kotlin APK 源代码
现在,当您对预构建的 APK 进行性能分析和调试时,可以附加纯 Kotlin 外部 APK 源代码。如需了解详情,请参阅附加 Kotlin/Java 源代码。
内存分析器中的泄漏检测
在内存分析器中分析堆转储时,您现在可以过滤 Android Studio 认为可能表明应用中的 Activity
和 Fragment
实例存在内存泄漏的分析数据。
过滤器显示的数据类型包括:
-
已销毁但仍被引用的
Activity
实例。 -
没有有效的
FragmentManager
但仍被引用的Fragment
实例。
在某些情况(如以下情况)下,过滤器可能会产生误报:
- 已创建
Fragment
,但尚未使用它。 - 正在缓存
Fragment
,但它不是FragmentTransaction
的一部分。
如需使用此功能,请先捕获堆转储或将堆转储文件导入 Android Studio。如需显示可能泄漏内存的 fragment 和 activity,请勾选内存分析器的堆转储窗格中的 Activity/Fragment Leaks 复选框。
模拟器
Android Studio 3.6 可帮助您利用 Android 模拟器 29.2.7 及更高版本中包含的多项更新,如下所述。
改进了位置信息支持
Android 模拟器 29.2.7 及更高版本为模拟 GPS 坐标和路线信息提供了额外的支持。打开模拟器的 Extended controls 时,您会发现“Location”标签页下的选项现在位于 Single points 和 Routes 这两个标签页下。
Single points
在 Single points 标签页中,您可以使用 Google 地图 WebView 搜索地图注点,就像在手机或浏览器中使用 Google 地图一样。当您在地图上搜索或点击某个地点时,可以通过选择地图底部附近的“Save point”来保存该地点。您保存的所有地点都会列在 Extended controls 窗口的右侧。
如需将模拟器位置设置为您在地图上选择的地点,请点击 Extended controls 窗口右下角附近的 Set location 按钮。
。
Routes
与 Single points 标签页类似,Routes 标签页提供的 Google 地图 WebView 可用于在两个或多个地点之间创建路线。如需创建并保存路线,请执行以下操作:
- 在地图视图中,使用文本字段搜索路线中的第一个目的地。
- 从搜索结果中选择地点。
- 选择 Navigate 按钮。
- 从地图中选择路线的出发地。
- (可选)点击 Add destination 可向路线添加其他地点。
- 点击地图视图中的 Save route 以保存路线。
- 指定路线的名称,然后点击 Save。
如需让模拟器模拟您保存的路线,请从 Saved routes 列表中选择路线,然后点击 Extended controls 窗口右下角附近的 Play route。如需停止模拟,请点击 Stop route。
。
如需继续让模拟器模拟指定的路线,请打开 Repeat playback 旁边的开关。如需更改模拟器模拟指定路线的速度,请从 Playback speed 下拉菜单中选择一个选项。
多显示屏支持
借助 Android 模拟器,您现在可以将应用部署到多个显示屏,这些显示屏支持自定义尺寸,而且可以帮助您测试支持多窗口模式和多显示屏的应用。在虚拟设备运行时,您最多可以添加两个额外的屏幕,如下所示:
-
打开 Extended controls,然后前往 Displays 标签页。
-
如需添加其他屏幕,请点击 Add secondary display。
-
从 Secondary displays 下的下拉菜单中,执行以下任一操作:
-
选择一个预设的宽高比
-
选择 custom,然后为自定义屏幕设置高度、宽度和 dpi。
-
(可选)点击 Add secondary display 可添加第三个屏幕。
-
点击 Apply changes,将指定的屏幕添加到正在运行的虚拟设备。
适合 Android Automotive OS 的新虚拟设备和项目模板
使用 Android Studio 创建新项目时,您现在可以从 Create New Project 向导的 Automotive 标签页中选择三个模板:No Activity、Media service 和 Messaging service。对于现有项目,您可以添加对 Android Automotive 设备的支持,方法是从菜单栏中依次选择 File > New > New Module,然后选择 Automotive Module。然后,Create New Module 向导会引导您使用其中一个 Android Automotive 项目模板创建新模块。
。
此外,您现在可以为 Android Automotive OS 设备创建 Android 虚拟设备 (AVD),方法是在 Virtual Device Configuration 向导中的Automotive 标签页下选择以下其中一个选项。
- Polestar 2:创建一个可模拟 Polestar 2 音响主机的 AVD。
- Automotive (1024p landscape):创建一个适用于通用 1024 x 768 像素 Android Automotive 音响主机的 AVD。
。
可恢复的 SDK 下载
使用 SDK 管理器下载 SDK 组件和工具时,Android Studio 现在允许您恢复已中断的下载(例如,由于网络问题),而不是从头开始重新下载。当互联网连接不可靠时,此增强功能对大量数据的下载(如 Android 模拟器或系统映像)特别有用。
此外,如果您在后台运行 SDK 下载任务,现在可以使用状态栏中的控件暂停或恢复下载。
Win32 版本已废弃
Windows 32 位版本的 Android Studio 自 2019 年 12 月之后不再接收更新,自 2020 年 12 月之后也将不再获得支持。您可以继续使用 Android Studio。但是,如需接收其他更新,请将工作站升级为 64 位版本的 Windows。
如需了解详情,请参阅关于废弃 Windows 32 位版本的博文
用于优化 Gradle 同步时间的新选项
在之前的版本中,Android Studio 会在 Gradle 同步期间检索所有 Gradle 任务的列表。对于大型项目来说,检索任务列表可能会导致同步时间较长。
如需提高 Gradle 同步性能,请依次选择 File > Settings > Experimental,然后选择“Do not build Gradle task list during Gradle sync”。
启用此选项后,Android Studio 在同步期间便不会构建任务列表,这样可以更快地完成 Gradle 同步并提高界面响应能力。请注意,当 Android Studio 跳过构建任务列表时,Gradle 面板中的任务列表为空,并且 build 文件中的任务名称自动补全功能不起作用。
用于切换 Gradle 离线模式的新位置
如需启用或停用 Gradle 离线模式,请先从菜单栏中依次选择 View > Tool Windows > Gradle。然后,在 Gradle 窗口顶部附近,点击 Toggle Offline Mode 图标 。
IntelliJ IDEA 2019.2
核心 Android Studio IDE 已通过 2019.2 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进。
如需详细了解版本 2019.2 累积的其他 IntelliJ 版本的改进,请参阅以下页面:
社区贡献者
感谢所有帮助我们发现 bug 及通过其他方式改进 Android Studio 3.6 的社区贡献者。特别要感谢以下报告 bug 的人士:
|
|
|
3.5(2019 年 8 月)
Android Studio 3.5 是一个主要版本,同时也是 Project Marble 计划的成果。从 Android Studio 3.3 版本开始,Project Marble 计划涵盖了多个版本,着力改进 Android Studio 的三个主要方面:系统运行状况、功能完善以及 bug 修复。
如需详细了解这些更新以及其他 Project Marble 更新,请参阅 Android 开发者博文或以下几个部分。
另外,我们还要感谢所有为此版本提供过帮助的社区贡献者。
3.5.3(2019 年 12 月)
此次要更新修正了多个 bug 并进行了多项性能改进。
3.5.2(2019 年 11 月)
此次要更新修正了多个 bug 并进行了多项性能改进。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
3.5.1(2019 年 10 月)
此次要更新修正了多个 bug 并进行了多项性能改进。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
Project Marble:系统运行状况
本部分将介绍 Android Studio 3.5 中旨在改善系统运行状况的更改。
推荐内存设置
现在,如果 Android Studio 检测到您可以通过增加操作系统应该为 Android Studio 进程(例如核心 IDE、Gradle 守护程序和 Kotlin 守护程序)分配的 RAM 上限来提高性能,它会通知您。您可以通过点击通知中的操作链接来接受推荐设置,也可以通过以下方式手动调整这些设置:依次选择 File > Settings(或者,在 macOS 上依次选择 Android Studio > Preferences),然后在 Appearance & Behavior > System Settings 下找到 Memory Settings 部分。如需了解详情,请参阅最大堆大小。
内存使用情况报告
Android Studio 中的内存问题有时难以重现和报告。为了解决此问题,您可以在 Android Studio 中从菜单栏依次点击 Help > Analyze Memory Usage,生成内存使用情况报告。执行此操作后,Android Studio 会在本地清理掉数据中的个人信息,然后询问您是否希望将数据发送给 Android Studio 团队以帮助识别内存问题的来源。如需了解详情,请参阅运行内存使用情况报告。
Windows:防病毒文件 I/O 优化
Android Studio 现在会自动检查某些项目目录是否已从实时防病毒扫描中排除。当能够进行调整以提高构建性能时,Android Studio 会通知您并提供有关如何优化防病毒配置的说明。如需了解详情,请参阅最大限度地降低防病毒软件对构建速度的影响。
Project Marble:功能完善
本部分将介绍 Android Studio 3.5 中旨在改进现有功能的更改。
Apply Changes
借助 Apply Changes,您可以将代码和资源更改推送给正在运行的应用,而无需重启应用(在某些情况下,甚至无需重启当前的 activity)。Apply Changes 实现了一种全新的方法来保持应用的状态。与重写 APK 字节码的 Instant Run 不同,Apply Changes 会利用 Android 8.0(API 级别 26)或更高版本中支持的运行时插桩,实时地重新定义类。
如需了解详情,请参阅 Apply Changes。
应用部署流程
Android Studio 有一个新的下拉菜单,可让您快速选择要将应用部署到哪个设备。此菜单还包含一个新选项,可让您一次在多个设备上运行您的应用。
改进了 Gradle 同步和缓存检测功能
现在,Android Studio 能够更好地检测 Gradle 在减少其硬盘消耗时何时定期清除构建缓存。在以前的版本中,此状态会导致 Android Studio 报告缺少依赖项,并导致 Gradle 同步失败。现在,Android Studio 只需根据需要下载依赖项,以确保成功完成 Gradle 同步。
改进了构建错误输出
Build 窗口现在针对以下构建流程改进了错误报告,例如提供指向文件的链接以及所报告错误对应的行号:
- AAPT 编译和链接
- R8 和 ProGuard
- Dexing
- 资源合并
- XML 文件解析
- Javac、Kotlinc 和 CMake 编译
项目升级
改善了更新体验,提供了更多信息和操作来帮助您更新 Android Studio 和 Android Gradle 插件。例如,有更多的同步和构建错误会包含帮助您在更新时减少错误的操作。
请务必注意,您可以独立于 Android Gradle 插件等其他组件更新 Android Studio。因此,您可以在新版本推出后安全地更新 Android Studio,并在以后更新其他组件。
布局编辑器
Android Studio 3.5 对布局可视化、管理和互动功能进行了多项改进。
使用 ConstraintLayout
时,Attributes 面板中新的 Constraints 部分会列出所选界面组件的约束关系。您可以从设计图面或约束列表中选择一个约束条件,突出显示这两个区域中的约束条件。
同样,您现在可以选择某个约束条件并按 Delete
键,删除相应约束条件。您还可以按住 Control
键(在 macOS 上,按住 Command
)并点击约束条件定位点来删除相应约束条件。请注意,当您按住 Control
或 Command
键并将鼠标悬停在定位点上时,任何关联的约束条件都会变成红色,表示您可以点击以将其删除。
选择视图后,您可以点击 Attributes 面板的 Constraint Widget 部分的任何一个 + 图标来创建约束条件,如下图所示。当您创建新的约束条件时,布局编辑器现在会选择并突出显示该约束条件,为您刚刚添加的约束条件提供即时视觉反馈。
在创建约束条件时,布局编辑器现在只会显示您可以约束的符合条件的定位点。以前,布局编辑器会突出显示所有视图上的所有定位点,无论您是否可以约束它们。此外,蓝色叠加层现在会突出显示约束条件的目标。这种突出显示在尝试约束与另一个组件重叠的组件时特别有用。
除了上述更新之外,Android Studio 3.5 还包含布局编辑器方面的以下改进:
- 现在,您可以使用约束条件 widget 和默认外边距下拉菜单将尺寸资源用于外边距。
- 在布局编辑器工具栏中,确定设计图面大小的设备列表已经更新。此外,调整大小时的贴靠行为已得到改进,设计图面上的调整大小手柄现在始终可见。调整大小时,系统会显示可显示常见设备尺寸的新叠加层。
- Layout Editor 采用了新的配色方案,可改进组件、文本和约束条件之间的一致性并降低它们之间的对比度。
- 蓝图模式现在包含对某些文本未显示的组件的文本支持。
如需详细了解这些更改,请参阅 Android Studio Project Marble:布局编辑器。
数据绑定
除了为数据绑定添加增量注解处理支持之外,Android Studio 还改进了在 XML 中创建数据绑定表达式时智能编辑器的功能和性能。
改进了对 C/C++ 项目的支持
Android Studio 3.5 包含一些更改,可以改进对 C/C++ 项目的支持。
针对单个变体同步的“Build Variants”面板改进
现在,您可以在 Build Variants 面板中同时指定活动 build 变体和活动 ABI。此功能简化了每个模块的 build 配置,还可以提高 Gradle 同步性能。
如需了解详情,请参阅更改 build 变体。
NDK 并排版本
现在,您可以并排使用 NDK 的多个版本。此功能可让您更灵活地配置项目,例如,如果项目在同一计算机上使用了不同版本的 NDK。
如果您的项目使用 Android Gradle 插件 3.5.0 或更高版本,您还可以指定项目中每个模块应使用的 NDK 版本。您可以使用此功能来创建可重现的 build,并减少 NDK 版本与 Android Gradle 插件不兼容的问题。
如需了解详情,请参阅安装及配置 NDK、CMake 和 LLDB。
支持 ChromeOS
Android Studio 现已正式支持 ChromeOS 设备,例如 HP Chromebook x360 14、Acer Chromebook 13/Spin 13 以及其他设备,具体可参阅系统要求。如需开始使用,请在兼容的 ChromeOS 设备上下载 Android Studio,然后按照安装说明操作。
注意:ChromeOS 上的 Android Studio 目前仅支持将应用部署至已连接的硬件设备。如需了解详情,请参阅在硬件设备上运行应用。
按条件分发功能模块
通过按条件分发,您可以针对将在应用安装过程中自动下载的功能模块设置特定的设备配置要求。例如,您可以配置包含增强现实 (AR) 功能的功能模块,其仅供支持 AR 功能的设备在安装应用时可用。
此分发机制目前支持根据以下设备配置来控制模块在应用安装时的下载情况:
- 设备硬件和软件功能,包括 OpenGL ES 版本
- 用户所在国家/地区
- API 级别
如果设备不满足您指定的所有要求,相应模块便不会在应用安装时下载。不过,您的应用以后可以使用 Play Core 库来请求按需下载此模块。如需了解详情,请参阅配置按条件分发。
IntelliJ IDEA 2019.1
核心 Android Studio IDE 已通过 2019.1 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进,例如主题自定义。
Android Studio 附带的最后一个 IntelliJ 版本为 2018.3.4。如需详细了解此版本 Android Studio 累积的其他 IntelliJ 版本的改进,请参阅以下 bug 修复更新:
- IntelliJ IDEA 2018.3.6{: .external-link}
- IntelliJ IDEA 2018.3.5{: .external-link}
Android Gradle 插件 3.5.0 更新
如需了解 Android Gradle 插件 3.5.0 中的新变化,例如针对增量注解处理和可缓存单元测试的改进支持,请参阅其版本说明。
社区贡献者
感谢所有帮助我们发现 bug 及通过其他方式改进 Android Studio 3.5 的社区贡献者。特别要感谢以下报告 P0 和 P1 bug 的人士:
|
|
|
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 在项目同步时所解析的那样),具体步骤如下:
- 在 PSD 的左侧窗格中,选择 Dependencies。
- 在 Modules 窗格中,选择您想要检查已解析的依赖项的模块。
- 在 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,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。
请注意,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 Editor 现在支持所有参数类型
现在,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 组件所需的依赖项。
3.3(2019 年 1 月)
Android Studio 3.3 是一个主要版本,包含各种新功能和改进。
3.3.2(2019 年 3 月)
此次要更新修正了多个 bug 并进行了多项性能改进。如需查看重要 bug 修复列表,请参阅版本更新博客上的相关博文。
3.3.1(2019 年 2 月)
此次要更新修正了多个 bug 并进行了多项性能改进。
IntelliJ IDEA 2018.2.2
核心 Android Studio IDE 已通过 2018.2.2 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进。
Android Gradle 插件更新
如需了解 Android Gradle 插件中的新变化,请参阅其版本说明。
Navigation Editor
借助 Navigation Editor,您可以使用 Navigation 架构组件快速直观呈现导航内容并将其构建到您的应用中。
如需了解详情,请参阅使用 Navigation 架构组件实现导航。
删除未使用的 Android Studio 目录
当您首次运行 Android Studio 的主要版本时,它会查找包含缓存、设置、索引和日志的目录,以确定找不到对应安装内容的 Android Studio 的版本。然后,Delete Unused Android Studio Directories 对话框中会显示这些未使用目录的位置、大小和最后修改时间,并提供删除它们的选项。
Android Studio 考虑删除的目录如下所示:
- Linux:
~/.AndroidStudio[Preview]X.Y
- Mac:
~/Library/{Preferences, Caches, Logs, Application Support}/AndroidStudio[Preview]X.Y
- Windows:
%USER%.AndroidStudio[Preview]X.Y
lint 方面的改进
从 Gradle 调用时,lint 的运行速度明显加快 - 对于较大的项目,lint 的运行速度最多可提高四倍。
“Create New Project”向导
Create New Project 向导具有全新外观,并且包含有助于简化新 Android Studio 项目创建过程的更新。
如需了解详情,请参阅创建项目。
分析器更新
Android Studio 3.3 包含对多个分析器的更新。
改进了性能
根据用户反馈,使用性能分析器时的渲染性能得到了极大的改善。请继续提供反馈,特别是在您依旧看到性能问题时。
性能分析器内存分配跟踪选项
为了在进行性能分析时提高应用性能,内存分析器现在会默认定期对内存分配进行采样。如果需要,在搭载 Android 8.0(API 级别 26)或更高版本的设备上进行测试时,您可以使用 Allocation Tracking 下拉菜单来更改此行为。
您可以从 Allocation Tracking 下拉菜单中选择以下模式:
-
Full:捕获所有对象内存分配。请注意,如果您有一个分配了大量对象的应用,则可能会在进行性能剖析时遇到重大性能问题。
-
Sampled:捕获对象内存分配的周期性采样。这是默认行为,在进行性能剖析时对应用性能的影响较小。对于在短时间内分配大量对象的应用,您可能会遇到一些性能问题。
-
Off:关闭内存分配。如果未选择此选项,系统会在记录 CPU 时自动启用此模式,然后在记录完成后恢复先前的设置。您可以在 CPU 记录配置对话框中更改此行为。
跟踪会同时影响 Java 对象和 JNI 引用。
检查帧渲染数据
在 CPU 性能分析器中,您现在可以检查 Java 应用在主界面线程和 RenderThread 上渲染每个帧所需的时间。在调查会导致界面卡顿和帧速率偏低的瓶颈时,此数据可能很有用。例如,每个用时超过 16 毫秒才能保持顺畅帧速率的帧都以红色显示。
如需查看帧渲染数据,请使用支持您跟踪系统调用的配置来记录轨迹。记录轨迹后,在 FRAMES 部分下沿记录时间轴查找每个帧的相关信息,如下所示。
如需详细了解如何调查和解决帧速率问题,请参阅渲染速度缓慢。
事件时间轴中的 fragment
事件时间轴现在会显示附加和分离 fragment 的时间。此外,将鼠标悬停在某个 fragment 上时,工具提示会显示该 fragment 的状态。
在网络性能分析器中查看连接负载的格式化文本
以前,网络性能分析器仅显示来自连接负载的原始文本。Android Studio 3.3 现在会默认格式化某些文本类型,包括 JSON、XML 和 HTML。在 Response 和 Request 标签页中,点击 View Parsed 链接可显示格式化文本,点击 View Source 链接可显示原始文本。
如需了解详情,请参阅利用网络性能分析器检查网络流量。
自动下载 SDK 组件
当您的项目需要 SDK 平台、NDK 或 CMake 中的 SDK 组件时,Gradle 现在会尝试自动下载所需的软件包,前提是您之前已使用 SDK 管理器接受了所有相关的许可协议。
如需了解详情,请参阅使用 Gradle 自动下载缺失的软件包。
对 Clang-Tidy 的支持
Android Studio 现在支持使用 Clang-Tidy 对包含原生代码的项目进行静态代码分析。如需启用对 Clang-Tidy 的支持,请将 NDK 更新为 r18 或更高版本。
然后,您可以启用或重新启用检查,方法是打开 Settings 或 Preferences 对话框,然后依次选择 Editor > Inspections > C/C++ > General > Clang-Tidy。在 Settings 或 Preferences 对话框中选择此检查时,您还可以在最右侧面板的 Option 部分下看到已启用和已停用的 Clang-Tidy 检查列表。如需启用其他检查,请将其添加到列表中,然后点击 Apply。
如需使用其他选项配置 Clang-Tidy,请点击 Configure Clang-Tidy Checks Options,然后在随即打开的对话框中添加这些选项。
移除了针对 C++ 自定义的选项
已从 Customize C++ Support 对话框中移除以下选项:
- Exceptions Support (-fexceptions)
- Runtime Type Information Support (-ftti)
系统已对通过 Android Studio 创建的所有项目启用相应行为。
CMake 版本 3.10.2
SDK 管理器现在包含 CMake 版本 3.10.2。请注意,Gradle 仍会默认使用版本 3.6.0。
如需为 Gradle 指定要使用的 CMake 版本,请将以下内容添加到模块的 build.gradle
文件中:
android {
...
externalNativeBuild {
cmake {
...
version "3.10.2"
}
}
}
如需详细了解如何在 build.gradle
中配置 CMake,请参阅手动配置 Gradle。
用于指定最低 CMake 版本的新“+”语法
在主模块的 build.gradle
文件中指定 CMake 的版本时,您现在可以附加“+”以匹配 CMake cmake_minimum_required()
命令的行为。
警告:不建议将“+”语法与其他 build 依赖项搭配使用,因为动态依赖项可能会导致意外的版本更新和难以解析版本差异。
Android App Bundle 现在支持免安装应用
Android Studio 现在允许您构建 Android App Bundle,并且完全支持 Google Play 免安装体验。换句话说,您现在可以通过单个 Android Studio 项目同时构建和部署安装式应用和免安装体验,并将其纳入单个 Android App Bundle 中。
如果您要使用 Create New Project 对话框创建新的 Android Studio 项目,请确保选中 Configure your project > This project will support instant apps 旁边的复选框。然后,Android Studio 会像往常一样创建新的应用项目,但会在清单中包含以下属性,以便向应用的基础模块添加免安装应用支持:
<manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
<dist:module dist:instant="true" />
...
</manifest>
然后,您可以创建支持免安装体验的功能模块,方法是从菜单栏中依次选择 File > New > New Module,然后从 Create New Module 对话框中选择 Instant Dynamic Feature Module。请注意,创建此模块也会使应用的基本模块支持免安装体验。
如需将应用作为免安装应用部署到本地设备,请修改您的运行配置,然后选中 General > Deploy as instant app 旁边的复选框。
单变体项目同步
将项目与 build 配置同步,是让 Android Studio 了解项目结构的重要步骤。不过,对于大型项目来说,此过程可能非常耗时。如果您的项目使用了多个 build 变体,那么您现在可以限定仅同步当前所选的变体,从而优化项目同步操作。
您需要结合使用 Android Studio 3.3 或更高版本与 Android Gradle 插件 3.3.0 或更高版本,才能启用此优化。满足这些要求后,Android Studio 会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用此优化。
如需手动启用此优化,请依次点击 File > Settings > Experimental > Gradle(在 Mac 上,请依次点击 Android Studio > Preferences > Experimental > Gradle),然后选中 Only sync the active variant 复选框。
注意:此优化目前支持仅包含 Java 编程语言的项目。例如,如果 Android Studio 在您的项目中检测到 Kotlin 代码或 C++ 代码,那么 Android Studio 不会自动启用此优化,您也不应手动启用此优化。
如需了解详情,请参阅启用单变体项目同步。
提供快速反馈
如果您已选择分享使用情况统计信息以帮助改进 Android Studio,则会在 Android Studio 窗口底部的状态栏中看到以下两个新图标:
只需点击最能代表您目前使用 Android Studio 的体验的图标来提供反馈即可。在您执行此操作后,Android Studio 会发送使用情况统计信息,让 Android Studio 团队能够更好地了解您的感受。在某些情况下,例如,当您表示在使用 Android Studio 时有不好的体验时,您将有机会提供进一步的反馈。
如果尚未启用分享使用情况统计信息,您可以通过以下步骤予以启用:打开 Settings 对话框(在 Mac 上,则打开 Preferences),依次选择 Appearance & Behavior > System Settings > Data Sharing,然后选中 Send usage statistics to Google。
3.2(2018 年 9 月)
Android Studio 3.2 是一个主要版本,包含各种新功能和改进。
3.2.1(2018 年 10 月)
此 Android Studio 3.2 更新进行了下列更改和修复:
- 捆绑的 Kotlin 版本现为 1.2.71。
- 默认的构建工具版本现为 28.0.3。
- 在导航库中,参数类型已从
type
重命名为argType
。 - 下列错误已得到修复:
- 使用数据绑定库时,变量名称带有下划线会导致编译错误。
- CMake 会导致 IntelliSense 和其他 CLion 功能失败。
- 添加
SliceProvider
会导致在未使用androidx.*
库的项目出现编译错误。 - 一些 Kotlin 单元测试没有运行。
- 数据绑定问题会导致
PsiInvalidElementAccessException
。 <merge>
元素有时会导致布局编辑器崩溃。
3.2.0 已知问题
注意:以下问题已在 Android Studio 3.2.1 中得到解决
我们强烈建议您不要使用 Kotlin 版本 1.2.70。
Kotlin 版本 1.2.61 修复了一个可能会导致 Android Studio 挂起的错误,但 Kotlin 1.2.70 不包含此修复。
但是,Kotlin 版本 1.2.71 及更高版本确实包含此修复。
-
虽然您通常不需要指定构建工具版本,但在使用 Android Gradle 插件 3.2.0 时(
renderscriptSupportModeEnabled
设为true
),您需要在每个模块的build.gradle
文件中包含以下内容:android.buildToolsVersion "28.0.3"
什么是全新的 Assistant
全新的 Assistant 会通知您 Android Studio 中的最新变化。
当您在全新安装或更新后启动 Android Studio 时,如果系统检测到有新信息需要显示,Assistant 便会打开。您也可以依次选择 Help > What's new in Android Studio 来打开 Assistant。
Android Jetpack
Android Jetpack 提供各种组件、工具和指南以消除重复性任务,来帮助加速 Android 开发,让您能够更快速、更轻松地构建高品质的可测试应用。Android Studio 进行了以下更新以支持 Jetpack。如需了解详情,请参阅 Jetpack 文档。
Navigation Editor
新的 Navigation Editor 与 Android Jetpack 的 Navigation 组件集成,提供了用于创建应用导航结构的图形视图。Navigation Editor 简化了应用内目标之间的导航设计和实现。
在 Android Studio 3.2 中,Navigation Editor 是一项实验性功能。如需启用 Navigation Editor,请依次点击 File > Settings(在 Mac 上,则依次点击 Android Studio > Preferences),选择左侧窗格中的 Experimental 类别,选中 Enable Navigation Editor 旁边的复选框,然后重启 Android Studio。
如需了解详情,请参阅 Navigation Editor 文档。
AndroidX 迁移
作为 Jetpack 的一部分,我们正在将 Android 支持库迁移到使用 androidx
命名空间的全新 Android 扩展库。如需了解详情,请参阅 AndroidX 概览。
Android Studio 3.2 利用一项新的迁移功能来帮助您完成此过程。
如需将现有项目迁移到 AndroidX,请依次选择 Refactor > Migrate to AndroidX。如果您有任何尚未迁移到 AndroidX 命名空间的 Maven 依赖项,Android Studio 构建系统还会自动转换这些项目依赖项。
Android Gradle 插件提供以下可在 gradle.properties
文件中设置的全局标记:
android.useAndroidX
:当设为true
时,此标记表示您想立即开始使用 AndroidX。如果缺少此标记,Android Studio 会假定此标记已设为false
。android.enableJetifier
:设为true
时,此标记表示您希望获得工具支持(通过 Android Gradle 插件),以自动转换现有的第三方库,就像它们是为 AndroidX 而编写的一样。如果缺少此标记,Android Studio 会假定此标记已设为false
。
当您使用 Migrate to AndroidX 命令时,这两个标记都会设为 true
。
如果您想立即开始使用 AndroidX 库,而无需转换现有的第三方库,您可以将 android.useAndroidX
标记设为 true
并将 android.enableJetifier
标记设为 false
。
Android App Bundle
Android App Bundle 是一种全新的上传格式,其中包含您应用的所有经过编译的代码和资源,但 APK 生成及签名则延后到 Google Play 商店来完成。
Google Play 新推出的应用服务模式会使用您的 App Bundle 针对每位用户的设备配置生成并提供经过优化的 APK,因此他们只需下载运行您的应用所需的代码和资源。您无需再构建、签署和管理多个 APK,而用户也可以下载经过进一步优化的更小的下载文件包。
此外,您还可以向应用项目添加功能模块,并将其包含在 App Bundle 中。然后,用户就可以按需下载和安装应用的功能。
如需构建软件包,请依次选择 Build > Build Bundle(s)/APK(s) > Build Bundle(s)。
如需了解详情,包括与构建和分析 Android App Bundle 有关的说明,请参阅 Android App Bundle。
布局编辑器中的示例数据
许多 Android 布局都包含运行时数据,而这可能导致在应用开发的设计阶段难以以图形的方式呈现布局的外观和风格。现在,您可以轻松地在填充有示例数据的布局编辑器中查看视图预览。在添加视图时, 按钮会显示在设计窗口中的视图下方。点击此按钮即可设置设计时视图属性。您可以从各种各样的示例数据模板中选择,并指定用于填充相应视图的示例项目的数量。
如需尝试使用示例数据,请将 RecyclerView
添加到新布局,点击视图下方的设计时属性按钮 ,然后从示例数据模板的轮播界面中选择一个选项。
Slice
Slice 提供了一种全新的方式,让您能够将应用的部分功能嵌入到 Android 上的其他界面中。例如,借助 Slice,您可以在 Google 搜索建议中显示应用功能和内容。
Android Studio 3.2 不但包含一个内置模板,可以帮助您使用新的 Slice 提供程序 API 来扩展您的应用,而且还包含新的 lint 检查功能,可以确保您在构建 Slice 时遵循最佳实践。
要开始使用,请右键点击一个项目文件夹,然后依次选择 New > Other > Slice Provider。
如需了解详情,包括如何测试 Slice 交互,请参阅 Slice 入门指南。
Kotlin 1.2.61
Android Studio 3.2 捆绑了 Kotlin 1.2.61,并且新的 Android SDK 可与 Kotlin 更好地集成。如需了解详情,请参阅 Android 开发者博客。
IntelliJ IDEA 2018.1.6
核心 Android Studio IDE 已通过 2018.1.6 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进。
Android Profiler
请试用 Android Studio 3.2 中的以下全新 Android Profiler 功能。
会话
您现在可以将性能分析器数据保存为会话,以便日后重新访问和检查。性能分析器会一直保存您的会话数据,直到您重启 Android Studio 为止。
在您记录方法轨迹或捕获堆转储后,Android Studio 会将相应数据(以及您应用的网络活动)作为单独的条目添加到当前会话,您可以轻松地在记录之间来回切换以比较数据。
System Trace
在 CPU 性能分析器中,选择新的 System Trace 配置即可检查设备的系统 CPU 和线程活动。此跟踪配置是基于 systrace
构建的,可用于调查系统级问题,例如界面卡顿。
使用此跟踪配置时,您可以使用原生跟踪 API 检测 C/C++ 代码或使用 Trace
类检测 Java 代码,从而在性能分析器时间轴上直观地标记重要代码例程。
在内存分析器中检查 JNI 引用
如果您将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备,现在可以使用内存分析器来检查应用 JNI 代码的内存分配情况。
在您的应用运行时,选择您想检查的一部分时间轴,然后从类列表上方的下拉菜单中选择 JNI heap,具体如下所示。然后,您可以像往常一样检查堆中的对象,并双击 Allocation Call Stack 标签页中的对象,以查看 JNI 引用已分配并发布到了代码中的哪些位置。
导入、导出和检查内存堆转储文件
您现在可以导入、导出和检查使用内存分析器创建的 .hprof
内存堆转储文件。
如需导入 .hprof
文件,请在性能分析器的 Sessions 窗格中点击 Start new profiler session ,然后选择 Load from file。然后,您可以像在任何其他堆转储中一样检查内存分析器中的数据。
如需保存堆转储数据以供日后查看,请使用 Sessions 窗格中 Heap Dump 条目右侧的 Export Heap Dump 按钮。在随即显示的 Export As 对话框中,使用 .hprof
文件扩展名保存文件。
在应用启动过程中记录 CPU 活动
您可以在应用启动过程中记录 CPU 活动,具体操作如下所示:
- 从主菜单中依次选择 Run > Edit Configurations。
- 在所需运行配置的 Profiling 标签页下,选中 Start recording a method trace on startup 旁边的方框。
- 从下拉菜单中选择要使用的 CPU 记录配置。
- 依次选择 Run > Profile,将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备。
导出 CPU 轨迹
在您使用 CPU 性能分析器记录 CPU 活动后,您可以将相应数据导出为 .trace
文件,以便与他人共享或日后进行检查。
如需在记录 CPU 活动后导出轨迹,请执行以下操作:
- 右键点击您想从 CPU 时间轴中导出的记录。
- 从下拉菜单中选择 Export trace。
- 前往您想保存文件的位置,然后点击 Save。
导入和检查 CPU 跟踪文件
您现在可以导入和检查使用 Debug API 或 CPU 性能分析器创建的 .trace
文件(目前,您无法导入系统跟踪记录)。
如需导入跟踪文件,请在分析器的 Sessions 窗格中点击 Start new profiler session 图标 ,然后选择 Load from file。然后,您可以按照与往常相似的方式检查 CPU 性能分析器中的数据,但以下情况例外:
- CPU 活动未显示在 CPU 时间轴上。
- 线程 activity 时间轴仅显示可在哪里获取各线程的轨迹数据,并不显示实际线程状态(例如正在运行、等待中或休眠中)。
使用 Debug API 记录 CPU 活动
现在,您可以使用 Debug API 检测您的应用,以便开始和停止在 CPU 性能分析器中记录 CPU 活动。在您将应用部署到某个设备后,性能分析器会在您的应用调用 startMethodTracing(String tracePath)
时自动开始记录 CPU 活动,并会在您的应用调用 stopMethodTracing()
时停止记录。在记录使用此 API 触发的 CPU 活动时,CPU 性能分析器会将 Debug API 显示为所选的 CPU 记录配置。
能耗性能分析器
能耗性能分析器能够以图形方式显示应用的估算能耗情况,以及影响能耗的系统事件(例如唤醒锁定、闹钟和作业)。
当您在搭载 Android 8.0 (API 26) 或更高版本的已连接设备或 Android 模拟器中运行您的应用时,能耗性能分析器便会显示为 Profiler 窗口底部的新行。
点击 Energy 行即可将“Energy Profiler”视图最大化。将鼠标指针放在时间轴中的条形上方,即可查看 CPU、网络和位置信息 (GPS) 资源的能耗明细,以及相关系统事件。
影响能耗的系统事件会在 Energy 时间轴下方的 System 时间轴中指明。当您在 Energy 时间轴中选择时间范围时,事件窗格中会显示指定时间范围内的系统事件的详细信息。
如需查看某个系统事件(如唤醒锁定)的调用堆栈和其他详细信息,请在事件窗格中选择该事件。如需前往引起某个系统事件的代码,请双击调用堆栈中的相应条目。
lint 检查
Android Studio 3.2 包含许多用于 Lint 检查的新功能和经过改进的功能。
新的 lint 检查功能可帮助您查找和识别常见的代码问题,包括与潜在易用性问题有关的警告,以及与潜在安全漏洞有关的高优先级错误。
针对 Java/Kotlin 互操作性的 lint 检查
为确保 Java 代码与 Kotlin 代码之间的良好互操作性,新的 lint 检查会强制执行 Kotlin 互操作指南中所述的最佳实践。这些检查的示例包括查找是否存在可为 null 性注解、是否使用了 Kotlin 硬关键字、是否将 lambda 参数放置在最后等。
要启用这些检查,请依次点击 File > Settings(在 Mac 上,则依次点击 Android Studio > Preferences)打开 Settings 对话框,再依次选择 Editor > Inspections > Android > Lint > Interoperability > Kotlin Interoperability 部分,然后选择要启用的规则。
如需对命令行 build 启用这些检查,请在 build.gradle
文件中添加以下内容:
android {
lintOptions {
check 'Interoperability'
}
}
针对 Slice 的 lint 检查
针对 Slice 的新 lint 检查可以确保您构建 Slice 的方式正确无误。例如,如果您没有为 Slice 分配主要操作,lint 检查就会向您发出警告。
新的 Gradle 目标
借助新的 lintFix
Gradle 任务,您可以将 lint 检查建议的所有安全修正直接应用于源代码。会建议您应用安全修正的 lint 检查示例如下:SyntheticAccessor
。
元数据更新
各种元数据(例如服务投射检查)已针对 lint 检查进行更新,以便配合 Android 9(API 级别 28)使用。
如果在新变体上运行 lint,则会收到警告
lint 现在会记录与基准一起记录的变体和版本,如果您在与基准一起创建的变体以外的其他变体上运行 lint,lint 就会向您发出警告。
改进了现有 lint 检查
Android Studio 3.2 包含对现有 lint 检查的许多改进。例如,资源周期检查现在适用于更多资源类型,并且翻译检测器现在可以在编辑器中实时查找缺失的翻译。
更容易找到问题 ID
问题 ID 现在会显示在更多位置,其中包括 Inspection Results 窗口,让您可以更轻松地找到所需信息,以便通过 build.gradle
中的 lintOptions
启用或停用特定检查。
如需了解详情,请参阅通过 Gradle 配置 lint 选项。
Data Binding V2
Data Binding V2 现已默认处于启用状态,并与 V1 兼容。这意味着,如果您拥有使用 V1 编译的库依赖项,则可以将其用于使用 Data Binding V2 的项目。不过请注意,使用 V1 的项目无法利用使用 V2 编译的依赖项。
D8 脱糖
在 Android Studio 3.1 中,我们已将脱糖步骤作为一项实验性功能集成到 D8 工具中,这能够减少总体构建时间。使用 D8 进行脱糖的功能在 Android Studio 3.2 中默认处于开启状态。
新的代码压缩器
R8 是一种用于执行代码压缩和混淆的新工具,替代了 ProGuard。您只需将以下内容添加到项目的 gradle.properties
文件中,即可开始使用 R8 的预览版本:
android.enableR8 = true
更改了针对多 APK 的默认 ABI
在构建分别以不同 ABI 为目标的多个 APK 时,默认情况下,插件不会再针对以下 ABI 生成 APK:mips
、mips64
和 armeabi
。
如果您想构建以上述 ABI 为目标的 APK,必须使用 NDK r16b 或更低版本,并在 build.gradle
文件中指定这些 ABI,如下所示:
splits { abi { include 'armeabi', 'mips', 'mips64' ... } }
splits { abi { include("armeabi", "mips", "mips64") ... } }
注意:此行为更改也包含在 Android Studio 3.1 RC1 及更高版本中。
改进了针对 CMake build 文件的编辑器功能
如果您使用 CMake 将 C 和 C++ 代码添加到您的项目,则 Android Studio 现在包含经过改进的编辑器功能,可帮助您修改 CMake 构建脚本,例如:
- 语法突出显示和代码补全:Android Studio 现在会突出显示常用的 CMake 命令并提出相应的代码补全建议。此外,您只需点击某个文件,同时按 Ctrl 键(在 Mac 上,则按 Command 键)即可前往此文件所在的位置。
- 代码重新格式化:您现在可以使用 IntelliJ 的代码重新格式化选项将代码样式应用于 CMake 构建脚本。
- 安全重构:Android Studio 内置的重构工具现在还会检查您是否正在重命名或删除 CMake 构建脚本中引用的文件。
浏览外部标头文件
在以前版本的 Android Studio 中使用 Project 窗口时,您只能浏览和检查从本地项目构建的库中包含的标头文件。在此版本中,您现在还可以查看和检查导入到应用项目的外部 C/C++ 库依赖项中包含的标头文件。
如果您已在项目中添加 C/C++ 代码和库,请在主菜单中依次选择 View > Tool Windows > Project,打开 Android Studio 左侧的 Project 窗口,然后从下拉菜单中选择 Android。在 cpp 目录中,应用项目范围内的所有标头都位于各本地 C/C++ 库依赖项的 include 节点下,具体如下所示。
原生多 dex 处理默认处于启用状态
以前版本的 Android Studio 会在将应用的调试版本部署到搭载 Android API 级别 21 或更高级别的设备时启用原生 MultiDex。现在,无论您是要部署到设备,还是要构建 APK 以供发布,Gradle 的 Android 插件都会针对所有设置为 minSdkVersion=21
或更高版本的模块启用原生多 dex 处理。
已将 AAPT2 移到 Google 的 Maven 制品库中
从 Android Studio 3.2 开始,AAPT2(Android 资源打包工具 2)的来源为 Google 的 Maven 制品库。
要使用 AAPT2,请确保您的 build.gradle
文件中包含 google()
依赖项,如下所示:
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() } }
buildscript { repositories { google() // here jcenter() } dependencies { classpath("com.android.tools.build:gradle:3.2.0") } } allprojects { repositories { google() // and here jcenter() } }
新版本的 AAPT2 修正了许多问题,包括改进了在 Windows 上对非 ASCII 字符的处理。
移除了按需配置
按需配置偏好设置已从 Android Studio 中移除。
Android Studio 不再将 --configure-on-demand
参数传递给 Gradle。
ADB Connection Assistant
新的 ADB Connection Assistant 提供了逐步说明,可以帮助您通过 Android 调试桥 (ADB) 关联来设置和使用设备。
要启用此 Assistant,请依次选择 Tools > Connection Assistant。
ADB Connection Assistant 在 Assistant 面板中的一系列页面中提供了说明、上下文相关控件以及已连接设备列表。
模拟器的改进
您现在可以随时在 Android 模拟器中保存和加载 AVD(Android 虚拟设备)快照,以便快速轻松地让模拟设备返回已知状态以进行测试。在使用 AVD 管理器修改 AVD 时,您可以指定在 AVD 启动时加载哪个 AVD 快照。
用于保存、加载和管理 AVD 快照的控件现在位于模拟器的 Extended controls 窗口的 Snapshots 标签中。
如需了解详情,请参阅快照。
要详细了解模拟器中的新变化以及变更内容,请参阅模拟器版本说明。
3.1(2018 年 3 月)
Android Studio 3.1.0 是一个主要版本,包含各种新功能和改进。
3.1.4(2018 年 8 月)
此 Android Studio 3.1 更新进行了下列更改和修复:
- 捆绑的 Kotlin 版本现为 1.2.50。
- 使用
kotlin-stdlib-jdk* artifacts
(而非已废弃的kotlin-stdlib-jre*
软件工件)创建新项目。 - 对 ProGuard 规则的 R8 解析已得到改进。
- 下列错误已得到修复:
- 尝试运行 Kotlin Main 类失败,并出现错误:
"Error: Could not find or load main class..."
- R8 在执行某些优化时进入了无限循环。
- 在 Run 窗口中使用 Rerun failed tests 命令有时会错误地返回“No tests were found”消息。
- D8 未正确处理
invoke-virtual
实例,导致VerifyError
崩溃:invoke-super/virtual can't be used on private method
-
数据绑定编译器依赖于旧版本的
com.android.tools:annotations
。现在,编译器会使用来自基础项目的工具注释(如可用)。 - 使用分析器时,Android Studio 在 Fragment 过渡期间崩溃。
- 在调试包含文本框的布局时,调试器发生崩溃。
- D8 无法读取某些带有特殊字符的 ZIP 文件。
3.1.3(2018 年 6 月)
此 Android Studio 3.1 更新修复了下列 bug:
- 内存泄漏导致 Android Studio 在您使用布局编辑器后变得缓慢且无响应。此更新包含针对大多数此类问题的修复程序。我们打算很快发布另一项更新来解决额外的内存泄漏问题。
- 一些使用 D8 构建的应用在部分 Verizon Ellipsis 平板电脑上出现崩溃。
- 在搭载 Android 5.0 或 5.1(API 级别 21 或 22)的设备上,使用 D8 构建的应用的安装失败并出现
INSTALL_FAILED_DEXOPT
错误。 - 一些使用 OkHttp 库并使用 D8 构建的应用在搭载 Android 4.4(API 级别 19)的设备上出现崩溃。
- Android Studio 有时无法启动,并在类初始化期间出现
ProcessCanceledException
(对于com.intellij.psi.jsp.JspElementType
)。
3.1.2(2018 年 4 月)
此 Android Studio 3.1 更新修复了下列 bug:
- 在某些情况下,Android Studio 会在退出时无限期挂起。
-
启用 Instant Run 后,使用源代码集配置的 build 失败,并显示以下消息:
"The SourceSet name is not recognized by the Android Gradle Plugin."
- 启用 Instant Run 后,由 Run 命令触发的新 Kotlin 项目 build 失败。
- 修改
build.gradle
文件时,输入某个字符后要过很长一段时间才会在屏幕上显示该字符。 -
在一些含有大量模块或外部依赖项的项目中执行 dex 处理时,发生构建失败,并显示以下错误消息:
"RejectedExecutionException: Thread limit exceeded replacing blocked worker"
- D8 主 DEX 列表的计算方式没有考虑到一些反射调用。
此更新还包含一些更改,这些更改使得在某些情况下从 Gradle 运行 Lint 检查的速度更快。
3.1.1(2018 年 4 月)
此 Android Studio 3.1 更新修复了下列 bug:
-
在某些情况下,在 Android Studio 3.1 中首次打开在 Android Studio 3.0 中创建的项目时,Gradle-aware Make 任务已从 Run/Debug Configurations 的 Before launch 区域中移除。因此,点击 Run 或 Debug 按钮时没有构建项目,这反过来会导致使用 Instant Run 时部署错误的 APK 以及崩溃等失败情况。
为解决此问题,Android Studio 3.1.1 会将 Gradle-aware Make 任务添加到缺少此条目的项目的运行配置中。此项修改发生在首次 Gradle 同步之后的项目加载完毕时。
- 在调试包含文本框的布局时,如果启用了高级性能剖析,调试器会发生崩溃。
- 点击 Build Variants 后,Android Studio 冻结。
- AAR(Android 归档)文件被提取了两次,一次是在 Gradle 同步流程中,另一次是在 Gradle 构建流程中。
- 从 SVG 文件导入的一些矢量可绘制对象中缺少元素。
-
更新了有关废弃
compile
依赖项配置的警告,并优化了有关implementation
和api
配置的指导。要详细了解如何停止使用compile
配置,请参阅新依赖项配置的文档。
编码/IDE
IntelliJ 2017.3.3
核心 Android Studio IDE 已通过 2017.3.3 版本进行了更新,增加了 IntelliJ IDEA 中的相关改进。改进功能包括为集合与字符串提供了更好的控制流分析,改进了可为 null 性推理,添加了一些快速修复,等等。
如需了解详情,请参阅 IntelliJ IDEA 版本 2017.2 和 2017.3 的 JetBrains 版本说明,以及 bug 修复更新的 JetBrains 版本说明。
通过 Room 改进了 SQL 修改
使用 Room 数据库时,您可以利用针对 SQL 修改的多项改进:
Query
中的代码补全功能可以理解 SQL 表格(实体)、列、查询参数、别名、联接、子查询和 WITH 子句。- SQL 语法突出显示现在可以正常使用。
- 您可以右键点击 SQL 中的表格名称并对其重命名,这也会重写相应的 Java 或 Kotlin 代码(例如,包括查询的返回类型)。同样地,如果您重命名 Java 类或字段,也会让系统重写相应的 SQL 代码。
- 使用 Find usages(右键点击并从上下文菜单中选择 Find usages)时,系统会显示 SQL 用法。
- 如需前往某个 SQL 实体在 Java 或 Kotlin 代码中的声明,您可以在按住 Ctrl 键(Mac 上为 Command 键)的同时点击该实体。
如需了解如何将 SQL 与 Room 搭配使用,请参阅使用 Room 将数据保存到本地数据库。
数据绑定更新
此更新包括针对数据绑定的多项改进:
-
现在,您可以将
LiveData
对象用作数据绑定表达式中的一个可观察字段。ViewDataBinding
类现在添加了用于观察LiveData
对象的新setLifecycle()
方法。 -
ObservableField
类现在可在其构造函数中接受其他Observable
对象。 -
您可以预览数据绑定类的新增量编译器。如需详细了解这个新编译器以及启用该编译器的说明,请参阅数据绑定编译器 V2。
新编译器的好处包括:
-
Android Plugin for Gradle 会先于 Java 编译器生成
ViewBinding
类。 - 编译应用时,库会保留其生成的绑定类,而不是每次都重新生成这些类。这可以大大提高多模块项目的性能。
-
Android Plugin for Gradle 会先于 Java 编译器生成
编译器和 Gradle
D8 是默认的 DEX 编译器
D8 编译器现已默认用于生成 DEX 字节码。
这款新的 DEX 编译器可提供多项好处,包括:
- Dex 速度更快
- 内存用量更低
- 改进了代码生成功能(更好的注册表分配和更智能的字符串表格)
- 在单步调试代码时可提供更好的调试体验
除非您之前手动停用了 D8 编译器,否则无需对代码或开发工作流进行任何更改即可获得这些好处。
如果您在 gradle.properties
中将 android.enableD8
设为 false
,请删除此标记或将其设为 true
:
android.enableD8=true
如需了解详情,请参阅新的 DEX 编译器。
增量脱糖
对于使用 Java 8 语言功能的项目,系统会默认启用增量脱糖,这可以缩短构建时间。
脱糖可将语法糖转换为一种可供编译器更高效地处理的格式。
您可以通过在项目的 gradle.properties
文件中指定以下内容来停用增量脱糖:
android.enableIncrementalDesugaring=false
简化了输出窗口
Gradle Console 已替换为 Build 窗口,后者包含 Sync 和 Build 标签页。
如需详细了解如何使用经过简化的新 Build 窗口,请参阅监控构建流程。
批量更新和并发索引
现在,Gradle 同步和 IDE 索引编制流程的效率更高,从而缩短了在许多冗余索引编制操作上浪费的时间。
C++ 和 LLDB
我们在 C++ 开发的编码、同步、构建和调试阶段做出了多项质量和性能方面的改进。具体改进包括:
-
如果您处理的是大型 C++ 项目,应该会注意到在构建符号上花费的时间明显减少。大型项目的同步时间也大大减少。
-
通过更积极地重复使用缓存结果,改进了构建 CMake 并与之同步时的性能。
-
为更多 C++ 数据结构添加了格式转换工具(“pretty printers”),使 LLDB 输出更易于阅读。
-
LLDB 现在仅适用于 Android 4.1(API 级别 16)及更高版本。
注意:在 32 位 Windows 系统上,无法使用 Android Studio 3.0 或更高版本进行原生调试。如果您使用的是 32 位 Windows 系统,并且需要调试原生代码,请使用 Android Studio 2.3。
Kotlin
Kotlin 已升级到版本 1.2.30
Android Studio 3.1 包含 Kotlin 版本 1.2.30。
现在使用命令行 lint 检查分析 Kotlin 代码
现在,可通过从命令行运行 lint 来分析您的 Kotlin 类。
对于您希望运行 lint 的每个项目,Google 的 Maven 制品库必须包含在顶级 build.gradle
文件中。在 Android Studio 3.0 及更高版本中创建的项目已包含 Maven 制品库。
性能工具
使用 CPU 性能分析器对原生 C++ 进程采样
CPU 性能分析器现在包含一项默认配置,用于记录应用的原生线程的采样轨迹。您可以通过以下方法使用此配置:将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备,然后从 CPU 性能分析器的记录配置下拉菜单中选择 Sampled (Native)。然后,按照常规方法记录和检查轨迹。
您可以通过创建记录配置来更改默认设置,例如采样间隔。
如需切换回跟踪 Java 线程,请选择 Sampled (Java) 或 Instrumented (Java) 配置。
过滤 CPU 轨迹、内存分配结果和堆转储
CPU 性能分析器和内存分析器包含搜索功能,可让您从方法轨迹记录、内存分配或堆转储中过滤结果。
如需进行搜索,请点击窗格右上角的 Filter ,输入您的查询,然后按 Enter。
提示:您还可以按 Ctrl + F(在 Mac 中按 Command + F)来打开搜索字段。
在 CPU 性能分析器的 Flame Chart 标签页中,包含搜索查询相关方法的调用堆栈会突出显示,并移至图表左侧。
如需详细了解如何按方法、类或软件包名称过滤,请参阅记录和检查方法轨迹。
网络性能分析器中的“Request”标签页
网络性能分析器现在包含 Request 标签页,其中提供了选定时间范围内网络请求的相关详细信息。在以前的版本中,网络性能分析器仅提供有关网络响应的信息。
网络性能分析器中的 Thread View
在网络性能分析器中选择时间轴的一部分后,您可以选择以下某个标签页,以查看有关该时间范围内的网络活动的更多详细信息:
- Connection View:提供与 Android Studio 先前版本相同的信息,其中列出了在时间轴上选定时段内从您应用的所有 CPU 线程发送或接收的文件。对于每个请求,您都可以检查大小、类型、状态和传输时长。
- Thread View:显示应用的每个 CPU 线程的网络活动。此视图可让您检查各网络请求由应用的哪些线程负责。
布局检查器
Layout Inspector 获得了新功能,包括以前由 Hierarchy Viewer 和 Pixel Perfect 工具提供的部分功能:
- 用于导航和检查布局的缩放按钮和键盘快捷键
- 参考网格叠加层
- 能够加载参考图片并将其用作叠加层(用于将您的布局与界面模型进行比较)
- Render Subtree Preview,以隔离复杂布局中的视图
布局编辑器
布局编辑器中的 Palette 获得了许多改进:
- 重新组织视图和布局的类别。
- 为视图和布局新增了 Common 类别,您可以使用 Favorite 命令将视图和布局添加至该类别。
- 改进了对视图和布局的搜索。
- 新增了用于打开文档以显示特定视图或布局元素的命令。
您可以在 Component Tree 或设计编辑器中使用新的 Convert View 命令将视图或布局转换为另一种类型的视图或布局。
您现在可以使用新的“Create a connection” 按钮(位于 Attributes 窗口顶部的视图检查器中)为所选视图附近的项轻松创建约束条件。
Run 和 Instant Run
Select deployment target 对话框中 Use same selection for future launches 选项的行为现已更加一致。如果启用了 Use same selection 选项,Select deployment target 对话框将仅在您首次使用 Run 命令时打开,直到所选设备不再保持连接为止。
以搭载 Android 8.0(API 级别 26)或更高版本的设备为目标时,Instant Run 可以将更改部署到资源,而不会导致应用重启。之所以能这么做,是因为这些资源包含在拆分 APK 中。
模拟器
如需详细了解自 Android Studio 3.0 以来模拟器中的新变化以及变更内容,请参阅版本 27.0.2 到版本 27.1.12 的 Android 模拟器版本说明。
主要改进包括:
- 快速启动快照,用于保存模拟器状态并加快启动速度,并且能够使用 Save now 命令保存自定义启动状态。
- 无窗口模拟器屏幕。
- 适用于 Android 8.0(API 级别 26)、Android 8.1(API 级别 27)和 Android P 开发者预览版的系统映像。
界面和用户体验方面的改进
更多提示、键盘快捷键和有用的消息
我们在 Android Studio 中的许多位置添加了提示和有用的消息叠加层。
如需查看很多命令的键盘快捷键,只需将鼠标指针悬停在某个按钮上,直到系统显示提示。
移除了“Tools > Android”菜单
Tools > Android 菜单已被移除。之前位于此菜单下的命令已移到别处。
- 很多命令已直接移到 Tools 菜单下。
- Sync project with gradle files 命令已移至 File 菜单。
- Device Monitor 命令已被移除,如下所述。
可从命令行调用 Device Monitor
在 Android Studio 3.1 中,Device Monitor 发挥的作用不及以前。在许多情况下,Device Monitor 提供的功能现在由经过改进的新工具提供。
如需了解如何从命令行调用 Device Monitor,并查看有关 Device Monitor 所提供工具的说明,请参阅 Device Monitor 文档。
3.0(2017 年 10 月)
Android Studio 3.0.0 是一个主要版本,包含各种新功能和改进。
macOS 用户:如果您要更新旧版 Android Studio,可能会遇到内容为“Some conflicts were found in the installation area”的更新错误对话框。只需忽略此错误即可,点击 Cancel 继续安装。
3.0.1(2017 年 11 月)
此 Android Studio 3.0 次要更新修正了一些常见 bug 并进行了多项性能改进。
Android Plugin for Gradle 3.0.0
新的 Android Plugin for Gradle 包含多种改进功能和新功能,但主要是改进了包含大量模块的项目的构建性能。在将新插件与这些大型项目结合使用时,您应当会注意到以下变化:
- 由于新的延迟依赖项解析,build 配置时间更短。
- 变体感知依赖项解析仅适用于您正在构建的项目和变体。
- 对代码或资源应用简单更改时,可加快增量构建速度。
注意:这些改进需要进行重大更改,从而破坏该插件的一些行为、DSL 和 API。升级到版本 3.0.0 可能需要更改 build 文件和 Gradle 插件。
此版本还包含以下变更:
- 支持 Android 8.0。
- 支持基于语言资源构建单独的 APK。
- 支持 Java 8 库和 Java 8 语言功能(无需 Jack 编译器)。
- 支持 Android 测试支持库 1.0(Android Test Utility 和 Android Test Orchestrator)。
- 提高了 ndk-build 和 CMake 构建速度。
- 加快了 Gradle 同步速度。
- AAPT2 现已默认处于启用状态。
- 现在使用
ndkCompile
会受到更多限制。您应该改用 CMake 或 ndk-build 来编译要打包到 APK 中的原生代码。如需了解详情,请参阅从 ndkcompile 迁移。
如需详细了解更改内容,请参阅 Android Plugin for Gradle 版本说明。
如果您已准备好升级到新插件,请参阅迁移到 Android Plugin for Gradle 3.0.0。
Kotlin 支持
正如在 2017 年 Google I/O 大会上公布的一样,Android 现在已正式支持 Kotlin 编程语言。因此,在此版本中,Android Studio 包含针对 Android 开发的 Kotlin 语言支持。
您可以将 Kotlin 整合到您的项目中,具体方法是:将 Java 文件转换为 Kotlin(依次点击 Code > Convert Java File to Kotlin File),或使用“New Project”向导创建启用 Kotlin 的新项目。
要开始操作,请阅读如何将 Kotlin 添加到您的项目中。
Java 8 语言功能支持
您现在可以使用某些 Java 8 语言功能,并利用使用 Java 8 构建的库。不再需要 Jack,您需要先停用 Jack 才能使用内置到默认工具链中并得到改进的 Java 8 支持。
如需更新您的项目以支持全新的 Java 8 语言工具链,请在 Project Structure 对话框(依次点击 File > Project Structure)中将 Source Compatibility 和 Target Compatibility 更新到 1.8。要了解详情,请阅读如何使用 Java 8 语言功能。
Android Profiler
新的 Android Profiler 取代了 Android Monitor 工具,并提供了一套新的工具来实时衡量应用的 CPU、内存和网络使用情况。您可以执行基于样本的方法跟踪来记录代码执行时间、采集堆转储数据、查看内存分配,以及检查网络传输文件的详细信息。
如需打开,请依次点击 View > Tool Windows > Android Profiler(或点击工具栏中的 Android Profiler)。
窗口顶部的事件时间轴会显示轻触事件、按键和活动更改,以便您更清楚地了解时间轴中的其他性能事件。
注意:Logcat 视图也移到了一个单独的窗口中(以前是在 Android Monitor 中,该工具现已移除)。
从 Android Profiler 的概览时间轴中,点击 CPU、MEMORY 或 NETWORK 时间轴即可访问相应的性能分析器工具。
CPU 性能分析器
借助 CPU 性能分析器,您可以触发一个样本或检测的 CPU 轨迹,从而分析应用的 CPU 线程使用情况。然后,您可以使用各种数据视图和过滤器来排查 CPU 性能问题。
如需了解详情,请参阅 CPU 性能分析器指南。
内存分析器
内存分析器可帮助您识别可能会导致应用卡顿、冻结甚至崩溃的内存泄漏和内存抖动。它会显示一个应用内存用量的实时图表,让您可以捕获堆转储、强制执行垃圾回收以及跟踪内存分配。
如需了解详情,请参阅内存分析器指南。
网络性能分析器
通过网络性能分析器,您可以监控应用的网络活动,检查每个网络请求的负载,并链接回生成相应网络请求的代码。
如需了解详情,请参阅网络性能分析器指南。
APK 性能分析和调试
Android Studio 现在允许您对任何 APK 进行性能分析和调试,而无需从 Android Studio 项目进行构建。前提是,相应 APK 已构建为启用调试,并且您可以使用调试符号和源文件。
要开始操作,请在 Android Studio 欢迎屏幕上点击 Profile or debug APK。或者,如果您已经打开一个项目,请在菜单栏中依次点击 File > Profile or debug APK。这会显示已解压缩的 APK 文件,但不会对代码进行反编译。因此,为了正确添加断点和查看堆栈轨迹,您需要附加 Java 源文件和原生调试符号。
如需了解详情,请参阅对预构建 APK 进行性能分析和调试。
Device File Explorer
利用新的 Device File Explorer,您可以检查已连接设备的文件系统,并在设备和计算机之间传输文件。这取代了 DDMS 中提供的文件系统工具。
如需打开,请依次点击 View > Tool Windows > Device File Explorer。
如需了解详情,请参阅 Device File Explorer 指南。
免安装应用支持
对 Android 免安装应用的全新支持允许您使用以下两种新模块类型在项目中创建免安装应用:免安装应用模块和功能模块(这些模块要求您安装免安装应用开发 SDK)。
Android Studio 还包含一个新的模块化重构操作,可帮助您在现有项目中添加对免安装应用的支持。例如,如果您要重构项目以在免安装应用功能模块中添加一些类,请在 Project 窗口中选择这些类,然后依次点击 Refactor > Modularize。在随即显示的对话框中,选择这些类应归属的模块,然后点击 OK。
当您准备好测试免安装应用时,可以在运行配置启动选项中指定该免安装应用的网址(具体方法是:依次选择 Run > Edit Configurations,选择您的免安装应用模块,然后在 Launch Options 下设置网址),以在连接的设备上构建和运行免安装应用模块。
如需了解详情,请参阅 Android 免安装应用。
Android Things 模块
New Project 和 New Module 向导中的新 Android Things 模板可帮助您开始为搭载 Android 系统的物联网设备开发应用。
如需了解详情,请参阅如何创建 Android Things 项目。
自适应图标向导
Image Asset Studio 现在支持矢量可绘制对象,可让您创建用于 Android 8.0 的自适应启动器图标,同时为旧款设备创建传统图标(“旧版”图标)。
首先,右键点击项目中的 res 文件夹,然后依次点击 New > Image Asset。在 Asset Studio 窗口中,选择 Launcher Icons (Adaptive and Legacy) 作为图标类型。
注意:必须将 compileSdkVersion
设为 26 或更高版本才能使用自适应启动器图标。
如需了解详情,请参阅自适应图标。
对字体资源的支持
为了支持 Android 8.0 中的新字体资源,Android Studio 添加了一个字体资源选择器,用于将字体打包到应用中或配置项目以将字体下载到设备上(如果可用)。布局编辑器还可以预览布局中的字体。
如需试用可下载的字体,请确保您的设备或模拟器运行的是 Google Play 服务 11.2.63 版或更高版本。如需了解详情,请参阅可下载的字体。
Firebase App Indexing Assistant
Firebase Assistant 已更新,其中包含讲述如何测试 App Indexing 的新教程。要打开 Assistant,请依次选择 Tools > Firebase。然后,依次选择 App Indexing > Test App Indexing。
该教程包含用于测试公开和个人内容索引编制的新按钮:
- 在第 2 步中,点击 Preview search results,验证您的网址是否会显示在 Google 搜索结果中。
- 在第 3 步中,点击 Check for errors,验证应用中可编入索引的对象是否已添加到个人内容索引中。
Android App Links Assistant
App Links Assistant 已更新,包含以下新功能:
-
为每个网址映射添加网址测试,以确保您的 intent 过滤器可处理真实的网址。
您也可以使用下述
<tools:validation>
标记手动定义这些网址测试。 -
使用正确的对象条目创建 Digital Asset Links 文件,以支持 Google Smart Lock,并向清单文件添加相应的
asset_statements
<meta-data>
标记。
网址 intent 过滤器验证程序
Android Studio 现在支持清单文件中的一种特殊标记,该标记可让您测试 intent 过滤器网址。这些标记与 App Links Assistant 可为您创建的标记相同。
要声明 intent 过滤器的测试网址,请添加 <tools:validation>
元素以及对应的 <intent-filter>
元素。例如:
<activity ...>
<intent-filter>
...
</intent-filter>
<tools:validation testUrl="https://www.example.com/recipe/1138" />
</activity>
还请务必在 <manifest>
代码中包含 xmlns:tools="http://schemas.android.com/tools"
。
如果其中任何一个测试网址未通过 intent 过滤器定义,则会显示 Lint 错误。此类错误仍允许您构建调试变体,但它会破坏您的发布版本。
布局编辑器
布局编辑器经过了更新,包含多项增强功能,其中包括:
- 新的工具栏布局和图标。
- 更新了组件树中的布局。
- 改进了拖放视图插入。
- 新增了错误面板(在编辑器下方),其中会显示所有问题以及修正建议(如可用)。
- 针对使用
ConstraintLayout
进行构建的各种界面增强功能,包括:- 新增对创造屏障的支持。
- 新增对创建组的支持:在工具栏中,依次选择 Guidelines > Add Group(需要 ConstraintLayout 1.1.0 Beta 版 2 或更高版本)
- 新增用于创建链的界面:选择多个视图,然后右键点击并选择 Chain。
布局检查器
布局检查器包含一些增强功能,可让您更轻松地调试应用布局问题,包括将属性归入常见类别以及 View Tree 和 Properties 窗格中的新搜索功能。
APK 分析器
您现在可以使用 apkanalyzer
工具从命令行使用 APK 分析器。
APK 分析器也经过更新,包含以下改进功能:
- 对于使用 ProGuard 构建的 APK,您可以加载 ProGuard 映射文件,为 DEX 查看器添加多项功能,其中包括:
- 粗体节点,指示在压缩代码时不应移除相应节点。
- 一个用于显示在压缩过程中移除的节点的按钮。
- 一个按钮,用于恢复树状视图中由 ProGuard 进行混淆处理的节点的原始名称。
- DEX 查看器现在会显示每个软件包、类和方法的估计大小影响。
- 在顶部新增了一些过滤选项,可显示和隐藏字段及方法。
- 在树状视图中,未在 DEX 文件中定义的参考节点会以斜体显示。
如需了解详情,请参阅使用 APK 分析器分析您的 build。
D8 DEX 编译器的预览版
Android Studio 3.0 包含一个名为 D8 的可选新 DEX 编译器。它最终将取代 DX 编译器,但您现在可以选择使用新的 D8 编译器。
DEX 编译会直接影响应用的构建时间、.dex
文件的大小和运行时性能。与当前 DX 编译器相比,新的 D8 编译器的编译速度更快,输出的 .dex
文件更小,同时却能保持相同乃至更出色的应用运行时性能。
如需试用此功能,请在项目的 gradle.properties
文件中进行以下设置:
android.enableD8=true
如需了解详情,请参阅有关 D8 编译器的博文。
Google 的 Maven 制品库
Android Studio 现在默认使用 Google 的 Maven 制品库,而不依赖于 Android SDK 管理器来获取 Android 支持库、Google Play 服务、Firebase 和其他依赖项的更新。这样,您可以更轻松地使您的库保持最新,尤其是在使用持续集成 (CI) 系统时。
现在,所有新项目都默认包含 Google Maven 制品库。如需更新现有项目,请在顶级 build.gradle
文件的 repositories
代码块中添加 google()
:
allprojects {
repositories {
google()
}
}
如需详细了解 Google 的 Maven 制品库,请点击此处。
其他变更
- 在 32 位 Windows 系统上,无法使用 Android Studio 进行原生调试。我们选择专注于其他平台,因为很少有开发者使用这个平台。如果您使用的是 32 位 Windows 系统,并且打算调试原生代码,应继续使用 Android Studio 2.3。
- 将基本 IDE 升级为 IntelliJ 2017.1.2,其包含 2016.3 和 2017.1 中的许多新功能,例如 Java 8 语言重构、参数提示、语义突出显示、可拖动的断点、即时获得搜索结果等等。
- 添加了许多新的 lint 检查。
- 另请参阅最新的 Android 模拟器更新。
2.3(2017 年 3 月)
Android Studio 2.3.0 主要是一个修复 bug 和提高稳定性的版本,但也包含许多新功能。
2.3.3(2017 年 6 月)
这是一项次要更新,添加了对 Android O(API 级别 26)的支持。
2.3.2(2017 年 4 月)
这是一项 Android Studio 2.3 次要更新,其中包含以下更改:
- 更新了 AVD 管理器,以在系统映像中支持 Google Play。
- 修复了使用 R14 及更高版本 NDK 时的 NDK build bug。
另请参阅 Android 模拟器 26.0.3 的相应更新。
2.3.1(2017 年 4 月)
这是针对 Android Studio 2.3 的次要更新,修复了某些 Android 实体设备无法正确使用 Instant Run 的问题(请参阅问题 #235879)。
<h3 class="hide-from-toc">
New
</h3>
<div class="video-wrapper-left">
<iframe class="devsite-embedded-youtube-video" data-video-id="VFyKclKBGf0"
data-autohide="1" data-showinfo="0" frameborder="0" allowfullscreen>
</iframe>
</div>
<ul>
<li>Android Studio can now convert PNG, BMP, JPG, and static GIF files to
WebP format. WebP is an image file format from Google that provides lossy
compression (like JPEG) as well as transparency (like PNG) but can provide
better compression than either JPEG or PNG. For more information, see
<a href="/studio/write/convert-webp.html">Convert images to WebP in Android
Studio</a>.
</li>
<li>The new <a href="/studio/write/app-link-indexing.html">App Links
Assistant</a> simplifies the process of adding Android App Links to your app
into a step-by-step wizard. Android App Links are HTTP URLs that bring users
directly to specific content in your Android app.
</li>
<li>The Layout Editor now includes support for two new ConstraintLayout
features:
<ul>
<li>Define a view size based on an aspect ratio.
</li>
<li>Create packed, spread, and weighted linear groups with constraint
chains.
</li>
</ul>
For more information, see <a href=
"/training/constraint-layout/index.html">Build a Responsive UI with
ConstraintLayout</a>.
</li>
<li>The Layout Editor also now lets you create a list of <a href=
"/studio/write/layout-editor.html#edit-properties">favorite attributes</a> so
you don't have to click <b>View all attributes</b> to access the attributes
you use most.
</li>
<li>When adding a material icon using the Vector Import Dialog (<b>File >
New > Vector Asset</b>), you can now filter the list of available icons by
category or by icon name. For more information, see <a href=
"/studio/write/vector-asset-studio.html#materialicon">Adding a material
icon</a>.
</li>
<li>
<a href="/studio/write/annotations.html#accessibility">New and updated
annotations</a>. The new <code>@RestrictTo</code> annotation for methods,
classes, and packages lets you restrict an API. The updated
<code>@VisibleForTesting</code> annotation now has an optional
<code>otherwise</code> argument that lets you designate what the visibility
of a method should be if not for the need to make it visible for testing.
Lint uses the <code>otherwise</code> option to enforce the intended
visibility of the method.
</li>
<li>New <a href="/studio/write/lint.html#snapshot">lint baseline support</a>
allows you to use a snapshot of your project's current set of warnings as a
baseline for future inspection runs so only new issues are reported. The
baseline snapshot lets you start using lint to fail the build for new issues
without having to go back and address all existing issues first.
</li>
<li>New lint checks, including the following:
<ul>
<li>Obsolete <code>SDK_INT</code> Checks: Android Studio removes obsolete
code that checks for SDK versions.
</li>
<li>Object Animator Validation: Lint analyzes your code to make sure that
your <code>ObjectAnimator</code> calls reference valid methods with the
right signatures and checks that those methods are annotated with <code>
@Keep</code> to prevent ProGuard from renaming or removing them during
release builds.
</li>
<li>Unnecessary Item Decorator Copy: Older versions of the
<code>RecyclerView</code> library did not include a divider decorator
class, but one was provided as a sample in the support demos. Recent
versions of the library have a divider decorator class. Lint looks for
the old sample and suggests replacing it with the new one.
</li>
<li>WifiManager Leak: Prior to Android 7.0 (API level 24), initializing
the <code>WifiManager</code> with <code><a href="/reference/android/content/Context.html#getSystemService(java.lang.Class<T>)">Context.getSystemService()</a></code>
can cause a memory leak if the context is not the application context.
Lint looks for these initializations, and if it <em>cannot</em> determine
that the context is the application context, it suggests you use <code><a href="/reference/android/content/Context.html#getApplicationContext()">Context.getApplicationContext()</a></code> to get the proper context for the
initialization.
</li>
<li>Improved Resource Prefix: The existing <code>resourcePrefix</code>
lint check had many limitations. You can now configure your project with
a prefix, such as <code>android { resourcePrefix '<var>my_lib</var>'
}</code>, and lint makes sure that all of your resources are using this
prefix. You can use variations of the name for styles and themes. For
example for the <var>my_lib</var> prefix, you can have themes named
<code>MyLibTheme</code>, <code>myLibAttr</code>,
<code>my_lib_layout</code>, and so on.
</li>
<li>Switch to WebP: This check identifies images in your project that can
be converted to WebP format based on your project’s
<code>minSdkVersion</code> setting. An associated quickfix can
automatically convert the images, or you can <a href=
"/studio/write/convert-webp.html">convert images to WebP</a> manually.
</li>
<li>Unsafe WebP: If your project already includes WebP images, this check
analyzes your project to ensure that your <code>minSdkVersion</code>
setting is high enough to support the included images. For more
information about WebP support in Android and Android Studio, see
<a class="external" href=
"https://developers.google.com/speed/webp/faq#which_web_browsers_natively_support_webp">
Which browsers natively support WebP?</a> and <a href=
"/studio/write/convert-webp.html">Create WebP Images Using Android
Studio</a>.
</li>
</ul>
</li>
</ul>
<h3 class="hide-from-toc">
Changes
</h3>
<ul>
<li>A separate button to push changes with Instant Run: After deploying your
app, you now click <b>Apply Changes</b> <img src=
"/studio/images/buttons/toolbar-apply-changes.svg" alt="" class=
"inline-icon"> to quickly push incremental changes to your running app using
Instant Run. The <b>Run</b> <img src="/studio/images/buttons/toolbar-run.png"
alt="" class="inline-icon"> and <b>Debug</b> <img src=
"/studio/images/buttons/toolbar-debug.png" alt="" class="inline-icon">
buttons are always available to you when you want to reliably push your
changes and force an app restart.
<ul>
<li>Instant Run is supported only when deploying your app to a target
device running Android 5.0 (API level 21) or higher.
</li>
<li>Instant Run is no longer disabled for projects that <a href=
"/studio/projects/add-native-code.html">link to external native
projects</a> using CMake or ndk-build. However, you can only use Instant
Run to push incremental changes to your Java code, not your native code.
</li>
<li>Cold swaps (which you can force for a running app by clicking
<strong>Run</strong> <img src="/studio/images/buttons/toolbar-run.png"
alt="" class="inline-icon">) are now more reliable. Forcing a cold swap
also fixes the issue where changes to notification and widget UIs were
not updated on the target device.
</li>
<li>Includes optimizations that make app startup much faster. These
optimizations may affect profiling, so you should temporarily <a href=
"/studio/run/index.html#disable-ir">disable Instant Run</a> whenever
profiling your app.
</li>
</ul>
</li>
<li>
<p>
The <b>AVD Manager</b> <img src=
"/studio/images/buttons/toolbar-avd-manager.png" alt="" class=
"inline-icon"> and <b>SDK Manager</b> <img src=
"/studio/images/buttons/toolbar-sdk-manager.png" alt="" class=
"inline-icon"> buttons are now included in the lean Navigation Bar as
well as the full Toolbar. To use the lean Navigation Bar, click
<b>View</b> to open the View menu, then ensure that <b>Navigation Bar</b>
is selected and <b>Toolbar</b> is <em>not</em> selected.
</p>
<img src="/studio/images/releases/navigationbar_sdkavd_2x.png" width="757">
</li>
<li>The "Hybrid" debugger has been renamed to "Dual" debugger.
</li>
<li>In the <a href="/studio/run/rundebugconfig.html">Run/Debug
Configurations</a> dialog, under Defaults in the left pane, the following run
configuration names have changed with no behavior changes:
<ul>
<li>The JUnit name has changed to Android JUnit. If you have a project
that uses JUnit run configurations, those configurations are transformed
to Android JUnit run configurations the first time you open the project
with Android Studio. A dialog appears to inform you of the name change.
</li>
<li>The Android Tests name has changed to Android Instrumented Tests.
</li>
</ul>
</li>
<li>The <a href="/studio/debug/am-gpu-debugger.html">GPU Debugger</a> has
been removed from Android Studio as of version 2.3. An open-source,
standalone version of the tool is now available on <a href=
"https://github.com/google/gapid" class="external-link">GitHub</a>.
</li>
<li>The Run/Debug option is no longer available when you right-click a <code>
*.gradle build</code> script.
</li>
<li>All templates now use <code>ConstraintLayout</code> as the default
layout.
</li>
<li>The Widgets palette in the Layout Editor has been redesigned.
</li>
</ul>
<p>
This release also includes a number of bug fixes. <a href=
"https://code.google.com/p/android/issues/list?can=1&q=target%3D2.3+status%3DReleased&colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&cells=tiles">
See all bug fixes in 2.3.0.</a>
</p>
<p class="note">
<b>Known issue:</b> Some device manufacturers block apps from automatically
launching after being installed on the device. When deploying your app to a
physical device using Android Studio 2.3, this restriction breaks the
intended behavior of Instant Run and causes the following error output:
<code>Error: Not found; no service started</code>. To avoid this issue,
either <a href="/studio/run/emulator.html">use the emulator</a> or enable
automatic launching for your app in your device's settings. The procedure
for doing this is different for each device, so check the instructions
provided by the manufacturer. To learn more about this issue, see
<a href="https://code.google.com/p/android/issues/detail?id=235879">Issue
#235879</a>.
</p>
2.2(2016 年 9 月)
2.2.3(2016 年 12 月)
<p>
This is a minor update to Android Studio 2.2. It includes a bug fixes
focused around gradle, the core IDE, and lint.
</p>
<p>
Highlighted build changes:
</p>
<ul>
<li>ProGuard version rollback. Due to a <a href=
"https://sourceforge.net/p/proguard/bugs/625/">correctness issue</a>
discovered in ProGuard 5.3.1, we have rolled back to ProGuard 5.2.1. We
have worked with the ProGuard team on getting a fix quickly, and we expect
to roll forward to ProGuard 5.3.2 in Android Studio 2.3 Canary 3.
</li>
<li>Bug fix for <code>aaptOptions</code> <code>IgnoreAssetsPattern</code>
not working properly (<a href="http://b.android.com/224167">issue
224167</a>)
</li>
<li>Bug fix for Gradle autodownload for Constraint Layout library
(<a href="https://code.google.com/p/android/issues/detail?id=212128">issue
212128</a>)
</li>
<li>Bug fix for a JDK8/Kotlin compiler + dx issue (<a href=
"http://b.android.com/227729">issue 227729</a>)
</li>
</ul>
<p>
<a href=
"https://code.google.com/p/android/issues/list?can=1&q=target%3D2.2.3+status%3AReleased+&colspec=ID+Status+Priority+Owner+Summary+Stars+Reporter+Opened&cells=tiles">
See all bug fixes in 2.2.3</a>.
</p>
2.2.2(2016 年 10 月)
<p>
This is a minor update to Android Studio 2.2. It includes a number of small
changes and bug fixes, including:
</p>
<ul>
<li>When reporting Instant Run issues through the IDE, the report now also
includes logcat output for <code>InstantRun</code> events. To help us
improve Instant Run, please <a href=
"/studio/run/index.html#submit-feedback">enable extra logging and report
any issues</a>.
</li>
<li>A number of small bug fixes for Gradle.
</li>
<li>A fix for problems with generating multiple APKs.
</li>
</ul>
2.2.1(2016 年 10 月)
<p>
This is a minor update to Android Studio 2.2. It includes several bug fixes
and a new feature to enable extra logging to help us troubleshoot Instant
Run issues—to help us improve Instant Run, please <a href=
"/studio/run/index.html#submit-feedback">enable extra logging and report
any issues</a>.
</p>
新变化
- 所有新的布局编辑器都内置自定义工具,以支持 ConstraintLayout。
<li>New <strong><a href=
"http://tools.android.com/tech-docs/layout-inspector">Layout
Inspector</a></strong> lets you examine snapshots of your layout hierarchy
while your app is running on the emulator or a device.
</li>
<li>New <strong><a href="/studio/write/firebase.html">Assistant</a></strong>
window to help you integrate Firebase services into your app.
</li>
<li>New <strong><a href="/studio/debug/apk-analyzer.html">APK
Analyzer</a></strong> tool so you can inspect the contents of your packaged
app.
</li>
<li>New <strong><a href=
"http://tools.android.com/tech-docs/test-recorder">Espresso Test
Recorder</a></strong> tool (currently in beta) to help you create UI tests by
recording your own interactions.
</li>
<li>New <strong><a href=
"http://tools.android.com/tech-docs/build-cache">build cache</a></strong>
(currently experimental) to speed up build performance.
</li>
<li>New <strong>C/C++ build integration with CMake and ndk-build</strong>.
Compile and build new or existing native code into libraries packaged into
your APK, and debug using lldb. For new projects, Android Studio uses CMake
by default, but also supports ndk-build for existing projects. To learn how
to include native code in your Android application, read <a href=
"/studio/projects/add-native-code.html">Add C and C++ Code to Your
Project</a>. To learn how to debug native code with lldb, see <a href=
"/studio/debug/index.html#debug-native">Debug Native Code</a>.
</li>
<li>New <strong><a href="/studio/intro/index.html#sample-code">Samples
Browser</a></strong> so you can easily look up Google Android sample code
from within Android Studio to jump start app development.
</li>
<li>New <strong>Merged Manifest Viewer</strong> to help you diagnose how your
manifest file merges with your app dependencies across project build
variants.
</li>
<li>The <strong>Run</strong> window now contains log messages for the current
running app. Note that you can configure the <a href=
"/studio/debug/am-logcat.html">logcat Monitor</a> display, but not the
<strong>Run</strong> window.
</li>
<li>New <strong><a href="/studio/run/emulator.html">Android
Emulator</a></strong> features:
<ul>
<li>Added new <strong>Virtual</strong> <strong>Sensors</strong> and
<strong>Cellular</strong> > <strong>Signal Strength</strong> controls.
</li>
<li>Added an <strong>LTE</strong> option to the <strong>Cellular</strong>
> <strong>Network type</strong> control.
</li>
<li>Added simulated vertical swipes for scrolling through vertical menus
with a mouse wheel.
</li>
</ul>
</li>
<li>New <strong><a href="/studio/run/rundebugconfig.html">Run/Debug
Configuration</a></strong> features:
<ul>
<li>The <strong>Debugger</strong> tab of the Android App and Android
Tests templates now contain several new options for debugging with LLDB.
</li>
<li>The <strong>Profiling</strong> tab of the Android App and Android
Tests templates now contain a <strong>Capture GPU Commands</strong>
option for enabling GPU tracing. You can display GPU traces in the GPU
Debugger (a beta feature).
</li>
<li>The Android Tests template now has a <strong>Firebase Test Lab Device
Matrix</strong> option for the <strong>Deployment Target</strong>.
</li>
<li>The Native Application template has been deprecated. If you use this
template in a project, Android Studio automatically converts it to the
Android App template.
</li>
<li>The Android Application template has been renamed to Android App.
</li>
</ul>
</li>
<li>Improved installation, configuration, performance, and UI features in the
<strong><a href="/studio/debug/am-gpu-debugger.html">GPU
Debugger</a></strong> (currently in beta).
</li>
<li>Android Studio now comes bundled with <strong>OpenJDK 8</strong>.
Existing projects still use the JDK specified in <strong>File > Project
Structure > SDK Location</strong>. You can switch to use the new bundled
JDK by clicking <strong>File > Project Structure > SDK
Location</strong> and checking the <strong>Use embedded JDK</strong>
checkbox.
</li>
<li>Added new <strong>help menus and buttons</strong> in the UI so you can
more easily find the online documentation.
</li>
变更
- 将 Android Studio 代码库从 IntelliJ 15 更新为 IntelliJ 2016.1
- Instant Run 现在需要安装与目标设备 API 级别对应的平台 SDK。
- 如果用户在工作资料下或以次要用户身份运行应用,系统会自动停用 Instant Run。
- 修复了 Instant Run 的许多可靠性问题,这些问题会使更改无法部署或导致应用崩溃:
- 某些应用资产未部署到正在运行的应用中。(bug:#213454)
- 当用户在 Instant Run 和非 Instant Run 会话(可序列化类未在其中定义 serialVersionUID)之间切换时,应用崩溃。(bug:#209006)
- Instant Run 不会反映样式更改。(bug:#210851)
- Instant Run 会话不可靠,会导致 FileNotFoundException。 (bug:#213083)
- 在为 KitKat 执行完全重新构建之前,不会反映对可绘制对象的更改。(bug:#21530)
- 当自定义 sourceSets 包含嵌套路径时,Instant Run 不会反映资源更改。(bug:#219145)
- 如果已更改的类包含具有枚举值的注解,热交换和温和交换就会不起作用。(bug:#209047)
- Instant Run 不会反映对注解数据的更改。 (bug:#210089)
- 如果您在 Android Studio 外部进行更改,Instant Run 不会选择代码更改。(bug:#213205)
- 由于安全令牌不匹配,Instant Run 会话不可靠。(bug:#211989)
- 对于无法正确支持 run-as 的设备,冷交换会失败。(bug:#210875)
- 应用在 Instant Run 重启后崩溃。(bug:#219744)
- 从 Instant Run 切换到 Instant Debug 时观察到 ClassNotFoundException。(bug:#215805)
<li>Improved performance for <strong>Gradle sync</strong> within the IDE,
especially for large projects.
</li>
<li>Improved build times for both full and incremental builds with new app
packaging code.
</li>
<li>Improved <strong>Jack compiler performance and features</strong>,
including support for annotation processors and dexing in process. To learn
more, read the <a href=
"/studio/releases/gradle-plugin.html#revisions">Android plugin for Gradle
2.2.0 release notes</a>.
</li>
<li>Removed the <strong>Scale</strong> AVD property from the AVD Manager.
</li>
<li>The Android Emulator <strong>-port</strong> and <strong>-ports</strong>
command-line options now report which ports and serial number the emulator
instance is using, and warn if there are any issues with the values you
provided.
</li>
<li>Improved the <strong><a href=
"/studio/write/create-java-class.html">Create New Class dialog</a></strong>
and the corresponding file templates. <strong>Note:</strong> If you've
previously customized the <strong>AnnotationType</strong>,
<strong>Class</strong>, <strong>Enum</strong>, <strong>Interface</strong>, or
<strong>Singleton</strong> file templates, you need to modify your templates
to comply with the new templates or you won’t be able to use the new fields
in the <strong>Create New Class</strong> dialog.
</li>
<li>Improved the <strong><a href=
"/studio/write/vector-asset-studio.html">Vector Asset Studio</a></strong>
user interface and added support for Adobe Photoshop Document (PSD) files.
</li>
<li>Improved the <strong><a href=
"/studio/write/image-asset-studio.html">Image Asset Studio</a></strong> user
interface.
</li>
<li>Improved the <strong>Theme Editor</strong>'s Resource Picker.
</li>
<li>Fixed memory leaks and reduced overall memory usage in Android Studio.
</li>
<li>Added a <strong>Background</strong> button in the <strong><a href=
"/studio/intro/update.html#sdk-manager">SDK Manager</a></strong> so you can
get back to work and install your packages in the background.
</li>
<li>Improved <strong><a href="/studio/intro/accessibility.html">Accessibility
features</a></strong>, including support for screen readers and keyboard
navigation.
</li>
<li>Enhanced <strong>Code Analysis</strong> includes code quality checks for
Java 8 language usage and more cross-file analysis.
</li>
<li>Several toolbar icons have changed.
</li>
2.1(2016 年 4 月)
此更新中的主要更改可为使用 Android N 预览版进行开发提供支持。
2.1.3(2016 年 8 月)
此项更新增加了与 Gradle 2.14.1 的兼容性,其中包括性能改进、新功能和重要的安全修复程序。如需了解详情,请参阅 Gradle 版本说明。
默认情况下,Android Studio 2.1.3 中的新项目使用 Gradle 2.14.1。对于现有项目,Android Studio 会提示您升级到 Gradle 2.14.1 和 Android plugin for Gradle 2.1.3,这在使用 Gradle 2.14.1 及更高版本时是必需的。
2.1.2(2016 年 6 月)
此更新包含多项细微更改和 bug 修复:
- Instant Run 更新和 bug 修复。
- 改进了 LLDB 性能和崩溃通知。
- 修复了 Android Studio 2.1.1 安全更新中会导致
git rebase
失败的回归问题。
2.1.1(2016 年 5 月)
安全版本更新。
Android N 平台增加了对 Java 8 语言功能的支持,这些功能需要一个名为 Jack 的新实验性编译器。最新版本的 Jack 目前仅在 Android Studio 2.1 中受支持。因此,如果您要使用 Java 8 语言功能,就需要使用 Android Studio 2.1 构建应用。
注意:在您启用 Jack 编译器时,Instant Run 处于停用状态,因为这二者当前不兼容。
尽管 Android Studio 2.1 现已稳定运行,但 Jack 编译器仍处于试验阶段,您必须使用 build.gradle
文件中的 jackOptions
属性来启用它。
除了为支持 N 预览版所做的更改外,Android Studio 2.1 还包含一些次要 bug 修复和以下增强功能:
- 现在,当您使用 N 设备或模拟器并选择 Native 调试程序模式(在运行/调试配置对应的 Debugger 标签页中),Java-aware C++ 调试程序默认处于启用状态。
对于其他构建增强功能(包括增量 Java 编译和 dexing-in-process),请将 Android Plugin for Gradle 更新到版本 2.1.0。
2.0(2016 年 4 月)
注意:如果您要为 N 开发者预览版开发应用,应使用 Android Studio 2.1 预览版。Android Studio 2.0 无法支持以 N 预览版为目标进行开发所需的全部功能。
Instant Run:
- Android Studio 现在部署整洁 build 的速度比以往任何时候都快。此外,将增量代码更改推送到模拟器或实体设备几乎是即时的。您可以查看更新,而无需重新部署新的调试 build;在很多情况下,无需重启应用。
- Instant Run 支持将以下更改推送到正在运行的应用:
- 对现有实例方法或静态方法的实现所做的更改
- 对现有应用资源的更改
- 对结构代码的更改,例如方法签名或静态字段(需要搭载 API 级别 21 或更高级别的目标设备)。
- 如需详细了解 Instant Run,请参阅相关文档。
注意:仅在您部署调试 build 变体、使用 Android Plugin for Gradle 2.0.0 版或更高版本,或者针对
minSdkVersion 15
或更高版本配置应用的模块级build.gradle
文件时,Instant Run 才受支持。为获得最佳性能,请针对minSdkVersion 21
或更高版本配置应用。
lint 新增的内容:
- 使用
@IntDef
注解的整数检查switch
语句,以确保所有常量均已处理。如需快速添加所有缺少的语句,请使用 intent 操作下拉菜单,然后选择 Add Missing @IntDef Constants。 - 用于使用字符串插值在
build.gradle
文件中插入版本号的错误尝试的标记。 - 用于扩展
Fragment
类的匿名类的标记。 - 用于不安全位置(例如
res/
和asset/
文件夹)中的原生代码的标记。此标记会建议将原生代码存储在libs/
文件夹中,然后在安装时将该代码安全打包到应用的data/app-lib/
文件夹中。AOSP:#169950 - 用于对
Runtime.load()
和System.load()
调用的不安全调用的标记。AOSP:#179980 - 通过从菜单栏中依次选择 Refactor > Remove Unused Resources 来查找和移除所有未使用的资源。未使用资源检测现在支持的资源仅限于由未使用的资源、原始文件中的参考(例如
.html
图片参考、以及 Gradle 资源压缩器使用的tools:keep
和tools:discard
属性)所引用的资源,同时考虑非活动源代码集(例如其他 build 变种中使用的资源)并正确处理静态字段导入。 - 检查
minSdkVersion
的所有目标平台是否支持隐式 API 引用。 - 标记
RecyclerView
和Parcelable
的不当使用。 - 现在,系统还会针对
int
数组和可变参数对@IntDef
、@IntRange
和@Size
检查进行检查。
其他方面的改进:
- 针对 Android 模拟器 2.0 进行了优化,使其比以往任何时候速度都快,支持更广泛的虚拟设备,并具有经过显著改进的界面。如需详细了解新模拟器,请参阅 SDK 工具版本说明。
- 对 Android 虚拟设备管理器的改进:
- 系统映像现已归入以下标签页:“Recommended”“x86”和“Other”。
- 在高级设置下,您可以启用多核支持并指定模拟器可以使用的核心数量。
- 在高级设置下,您可以通过选择以下选项之一来确定模拟器上的图形渲染方式:
- Hardware:使用计算机显卡更快地渲染。
- Software:使用基于软件的渲染。
- Auto:让模拟器确定最佳选项。此选项为默认设置。
- 通过在构建应用之前指定部署目标缩短了 AAPT 封装时间。这样,Android Studio 就可以仅封装指定设备所需的资源,从而提高了效率。
- 增加了 Cloud Test Lab 集成,以提供按需应用测试以及便捷、可扩展的云服务。详细了解如何将 Cloud Test Lab 与 Android Studio 搭配使用。
- 添加了新 GPU 调试程序的预览版。对于图形密集型应用,您现在可以可视化地单步调试 OpenGL ES 代码,以优化您的应用或游戏。
- 添加了 Google App Indexing Test。为您的应用添加了对网址、App Indexing 和搜索功能的支持,以协助您提升应用流量,发现最常用的应用内容,以及吸引新用户。在 Android Studio 中测试并验证应用中的网址。请参阅 Android Studio 中支持网址和 App Indexing。
- 最新的 IntelliJ 15 版本升级,包括经过改进的代码分析和性能。有关新功能和增强功能的完整说明,请参阅 IntelliJ 更新内容。
- 现在,XML 编辑器自动填充功能可在填充属性时添加引号。如需检查此选项是否已启用,请打开 Setting 或 Preferences 对话框,依次选择 Editor > General > Smart Keys,然后选中 Add quotes for attribute value on attribute completion 旁边的复选框。问题:195113
- XML 编辑器现在支持对数据绑定表达式的代码补全功能。
Android Studio v1.5.1(2015 年 12 月)
修复的问题和增强功能:
Android Studio v1.5.0(2015 年 11 月)
修复的问题和增强功能:
- 为 Android Monitor 添加了新的内存监视器分析功能。当您查看从此监视器捕获的 HPROF 文件时,显示内容现在更加实用,因此您可以更快地发现问题(例如内存泄漏)。如需使用此监视器,请点击主窗口底部的 Android Monitor。在 Android Monitor 中,点击 Memory 标签页。监视器运行时,点击 Dump Java Heap 图标,然后点击主窗口中的 Captures 并双击该文件进行查看。点击右侧的“Capture Analysis”。(Android Device Monitor 不能与 Android Monitor 同时运行。)
- 添加了新的深层链接和应用链接支持。代码编辑器可以自动为
AndroidManifest.xml
文件中的深层链接创建 intent 过滤器。它还可以生成代码,以帮助您在 Java 文件的 Activity 中集成 App Indexing API。深层链接测试功能可帮助您验证指定的深层链接是否可以启动应用。在“Run/Debug Configurations”对话框的 General 标签页中,您可以指定深层链接启动选项。您还可以使用显示的 Android Monitor logcat 在 activity 中测试 App Indexing API 调用。Androidlint
工具现在会针对某些涉及深层链接和 App Indexing API 的问题发出警告。 - 添加了在代码编辑器中对自定义视图进行代码补全时使用简称的功能。
- 添加了对向 Vector Asset Studio 添加更多
VectorDrawable
元素的支持,以实现向后兼容性。Vector Asset Studio 可使用这些元素将矢量可绘制对象转换为 PNG 光栅图片,以用于 Android 4.4(API 级别 20)及更低版本。 - 为 Android TV 和 Android Auto 添加了新的
lint
检查,以便在 Android Studio 中提供可操作的即时反馈,以及一些快速修复。例如,对于 Android TV,它可以报告权限、不受支持的硬件、uses-feature
元素和缺少横幅问题,并针对其提供快速修复。对于 Android Auto,它可验证从AndroidManifest.xml
文件引用的描述符文件中的正确用法,在MediaBrowserService
类没有 intent 过滤器时进行报告,并识别特定语音操作问题。 - 针对不安全的广播接收器、
SSLCertificateSocketFactory
和HostnameVerifier
类使用以及File.setReadable()
和File.setWritable()
调用添加了新的lint
检查。它还会检测无效的清单资源查询,尤其是对于因配置而异的资源。 - 修复了许多稳定性问题。
Android Studio v1.4.1(2015 年 10 月)
修复的问题和增强功能:
- 修复了 Gradle 模型缓存问题,该问题可能会导致在重启 IDE 时执行过多的 Gradle 同步。
- 修复了原生调试死锁问题。
- 修复了会屏蔽控制系统为 Subversion 1.9 版本的用户的问题。
- 修复了“Device Chooser”对话框问题:在连接未经授权的设备后,您无法再选择模拟器。问题:189658
- 修复了对于在区域中具有区域限定符和翻译内容的语言区域,翻译错误报告不准确的问题(但基础语言区域中不存在此问题)。问题:188577
- 修复了 Theme Editor 中与布局编辑器的互动相关的死锁问题。问题:188070
- 修复了 Theme Editor 重新加载和修改冲突会导致属性无法正确更新的问题。(问题:187726)
- 改进了 Theme Editor 的性能。
- 修复了清单中忽略
android:required
属性的问题。问题:187665
Android Studio v1.4.0(2015 年 9 月)
修复的问题和增强功能:
- 添加了 Vector Asset Studio 工具,用于导入矢量图形,例如 Material 图标和 SVG 文件。如需使用此工具,请在 Project 窗口的 Android 视图中,右键点击 res 文件夹,然后依次选择 New > Vector Asset。
- 添加了新的 Android Monitor 功能、GPU 和网络。如需使用此类监视器,请点击主窗口底部的 Android Monitor。Android Device Monitor 不能与 Android Monitor 同时运行。
- 添加了 Theme Editor 的早期预览版。如需使用此功能,请依次选择 Tools > Android > Theme Editor。
- 更新了设计支持库的 Android 模板。模板现在包含对 Material Design 规范的支持以及
appcompat
支持库,以实现向后兼容性。
Android Studio v1.3.2(2015 年 8 月)
修复的问题和增强功能:
Android Studio v1.3.1(2015 年 8 月)
修复的问题和增强功能:
- 修复了对在 Windows 上创建 Android Wear Android 虚拟设备 (AVD) 的支持。
- 更新了“Project Wizard”以使用输入的项目名称。
- 添加了对允许 Android SDK 存储在只读目录中的支持。
- Android plugin for Gradle 版本已更新为 1.3.0。
- 修复了从 Android 调试桥 (adb) Unix shell 启动调试会话的问题。
- 修复了 Java 软件包重命名消息,以显示正确的软件包名称。
Android Studio v1.3.0(2015 年 7 月)
修复的问题和增强功能:
- 添加了通过 Android Studio 在您的应用中启用 Google AdMob 和 Google Analytics 等开发者服务的选项。
- 添加了其他注解,例如
@RequiresPermission
、@CheckResults
和@MainThread
。 - 添加了通过 Memory Monitor 生成 Java 堆转储和分析线程分配的功能。您还可以在 Android Studio 中将 Android 专属 HPROF 二进制格式文件转换为标准 HPROF 格式。
- 将 SDK 管理器集成到了 Android Studio 中,以简化软件包和工具访问并提供更新通知。
注意:独立 SDK 管理器仍可从命令行运行,不过,我们建议仅将其与独立安装的 SDK 结合使用。
- 在模拟器控制台中添加了
finger
命令,以模拟指纹身份验证。 - 添加了
<public>
资源声明,以将库资源指定为公开和私有资源。注意:需要 Android plugin for Gradle 版本 1.3 或更高版本。
- 添加了数据绑定支持,以创建将应用逻辑绑定到布局元素的声明式布局。
- 添加了对单独测试 APK 模块的支持,以在 Android Studio 中构建测试 APK。
- 更新了 AVD 管理器,添加了 HAXM 优化和经过改进的通知。
- 添加了对 QEMU 2.1 的 64 位 ARM 和 MIPS 模拟器支持。
- 通过添加快速修复(例如自动生成 Parcelable 实现),简化了 Lint 警告的解决方法。
- 添加了对快速插入代码段的实时模板支持。
Android Studio v1.2.2(2015 年 6 月)
修复的问题和增强功能:
- 修复了会阻碍构建完成的 build 问题。
Android Studio v1.2.1(2015 年 5 月)
修复的问题和增强功能:
- 修复了不严重的性能和功能问题。
Android Studio v1.2.0(2015 年 4 月)
修复的问题和增强功能:
- 更新了 Android 运行时窗口以包含 Memory Monitor 工具,并添加了一个用于监控 CPU 性能的标签页。
- 在左侧空白处添加了一个“Captures”标签页,以显示捕获的内存和 CPU 性能数据文件,例如 CPU 方法跟踪和内存堆快照。
- 通过额外的元数据注解和推断的可为 null 性扩展了注解支持。
- 增强了翻译编辑器,并对现行最佳实践 (BCP) 47(它使用 3 个字母的语言和区域代码)提供额外的支持。
- 集成了 IntelliJ 14 和 14.1 功能,使代码分析和性能得到改进:
-
- 增强了调试功能,以显示变量和引用对象的内嵌值,以及执行 lambda 和运算符表达式的内嵌计算。
- 为标签页和缩进尺寸添加了代码样式检测。
- 为没有项目文件的代码实验和原型设计添加了临时文件。
- 添加了在 HTML 和 XML 文件中同时插入起始和结束标记的功能。
- 添加了一个内置的 Java 类反编译器,以便您可以查看未提供源代码的库中的内容。
有关新功能和增强功能的完整说明,请参阅 IntelliJ 更新内容。
- 为临时文件、项目文件、问题、生产和测试添加了额外的项目视图,以增强项目管理和访问。
- 增强了 File > Settings 菜单和对话框,以改进设置访问和管理功能。
- 添加了对 Windows 和 Linux 的高密度显示屏的支持。
- 添加了对
res/drawable-280dpi/
文件夹中的 280 dpi 资源的支持。
Android Studio v1.1.0(2015 年 2 月)
各种修复的问题和增强功能:
- 添加了对 Android Wear 手表模板的支持。
- 修改了新的项目和模块创建,以包含用于特定密度专用启动器图标的
res/mipmap
文件夹。这些res/mipmap
文件夹会替换用于启动器图标的res/drawable
文件夹。 - 更新了启动器图标以获得 Material Design 外观并添加了
xxxhdpi
启动器图标。 - 添加并增强了针对区域和语言组合、启动器图标、资源名称以及其他常见代码问题的 Lint 检查。
- 添加了对现行最佳做法 (BCP) 语言标记 47 的支持。
Android Studio v1.0.1(2014 年 12 月)
各种修复的问题和增强功能:
- 修复了 AVD 管理器和 device.xml 文件锁定问题。
- 修复了 Windows 系统上的模拟器日志问题。
- 修复了使用安装在 Windows 系统的不同驱动器上的 Android Studio 和 Android SDK 创建 AVD 的问题。
- 将新下载内容的默认更新渠道设置为 Stable。如果您安装了 1.0.0 版 Android Studio,并且想要获得可用于生产环境的稳定版更新,请依次选择 File > Settings > Updates 以切换到 Stable 更新渠道。
Android Studio v1.0(2014 年 12 月)
Android Studio 初始版本。
Android Studio v0.8.14(2014 年 10 月)
如需查看更改的完整列表,请访问 tools.android.com。
Android Studio v0.8.6(2014 年 8 月)
要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.8.0(2014 年 6 月)
添加了对 Android Wear 项目的支持。
要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.5.2(2014 年 5 月)
- 要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.4.6(2014 年 3 月)
- 要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.4.2(2014 年 1 月)
- 要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.3.2(2013 年 10 月)
- 要查看更改的完整列表,请参阅 tools.android.com。
Android Studio v0.2.x(2013 年 7 月)
- 合并到最新的 IntelliJ 代码库更改中。包括针对 Studio 用户所报告的问题的修复,例如对 Linux 字体大小和字体呈现进行调整。
- Android Gradle 插件更新为 0.5.0 版。
注意:此新版本不向后兼容。 打开使用旧版插件的项目时,Studio 会显示内容为 Gradle <project_name> project refresh failed 的错误消息。
更新后的 Gradle 插件包含以下更改:
- 修复了 IDE 模型以包含输出文件,即使它是通过 DSL 自定义的。还修复了 DSL 以获取/设置变量对象上的输出文件,这样就不必使用
variant.packageApplication or variant.zipAlign
- 修复了依赖项解析问题,以便我们一起解析默认配置、build 类型和变种的组合(而不是单独解析)。
- 修复了库项目测试的依赖项,以正确包含库本身的所有依赖项。
- 修复了两个依赖项具有相同叶名的问题。
- 修复了无法对特性应用 Proguard 规则文件的问题。
如需查看所有 Gradle 插件版本说明,请访问 http://tools.android.com/tech-docs/new-build-system。
- 修复了 IDE 模型以包含输出文件,即使它是通过 DSL 自定义的。还修复了 DSL 以获取/设置变量对象上的输出文件,这样就不必使用
- 来自 aapt 的 Gradle 错误不再指向 build/ 文件夹中的合并输出文件,而是指回真实的源位置。
- 并行构建。现在可以使用 Gradle 的并行构建。请注意,并行构建处于“孵化”阶段(请查看 Gradle 的文档)。默认情况下,此功能处于关闭状态。如需启用此功能,请依次转到 Preferences > Compiler,然后选中“Compile independent modules in parallel”复选框。
- 进一步优化了用于在编辑器中呈现布局和折叠资源等用途的新资源存储区:
- 对 .aar 库依赖项的基本支持(例如,使用不含源文件的本地副本的库)。仍不适用于源编辑器中的资源 XML 验证和导航。
- 资源引用中的循环检测。
- 快速文档 (F1),可在文字插入点下显示相应字符串的所有译文,现在还将显示来自各种 Gradle 变种和构建类型以及库的所有资源叠加层。它们按资源叠加层逆序列出,并在已遮盖的字符串版本上添加了删除线。
- 修复了在模块依赖项集发生更改时如何更新合并资源的问题。
- 修复了 XML 呈现问题,以正确处理字符实体声明以及 XML 和 Unicode 转义。
- 针对布局预览和布局编辑器窗口的“保存屏幕截图”支持。
- 修复了模板 bug。
- 修复了 lint bug。
- 对崩溃报告进行了各种修复。非常感谢,您可以继续提交崩溃报告了!
Android Studio v0.1.x(2013 年 5 月)
- 修复了各种 bug,包括修复了常见的 Windows 安装问题。
旧版 Android Gradle 插件
3.6.0(2020 年 2 月)
此版本的 Android 插件需要使用以下工具:
-
Gradle 5.6.4。如需了解详情,请参阅有关更新 Gradle 的部分。
-
SDK Build Tools 28.0.3 或更高版本。
新功能
此版本的 Android Gradle 插件包含以下新功能。
视图绑定
在代码中引用视图时,视图绑定可确保编译时安全性。您现在可以将 findViewById()
替换为自动生成的绑定类引用。如需开始使用视图绑定,请在每个模块的 build.gradle
文件中添加以下代码:
android { viewBinding.enabled = true }
android { viewBinding.enabled = true }
如需了解详情,请参阅视图绑定文档。
支持 Maven Publish 插件
Android Gradle 插件支持 Maven Publish Gradle 插件,可让您将 build 工件发布到 Apache Maven 制品库。Android Gradle 插件会为应用或库模块中的每个 build 变体工件创建一个组件,您可以使用它来自定义要发布到 Maven 制品库的发布内容。
如需了解详情,请访问介绍如何使用 Maven Publish 插件的页面。
新的默认打包工具
在构建应用的调试版本时,该插件会使用一个新的打包工具 zipflinger 来构建 APK。这一新工具应该能够提高构建速度。如果新的打包工具无法正常运行,请报告 bug。您可以通过在 gradle.properties
文件中添加以下代码来恢复使用旧的打包工具:
android.useNewApkCreator=false
原生构建属性
您现在可以确定 Clang 构建和链接项目中的每个 C/C++ 文件所需的时间。Gradle 可以生成包含这些编译器事件时间戳的 Chrome 跟踪记录,以便您更清楚地了解构建项目所需的时间。如需生成此构建属性文件,请执行以下操作:
-
在运行 Gradle build 时添加标记
-Pandroid.enableProfileJson=true
。例如:gradlew assembleDebug -Pandroid.enableProfileJson=true
-
打开 Chrome 浏览器,然后在搜索栏中输入
chrome://tracing
。 -
点击 Load 按钮并导航到
<var>project-root</var>/build/android-profile
以查找文件。该文件的名称为profile-<var>timestamp</var>.json.gz
。
您可以在查看器顶部附近查看原生构建属性数据:
行为变更
使用此版本的插件时,您可能会遇到以下行为方面的变更。
默认情况下,原生库以未压缩的形式打包
在构建应用时,插件现在默认会将 extractNativeLibs
设置为 "false"
。也就是说,您的原生库将保持页面对齐状态并以未压缩的形式打包。虽然这样会增加上传大小,但您的用户会从以下优势中受益:
- 减小应用安装大小,因为平台可以直接从已安装的 APK 访问原生库,而无需创建库的副本。
- 减小下载文件大小,因为在 APK 或 Android App Bundle 中添加未压缩的原生库通常可提高 Play 商店的压缩率。
如果您希望 Android Gradle 插件改为打包压缩后的原生库,请在应用的清单中添加以下代码:
<application
android:extractNativeLibs="true"
... >
</application>
注意:extractNativeLibs
清单属性已被 useLegacyPackaging
DSL 选项取代。如需了解详情,请参阅版本说明使用 DSL 打包压缩的原生库。
默认 NDK 版本
现在,如果您下载了多个版本的 NDK,Android Gradle 插件会选择一个默认版本来编译源代码文件。以前,该插件选择的是最新下载的 NDK 版本。使用模块的 build.gradle
文件中的 android.ndkVersion
属性可替换插件选择的默认版本。
简化了 R 类的生成过程
Android Gradle 插件通过仅为项目中的每个库模块生成一个 R 类并与其他模块依赖项共享这些 R 类,简化了编译类路径。这项优化应该会加快构建速度,但您需要注意以下事项:
- 由于编译器与上游模块依赖项共享 R 类,因此项目中的每个模块都必须使用独一无二的软件包名称。
- 库的 R 类对其他项目依赖项的可见性取决于用于将库添加为依赖项的配置。例如,如果库 A 将库 B 添加为“api”依赖项,则库 A 和其他依赖于库 A 的库都可以访问库 B 的 R 类。不过,如果库 A 使用
implementation
依赖项配置,其他库可能就无权访问库 B 的 R 类。如需了解详情,请参阅依赖项配置。
移除默认配置中缺少的资源
对于库模块,如果您添加了未包含在默认资源集内的语言资源(例如,将 hello_world
作为字符串资源添加到 /values-es/strings.xml
中,但未在 /values/strings.xml
中定义该资源),Android Gradle 插件在编译项目时将不会再添加该资源。这种行为变更应该会减少 Resource Not Found
运行时异常,并提高构建速度。
D8 现在遵循注解的类保留政策
现在,在编译应用时,D8 会遵循注解应用的类保留政策,并且这些注解在运行时不再可用。将应用的目标 SDK 设置为 API 级别 23 时,也存在此行为;此前,在使用旧版本的 Android Gradle 插件和 D8 编译应用时,会允许在运行时访问这些注解。
其他行为变更
-
aaptOptions.noCompress
在所有平台(针对 APK 和软件包)上都不再区分大小写,并且遵循使用大写字符的路径。 -
现在,数据绑定默认为增量式。如需了解详情,请参阅问题 #110061530。
-
现在,包括 Roboelectric 单元测试在内的所有单元测试都可以完全缓存。如需了解详情,请参阅问题 #115873047。
bug 修复
此版本的 Android Gradle 插件包含以下 bug 修复:
- 现在,使用数据绑定的库模块支持 Robolectric 单元测试。如需了解详情,请参阅问题 #126775542。
- 现在,您可在启用 Gradle 的并行执行模式的情况下跨多个模块运行
connectedAndroidTest
任务。
已知问题
本部分介绍 Android Gradle 插件 3.6.0 中存在的已知问题。
Android lint 任务的执行速度过慢
Android lint 由于解析基础架构性能降低,导致在某些代码构造中对 lambda 的推断类型的计算速度变慢,因此可能需要更长时间才能完成某些项目。
此问题会报告为 IDEA bug,并将在 Android Gradle 插件 4.0 中修复。
缺少清单类 {:#agp-missing-manifest}
如果您的应用在其清单中定义自定义权限,Android Gradle 插件通常会生成 Manifest.java
类,用于以字符串常量的形式添加您的自定义权限。该插件会将此类与您的应用打包在一起,以便于您在运行时更轻松地引用这些权限。
在 Android Gradle 插件 3.6.0 中无法生成清单类。如果您使用此版本的插件构建应用,并且该应用引用了清单类,您可能会看到 ClassNotFoundException
异常。如需解决此问题,请执行以下某项操作:
-
通过完全限定名称引用自定义权限。例如
"com.example.myapp.permission.DEADLY_ACTIVITY"
。 -
定义您自己的常量,如下所示:
public final class CustomPermissions { public static final class permission { public static final String DEADLY_ACTIVITY="com.example.myapp.permission.DEADLY_ACTIVITY"; } }
3.5.0(2019 年 8 月)
Android Gradle 插件 3.5.0 和 Android Studio 3.5 是一个主要版本,同时也是 Project Marble 计划的成果,该计划主要围绕 Android 开发者工具的三大核心领域进行改进,分别是系统运行状况、功能完善和 bug 修复。值得注意的是,此次更新的重中之重是提高项目的构建速度。
如需详细了解这些更新以及其他 Project Marble 更新,请参阅 Android 开发者博文或以下几个部分。
此版本的 Android 插件需要使用以下工具:
-
Gradle 5.4.1。如需了解详情,请参阅有关更新 Gradle 的部分。
-
SDK Build Tools 28.0.3 或更高版本。
此次要更新支持与 Android 11 中软件包可见性的新默认设置和功能兼容。
如需了解详情,请参阅 4.0.1 版本说明。
3.5.3(2019 年 12 月)
本次要更新对 Android Studio 3.5.3 构成补充,修复了各种 bug 并做出了多项性能改进。
3.5.2(2019 年 11 月)
此次要更新对 Android Studio 3.5.2 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
3.5.1(2019 年 10 月)
此次要更新对 Android Studio 3.5.1 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
增量注解处理
如果您在 gradle.properties
文件中设置了 android.databinding.incremental=true
,数据绑定注解处理器支持增量注解处理。这项优化提高了增量构建的性能。要查看经过优化的注释处理器的完整列表,请参阅增量注释处理器表格。
此外,KAPT 1.3.30 及更高版本也支持增量注释处理器,您可以通过在 gradle.properties
文件中添加 kapt.incremental.apt=true
来启用此支持。
可缓存的单元测试
通过将 includeAndroidResources
设置为 true
,您可以允许单元测试使用 Android 资源、资产和清单,此时 Android Gradle 插件会生成包含绝对路径的测试配置文件,绝对路径会打破缓存可再定位性。您可以在 gradle.properties
文件中添加以下代码,指示插件改为使用相对路径生成测试配置,这会使 AndroidUnitTest
任务可进行完全缓存:
android.testConfig.useRelativePath = true
已知问题
-
在使用 Kotlin Gradle 插件 1.3.31 或更早版本时,您可能会在构建或同步项目时看到以下警告:
WARNING: API 'variant.getPackageLibrary()' is obsolete and has been replaced with 'variant.getPackageLibraryProvider()'.
如需解决此问题,请将插件升级到 1.3.40 或更高版本。
3.4.0(2019 年 4 月)
此版本的 Android 插件需要使用以下工具:
-
Gradle 5.1.1 或更高版本。如需了解详情,请参阅有关更新 Gradle 的部分。
注意:如果使用的是 Gradle 5.0 及更高版本,默认的 Gradle 守护程序内存堆大小会从 1 GB 降到 512 MB。这可能会导致构建性能降低。如需替换此默认设置,请在项目的
gradle.properties
文件中指定 Gradle 守护程序堆大小。 -
SDK Build Tools 28.0.3 或更高版本。
此次要更新支持与 Android 11 中软件包可见性的新默认设置和功能兼容。
如需了解详情,请参阅 4.0.1 版本说明。
3.4.2(2019 年 7 月)
此次要更新对 Android Studio 3.4.2 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
3.4.1(2019 年 5 月)
此次要更新对 Android Studio 3.4.1 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
新功能
-
新的 lint 检查依赖项配置:更改了
lintChecks
的行为并引入了新的依赖项配置lintPublish
,以便您可以更好地控制要将哪些 lint 检查打包到 Android 库中。-
lintChecks
:您应该将这个现有配置用于您想仅在本地构建项目时运行的 lint 检查。您如果之前使用lintChecks
依赖项配置将 lint 检查包含在已发布的 AAR 中,需要迁移这些依赖项并改用新的lintPublish
配置(如下所述)。 -
lintPublish
:针对您想要在已发布的 AAR 中包含的 lint 检查,在库项目中使用这个新配置(如下所示)。这意味着,使用库的项目也会应用那些 lint 检查。
以下代码示例在本地 Android 库项目中使用这两个依赖项配置。
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks project(':lint') // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish project(':lintpublish') }
dependencies { // Executes lint checks from the ':lint' project at build time. lintChecks(project(":lint")) // Packages lint checks from the ':lintpublish' in the published AAR. lintPublish(project(":lintpublish")) }
-
一般来说,打包任务和为任务签名应该会加快整体构建速度。如果您发现与这些任务相关的性能退化,请报告 bug。
-
行为变更
-
Android 免安装应用功能插件废弃警告:如果您仍在使用
com.android.feature
插件构建免安装应用,Android Gradle 插件 3.4.0 会向您发出废弃警告。为了确保您仍然可以在未来版本的插件上构建您的免安装应用,请迁移免安装应用,以使用动态功能插件,这样您还可以通过单个 Android App Bundle 发布安装式应用和免安装应用。 -
R8 默认处于启用状态:R8 将脱糖、压缩、混淆、优化和 dex 处理整合到了一个步骤中,从而显著提高了构建性能。R8 是在 Android Gradle 插件 3.3.0 中引入的,对于使用插件 3.4.0 及更高版本的应用和 Android 库项目,R8 现已默认处于启用状态。
下图是引入 R8 之前的编译流程的简要概览。
现在,有了 R8,可以在一个步骤中完成脱糖、压缩、混淆、优化和 dex 处理 (D8),如下图所示。
请注意,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 都是如此。
-
ndkCompile
已废弃:现在,如果您尝试使用ndkBuild
编译原生库,将会遇到构建错误。您应改用 CMake 或 ndk-build 将 C 和 C++ 代码添加到项目中。
已知问题
-
虽然目前并未强制要求正确使用唯一软件包名称,但在以后的插件版本中这项要求会变得更为严格。在 Android Gradle 插件版本 3.4.0 上,您可以将下面这行代码添加到
gradle.properties
文件中,选择检查项目是否声明了可接受的软件包名称。android.uniquePackageNames = true
如需详细了解如何通过 Android Gradle 插件设置软件包名称,请参阅设置应用 ID 部分。
3.3.0(2019 年 1 月)
此版本的 Android 插件需要使用以下工具:
-
Gradle 4.10.1 或更高版本。如需了解详情,请参阅有关更新 Gradle 的部分。
注意:如果使用的是 Gradle 5.0 及更高版本,默认的 Gradle 守护程序内存堆大小会从 1 GB 降到 512 MB。这可能会导致构建性能降低。如需替换此默认设置,请在项目的
gradle.properties
文件中指定 Gradle 守护程序堆大小。 -
SDK Build Tools 28.0.3 或更高版本。
此次要更新支持与 Android 11 中软件包可见性的新默认设置和功能兼容。
如需了解详情,请参阅 4.0.1 版本说明。
3.3.2(2019 年 3 月)
此次要更新对 Android Studio 3.3.2 构成补充,修复了各种 bug 并进行了多项性能改进。要查看重要问题修复列表,请阅读版本更新博客上的相关博文。
3.3.1(2019 年 2 月)
此次要更新对 Android Studio 3.3.1 构成补充,修复了各种 bug 并进行了多项性能改进。
新功能
-
改进了类路径同步:在解析对运行时和编译时类路径的依赖项时,Android Gradle 插件会尝试解决出现在多个类路径中的依赖项的某些下游版本冲突问题。
例如,如果运行时类路径包含库 A 版本 2.0,而编译类路径包含库 A 版本 1.0,则插件会自动将对编译类路径的依赖关系更新为库 A 版本 2.0,以避免错误。
不过,如果运行时类路径包含库 A 版本 1.0,而编译类路径包含库 A 版本 2.0,则插件不会将编译类路径的依赖项降级为库 A 版本 1.0,并且您会遇到错误。如需了解详情,请参阅解决类路径之间的冲突问题部分。
-
改进了使用注解处理器时的增量 Java 编译:此更新改进了对使用注解处理器时的增量 Java 编译的支持,从而缩短了构建时间。
注意:此功能与 Gradle 4.10.1 及更高版本兼容;但由于 Gradle 问题 8194,此功能与 Gradle 5.1 并不兼容。
-
对于使用 Kapt 的项目(大多数仅使用 Kotlin 的项目和混合使用 Kotlin-Java 的项目):即使使用数据绑定或 retro-lambda 插件,也会启用增量 Java 编译。Kapt 任务进行的注解处理尚非增量处理。
-
对于不使用 Kapt 的项目(仅使用 Java 的项目):如果您使用的注解处理器都支持增量注解处理,就会默认启用增量 Java 编译。如需监控增量注解处理器的采用情况,请查看 Gradle 问题 5277。
但是,如果有一个或多个注解处理器不支持增量构建,便不会启用增量 Java 编译。不过,您可以在
gradle.properties
文件中添加以下标志:android.enableSeparateAnnotationProcessing=true
添加此标志后,Android Gradle 插件会在一个单独的任务中执行注解处理器,并允许 Java 编译任务以增量方式运行。
-
-
使用过时 API 时显示更详细的调试消息:现在,当插件检测到您使用的 API 已不再受支持时,会提供更详细的信息,以帮助您确定该 API 的使用位置。如需查看其他信息,您需要在项目的
gradle.properties
文件中添加以下代码:android.debug.obsoleteApi=true
您还可以通过在命令行中传递
-Pandroid.debug.obsoleteApi=true
来启用此标记。 -
您可以从命令行对功能模块运行插桩测试。
行为变更
-
延迟任务配置:现在,插件会使用 Gradle 的新任务创建 API 来避免初始化和配置完成当前 build 不需要的任务(或执行任务图表上未列出的任务)。例如,如果您有多个 build 变体(如“发布”和“调试”build 变体),并且正在构建应用的“调试”版本,插件会避免初始化和配置应用“发布”版本的任务。
如果调用 Variants API 中的某些旧方法(例如
variant.getJavaCompile()
),可能仍会强制执行任务配置。为了确保您的 build 会针对延迟任务配置进行优化,请调用返回 TaskProvider 对象(例如variant.getJavaCompileProvider()
)的新方法。如果您执行自定义 build 任务,请了解如何适应 Gradle 的新任务创建 API。
-
对于指定的 build 类型,在设置
useProguard false
时,插件现在会使用 R8(而不是 ProGuard)压缩和混淆应用的代码和资源。如需详细了解 R8,请参阅 Android 开发者博客上的这篇博文。 -
为库项目更快地生成 R 类:以前,Android Gradle 插件会为项目的每个依赖项生成一个
R.java
文件,然后将这些 R 类和应用的其他类一起编译。现在,插件会直接生成包含应用的已编译 R 类的 JAR,而不会先构建中间的R.java
类。这项优化不仅可以显著提升包含多个库子项目和依赖项的项目的构建性能,还可以加快在 Android Studio 中编制索引的速度。 -
构建 Android App Bundle 时,由以 Android 6.0(API 级别 23)或更高版本为目标平台的 App Bundle 生成的 APK 现在默认包含原生库的未压缩版本。这项优化无需设备创建库的副本,因此减少了应用占用的存储空间。如果您想要停用此优化,请在
gradle.properties
文件中添加以下代码:android.bundle.enableUncompressedNativeLibs = false
-
插件会强制实施某些第三方插件的最低版本。
-
单变体项目同步:将项目与 build 配置同步是让 Android Studio 了解项目结构的重要步骤。不过,对于大型项目,此过程可能非常耗时。如果您的项目使用了多个 build 变体,那么您现在可以限定仅同步当前所选的变体,从而优化项目同步操作。
您需要结合使用 Android Studio 3.3 或更高版本与 Android Gradle 插件 3.3.0 或更高版本,才能启用此优化。满足这些要求后,Android Studio 会在您同步项目时提示您启用此优化。默认情况下,新项目也会启用此优化。
如需手动启用此优化,请依次点击 File > Settings > Experimental > Gradle(在 Mac 上,请依次点击 Android Studio > Preferences > Experimental > Gradle),然后选中 Only sync the active variant 复选框。
注意:此优化完全支持包含 Java 和 C++ 语言的项目,部分支持包含 Kotlin 语言的项目。在为包含 Kotlin 内容的项目启用此优化时,Gradle 同步会回退到在内部使用完整的变体。
-
自动下载缺失的 SDK 软件包:此功能已经过扩展,可支持 NDK。如需了解详情,请参阅 Gradle 自动下载缺失软件包部分。
bug 修复
-
Android Gradle 插件 3.3.0 修复了以下问题:
- 尽管启用了 Jetifier,但构建流程调用的是
android.support.v8.renderscript.RenderScript
,而不是 AndroidX 版本 - 由于以下原因引起的冲突:
androidx-rs.jar
包含静态绑定的annotation.AnyRes
- 使用 RenderScript 时,不必再在
build.gradle
文件中手动设置 Build Tools 版本
- 尽管启用了 Jetifier,但构建流程调用的是
3.2.0(2018 年 9 月)
此版本的 Android 插件需要使用以下工具:
- Gradle 4.6 或更高版本。如需了解详情,请参阅有关更新 Gradle 的部分。
- SDK Build Tools 28.0.3 或更高版本。
3.2.1(2018 年 10 月)
通过此次更新,您无需再为 SDK Build Tools 指定版本。Android Gradle 插件现在默认使用版本 28.0.3。
新功能
-
支持构建 Android App Bundle:App Bundle 是一种全新的上传格式,其中包含应用的所有经过编译的代码和资源,但 APK 生成及签名工作则由 Google Play 商店完成。您无需再构建、签署和管理多个 APK,而用户也可以获得更小且已针对其设备优化的下载内容。如需了解详情,请参阅 Android App Bundle 简介一文。
-
支持在使用注解处理器时加快增量构建速度:
AnnotationProcessorOptions
DSL 现在会扩展CommandLineArgumentProvider
,这可让您或注解处理器创建者使用增量 build 属性类型注解来注解处理器的参数。使用这些注解可提高增量和缓存整洁 build 的正确性和性能。如需了解详情,请参阅向注解处理器传递参数部分。 -
适用于 AndroidX 的迁移工具:在搭配使用 Android Gradle 插件 3.2.0 与 Android 3.2 及更高版本时,您可迁移项目的本地依赖项和 Maven 依赖项,以使用新的 AndroidX 库,方法是从菜单栏中依次选择 Refactor > Migrate to AndroidX。使用此迁移工具还会在
gradle.properties
文件中将以下标记设置为true
:-
android.useAndroidX
:如果设置为true
,Android 插件会使用对应的 AndroidX 库,而非支持库。如未指定此标记,该插件会默认将其设置为false
。 -
android.enableJetifier
:如果设置为true
,Android 插件会通过重写其二进制文件来自动迁移现有的第三方库,以使用 AndroidX。如未指定此标记,该插件会默认将其设置为false
。只有在android.useAndroidX
也被设置为true
时,您才能将此标记设置为true
,否则会遇到构建错误。如需了解详情,请参阅 AndroidX 概览。
-
-
新的代码缩减器 R8:R8 是一种执行代码缩减和混淆的新工具,替代了 ProGuard。您只需将以下代码添加到项目的
gradle.properties
文件中,即可开始使用 R8 的预览版本:android.enableR8 = true
android.enableR8 = true
行为变更
-
使用 D8 进行脱糖的功能现已默认处于启用状态。
-
AAPT2 现在位于 Google 的 Maven 制品库中。如需使用 AAPT2,请确保您的
build.gradle
文件中包含google()
依赖项,如下所示:buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
buildscript { repositories { google() // here jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.2.0' } } allprojects { repositories { google() // and here jcenter() }
-
原生 MultiDex 现已默认处于启用状态。以前版本的 Android Studio 会在将应用的调试版本部署到搭载 Android API 级别 21 或更高级别的设备时启用原生 MultiDex。现在,无论您是要部署到设备,还是要构建 APK 以供发布,Android Gradle 插件都会针对所有设置为
minSdkVersion=21
(或更高版本)的模块启用原生多 MultiDex。 -
该插件现在会强制执行最低版本的 protobuf 插件 (0.8.6)、Kotlin 插件 (1.2.50) 和 Crashlytics 插件 (1.25.4)。
-
在指定模块名称时,功能模块插件
com.android.feature
现在强制要求仅使用字母、数字和下划线。例如,如果功能模块名称包含短划线,您会遇到构建错误。此行为与动态功能插件的行为相符。
bug 修复
- JavaCompile 现在可以在具有数据绑定的项目中缓存。(问题 69243050)
- 为启用了数据绑定的库模块提供更好的避免编译功能。(问题 77539932)
- 如果您因为一些不可预知的构建错误而在早期版本中停用了按需配置,现在可以重新启用。(问题 #77910727)
3.1.0(2018 年 3 月)
此版本的 Android 插件需要使用以下工具:
-
Gradle 4.4 或更高版本。
如需了解详情,请参阅有关更新 Gradle 的部分。
-
Build Tools 27.0.3 或更高版本。
请注意,您不必再使用
android.buildToolsVersion
属性指定 Build Tools 的版本。默认情况下,该插件会使用所需的最低版本。
新的 DEX 编译器 (D8)
默认情况下,Android Studio 现在会使用名为 D8 的新 DEX 编译器。DEX 编译是指针对 Android 运行时(对于较早版本的 Android,则针对 Dalvik)将 .class
字节码转换为 .dex
字节码的过程。与之前的编译器(称为 DX)相比,D8 的编译速度更快,输出的 DEX 文件更小,同时却能保持相同甚至更出色的应用运行时性能。
D8 应该不会改变您的日常应用开发工作流程。但是,如果您遇到与新编译器有关的任何问题,请报告 bug。您可以在项目的 gradle.properties
文件中添加以下代码,暂时停用 D8 并使用 DX:
android.enableD8=false
对于使用 Java 8 语言功能的项目,系统会默认启用增量脱糖。您可以在项目的 gradle.properties
文件中添加以下代码,停用增量脱糖:
android.enableIncrementalDesugaring=false.
预览版用户:如果您已在使用预览版 D8,则请注意,D8 现在会针对 SDK Build Tools(而非 JDK)中包含的库进行编译。因此,如果您访问的 API 存在于 JDK 而非 SDK Build Tools 库中,则会收到编译错误。
行为变更
-
在构建分别以不同 ABI 为目标的多个 APK 时,默认情况下,插件不会再针对以下 ABI 生成 APK:
mips
、mips64
和armeabi
。如果您想构建以上述 ABI 为目标的 APK,必须使用 NDK r16b 或更低版本,并在
build.gradle
文件中指定这些 ABI,如下所示:splits { abi { include 'armeabi', 'mips', 'mips64' ... } }
splits { abi { include("armeabi", "mips", "mips64") ... } }
-
现在,Android 插件的构建缓存会排除超过 30 天的缓存条目。
-
将
"auto"
传递给resConfig
不会再自动选择要打包到 APK 中的字符串资源。如果继续使用"auto"
,该插件会打包应用及其依赖项提供的所有字符串资源。因此,您应该指定希望插件打包到 APK 中的各个语言区域。 -
由于本地模块不能依赖应用的测试 APK,因此使用
androidTestApi
配置(而非androidTestImplementation
)将依赖项添加到插桩测试中会导致 Gradle 发出以下警告:WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
WARNING: Configuration 'androidTestApi' is obsolete and has been replaced with 'androidTestImplementation'
修复的问题
- 修复了 Android Studio 无法正确识别复合构建中的依赖项这一问题。
- 修复了以下问题:如果在进行单次构建时多次加载 Android 插件(例如,有多个子项目,并且每个子项目的 buildscript 类路径中都包含 Android 插件),您会遇到项目同步错误。
3.0.0(2017 年 10 月)
Android Gradle 插件 3.0.0 包含各种旨在解决大型项目性能问题的更改。
例如,在一个具有大约 130 个模块和大量外部依赖项但没有代码或资源的示例框架项目上,您可以体验到与以下类似的性能提升:
Android 插件版本 + Gradle 版本 | Android 插件 2.2.0 + Gradle 2.14.1 | Android 插件 2.3.0 + Gradle 3.3 | Android 插件 3.0.0 + Gradle 4.1 |
---|---|---|---|
配置(例如,运行 ./gradlew --help ) |
大约 2 分钟 | 大约 9 秒 | 大约 2.5 秒 |
1 行 Java 更改(实现更改) | 大约 2 分 15 秒 | 大约 29 秒 | 大约 6.4 秒 |
其中某些更改会让现有 build 出现异常。因此,您应该考虑在使用新插件之前迁移您的项目。
如果您没有体验到上述性能提升,请提交 bug 并使用 Gradle 性能分析器添加 build 的轨迹。
此版本的 Android 插件需要使用以下工具:
- Gradle 4.1 或更高版本。如需了解详情,请参阅有关更新 Gradle 的部分。
-
Build Tools 26.0.2 或更高版本。经过此次更新,您无需再指定 Build Tools 的版本。默认情况下,该插件会使用所需的最低版本。因此,您现在可以移除
android.buildToolsVersion
属性了。
3.0.1(2017 年 11 月)
此次要更新对 Android Studio 3.0.1 构成补充,修复了各种 bug 并进行了多项性能改进。
优化
- 通过精细控制的任务图提升了多模块项目的并行性。
- 更改依赖项时,Gradle 通过不重新编译无法访问该依赖项 API 的模块来加快构建速度。您应利用 Gradle 的新依赖项配置(
implementation
、api
、compileOnly
和runtimeOnly
)限制哪些依赖项会将其 API 泄露给其他模块。 - 借助每个类的 dex 处理,可加快增量构建速度。每个类现在都会编译成单独的 DEX 文件,并且只会对修改过的类重新进行 dex 处理。对于将
minSdkVersion
设置为 20(或更低数值)并使用旧版 MultiDex 的应用,构建速度应该也会得到改善。 - 通过优化某些任务来使用缓存的输出,从而加快构建速度。如需利用此项优化,您需要先启用 Gradle 构建缓存。
- 使用 AAPT2(现已默认处于启用状态)改进了增量资源处理。如果您在使用 AAPT2 时遇到问题,请报告 bug。您也可以停用 AAPT2,方法是在
gradle.properties
文件中设置android.enableAapt2=false
,然后通过在命令行中运行./gradlew --stop
来重启 Gradle 守护程序。
新功能
- 变体感知依赖项管理。现在,在构建某个模块的特定变体时,插件会自动将本地库模块依赖项的变体与您正在构建的模块变体进行匹配。
- 加入了新的功能模块插件,以支持 Android 免安装应用和 Android 免安装应用 SDK(您可以使用 SDK 管理器下载)。如需详细了解如何使用新插件创建功能模块,请参阅包含多个功能的免安装应用的结构。
- 对使用某些 Java 8 语言功能和 Java 8 库提供内置支持。Jack 现已废弃且无需再使用,您应先停用 Jack,才能使用内置到默认工具链中并得到改进的 Java 8 支持。有关详情,请参阅使用 Java 8 语言功能一文。
-
添加了对使用 Android Test Orchestrator 运行测试的支持,可让您在它自己的插桩调用中运行每一项应用测试。因为每个测试都是在自己的插桩实例中运行,所以测试之间的任何共享状态都不会在设备的 CPU 或内存上累积。而且,即使有一个测试崩溃,也只会移除它自己的插桩实例,因此其他测试仍会正常运行。
- 添加了
testOptions.execution
,以确定是否使用设备上的测试编排。如果您想使用 Android Test Orchestrator,则需要指定ANDROID_TEST_ORCHESTRATOR
(如下所示)。默认情况下,此属性会设置为HOST
,这会停用设备上的编排,并且是运行测试的标准方法。
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- 添加了
-
新的
androidTestUtil
依赖项配置允许您在运行插桩测试(例如 Android Test Orchestrator)之前安装其他测试辅助程序 APK:Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
添加了
testOptions.unitTests.includeAndroidResources
,以支持需要 Android 资源(例如 Roboelectric)的单元测试。如果您将此属性设置为true
,插件便会在运行单元测试之前执行资源、资产和清单合并。然后,测试便会检查com/android/tools/test_config.properties
的类路径是否具有以下键:-
android_merged_assets
:已合并资产目录的绝对路径。注意:对于库模块,已合并资产不会包含依赖项的资产(详见问题 #65550419)。
-
android_merged_manifest
:已合并清单文件的绝对路径。 -
android_merged_resources
:已合并资源目录的绝对路径,其中包含模块中的所有资源以及模块的所有依赖项。 -
android_custom_package
:最终 R 类的软件包名称。如果动态修改应用 ID,则此软件包名称可能与应用清单中的package
属性不匹配。
-
- 支持以资源形式使用字体(这是在 Android 8.0 [API 级别 26] 中推出的新功能)。
- 支持集成了 Android 免安装应用 SDK 1.1 及更高版本的特定语言 APK。
-
您现在可以更改外部原生构建项目的输出目录,如下所示:
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- 现在,从 Android Studio 中构建原生项目时,您可以使用 CMake 3.7 或更高版本。
-
您可以使用新的
lintChecks
依赖项配置构建用于定义自定义 lint 规则的 JAR,并将其打包到您的 AAR 和 APK 项目中。您的自定义 lint 规则必须属于单独的项目,该项目输出单个 JAR 并且仅包含
compileOnly
依赖项。然后,其他应用和库模块可以依赖于使用lintChecks
配置的 lint 项目:Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
行为变更
- Android 插件 3.0.0 移除了某些 API。如果您使用这些 API,您的 build 将会出现异常。例如,您无法再使用 Variants API 访问
outputFile()
对象,也无法使用processManifest.manifestOutputFile()
获取各个变体的清单文件。如需了解详情,请参阅 API 变更部分。 - 您无需再指定 Build Tools 的版本(因此,您现在可以移除
android.buildToolsVersion
属性了)。默认情况下,插件会针对所用 Android 插件的版本自动使用所需的最低版 Build Tools。 - 现在,您可以在
buildTypes
代码块中启用/停用 PNG 处理(如下所示)。默认情况下,会为所有 build 启用 PNG 处理;但调试 build 除外,因为它会增加包含许多 PNG 文件的项目的构建时间。因此,为了缩短其他 build 类型的构建时间,您应该停用 PNG 处理或将图片转换成 WebP 格式。Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- Android 插件现在会自动构建您在外部 CMake 项目中配置的可执行目标。
- 现在,您必须使用
annotationProcessor
依赖项配置将注解处理器添加到处理器类路径中。 - 现在,使用已废弃的
ndkCompile
会受到更多限制。您应该改用 CMake 或 ndk-build 来编译要打包到 APK 中的原生代码。如需了解详情,请参阅从 ndkcompile 迁移。
3.0.0(2017 年 10 月)
Android Gradle 插件 3.0.0 包含各种旨在解决大型项目性能问题的更改。
例如,在一个具有大约 130 个模块和大量外部依赖项但没有代码或资源的示例框架项目上,您可以体验到与以下类似的性能提升:
Android 插件版本 + Gradle 版本 | Android 插件 2.2.0 + Gradle 2.14.1 | Android 插件 2.3.0 + Gradle 3.3 | Android 插件 3.0.0 + Gradle 4.1 |
---|---|---|---|
配置(例如,运行 ./gradlew --help ) |
大约 2 分钟 | 大约 9 秒 | 大约 2.5 秒 |
1 行 Java 更改(实现更改) | 大约 2 分 15 秒 | 大约 29 秒 | 大约 6.4 秒 |
其中某些更改会让现有 build 出现异常。因此,您应该考虑在使用新插件之前迁移您的项目。
如果您没有体验到上述性能提升,请提交 bug 并使用 Gradle 性能分析器添加 build 的轨迹。
此版本的 Android 插件需要使用以下工具:
- Gradle 4.1 或更高版本。如需了解详情,请参阅有关更新 Gradle 的部分。
-
Build Tools 26.0.2 或更高版本。经过此次更新,您无需再指定 Build Tools 的版本。默认情况下,该插件会使用所需的最低版本。因此,您现在可以移除
android.buildToolsVersion
属性了。
3.0.1(2017 年 11 月)
此次要更新对 Android Studio 3.0.1 构成补充,修复了各种 bug 并进行了多项性能改进。
优化
- 通过精细控制的任务图提升了多模块项目的并行性。
- 更改依赖项时,Gradle 通过不重新编译无法访问该依赖项 API 的模块来加快构建速度。您应利用 Gradle 的新依赖项配置(
implementation
、api
、compileOnly
和runtimeOnly
)限制哪些依赖项会将其 API 泄露给其他模块。 - 借助每个类的 dex 处理,可加快增量构建速度。每个类现在都会编译成单独的 DEX 文件,并且只会对修改过的类重新进行 dex 处理。对于将
minSdkVersion
设置为 20(或更低数值)并使用旧版 MultiDex 的应用,构建速度应该也会得到改善。 - 通过优化某些任务来使用缓存的输出,从而加快构建速度。如需利用此项优化,您需要先启用 Gradle 构建缓存。
- 使用 AAPT2(现已默认处于启用状态)改进了增量资源处理。如果您在使用 AAPT2 时遇到问题,请报告 bug。您也可以停用 AAPT2,方法是在
gradle.properties
文件中设置android.enableAapt2=false
,然后通过在命令行中运行./gradlew --stop
来重启 Gradle 守护程序。
新功能
- 变体感知依赖项管理。现在,在构建某个模块的特定变体时,插件会自动将本地库模块依赖项的变体与您正在构建的模块变体进行匹配。
- 加入了新的功能模块插件,以支持 Android 免安装应用和 Android 免安装应用 SDK(您可以使用 SDK 管理器下载)。如需详细了解如何使用新插件创建功能模块,请参阅包含多个功能的免安装应用的结构。
- 对使用某些 Java 8 语言功能和 Java 8 库提供内置支持。Jack 现已废弃且无需再使用,您应先停用 Jack,才能使用内置到默认工具链中并得到改进的 Java 8 支持。有关详情,请参阅使用 Java 8 语言功能一文。
-
添加了对使用 Android Test Orchestrator 运行测试的支持,可让您在它自己的插桩调用中运行每一项应用测试。因为每个测试都是在自己的插桩实例中运行,所以测试之间的任何共享状态都不会在设备的 CPU 或内存上累积。而且,即使有一个测试崩溃,也只会移除它自己的插桩实例,因此其他测试仍会正常运行。
- 添加了
testOptions.execution
,以确定是否使用设备上的测试编排。如果您想使用 Android Test Orchestrator,则需要指定ANDROID_TEST_ORCHESTRATOR
(如下所示)。默认情况下,此属性会设置为HOST
,这会停用设备上的编排,并且是运行测试的标准方法。
Groovy
android { testOptions { execution 'ANDROID_TEST_ORCHESTRATOR' } }
Kotlin
android { testOptions { execution = "ANDROID_TEST_ORCHESTRATOR" } }
- 添加了
-
新的
androidTestUtil
依赖项配置允许您在运行插桩测试(例如 Android Test Orchestrator)之前安装其他测试辅助程序 APK:Groovy
dependencies { androidTestUtil 'com.android.support.test:orchestrator:1.0.0' ... }
Kotlin
dependencies { androidTestUtil("com.android.support.test:orchestrator:1.0.0") ... }
-
添加了
testOptions.unitTests.includeAndroidResources
,以支持需要 Android 资源(例如 Roboelectric)的单元测试。如果您将此属性设置为true
,插件便会在运行单元测试之前执行资源、资产和清单合并。然后,测试便会检查com/android/tools/test_config.properties
的类路径是否具有以下键:-
android_merged_assets
:已合并资产目录的绝对路径。注意:对于库模块,已合并资产不会包含依赖项的资产(详见问题 #65550419)。
-
android_merged_manifest
:已合并清单文件的绝对路径。 -
android_merged_resources
:已合并资源目录的绝对路径,其中包含模块中的所有资源以及模块的所有依赖项。 -
android_custom_package
:最终 R 类的软件包名称。如果动态修改应用 ID,则此软件包名称可能与应用清单中的package
属性不匹配。
-
- 支持以资源形式使用字体(这是在 Android 8.0 [API 级别 26] 中推出的新功能)。
- 支持集成了 Android 免安装应用 SDK 1.1 及更高版本的特定语言 APK。
-
您现在可以更改外部原生构建项目的输出目录,如下所示:
Groovy
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory "./outputs/cmake" } } }
Kotlin
android { ... externalNativeBuild { // For ndk-build, instead use the ndkBuild block. cmake { ... // Specifies a relative path for outputs from external native // builds. You can specify any path that's not a subdirectory // of your project's temporary build/ directory. buildStagingDirectory = "./outputs/cmake" } } }
- 现在,从 Android Studio 中构建原生项目时,您可以使用 CMake 3.7 或更高版本。
-
您可以使用新的
lintChecks
依赖项配置构建用于定义自定义 lint 规则的 JAR,并将其打包到您的 AAR 和 APK 项目中。您的自定义 lint 规则必须属于单独的项目,该项目输出单个 JAR 并且仅包含
compileOnly
依赖项。然后,其他应用和库模块可以依赖于使用lintChecks
配置的 lint 项目:Groovy
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks project(':lint-checks') }
Kotlin
dependencies { // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file // and package it with your module. If the module is an Android library, // other projects that depend on it automatically use the lint checks. // If the module is an app, lint includes these rules when analyzing the app. lintChecks(project(":lint-checks")) }
行为变更
- Android 插件 3.0.0 移除了某些 API。如果您使用这些 API,您的 build 将会出现异常。例如,您无法再使用 Variants API 访问
outputFile()
对象,也无法使用processManifest.manifestOutputFile()
获取各个变体的清单文件。如需了解详情,请参阅 API 变更部分。 - 您无需再指定 Build Tools 的版本(因此,您现在可以移除
android.buildToolsVersion
属性了)。默认情况下,插件会针对所用 Android 插件的版本自动使用所需的最低版 Build Tools。 - 现在,您可以在
buildTypes
代码块中启用/停用 PNG 处理(如下所示)。默认情况下,会为所有 build 启用 PNG 处理;但调试 build 除外,因为它会增加包含许多 PNG 文件的项目的构建时间。因此,为了缩短其他 build 类型的构建时间,您应该停用 PNG 处理或将图片转换成 WebP 格式。Groovy
android { buildTypes { release { // Disables PNG crunching for the release build type. crunchPngs false } } }
Kotlin
android { buildTypes { release { // Disables PNG crunching for the release build type. isCrunchPngs = false } } }
- Android 插件现在会自动构建您在外部 CMake 项目中配置的可执行目标。
- 现在,您必须使用
annotationProcessor
依赖项配置将注解处理器添加到处理器类路径中。 - 现在,使用已废弃的
ndkCompile
会受到更多限制。您应该改用 CMake 或 ndk-build 来编译要打包到 APK 中的原生代码。如需了解详情,请参阅从 ndkcompile 迁移。
2.3.0(2017 年 2 月)
2.3.3(2017 年 6 月)
此次要更新添加了与 Android Studio 2.3.3 的兼容性。
2.3.2(2017 年 5 月)
此次要更新添加了与 Android Studio 2.3.2 的兼容性。
2.3.1(2017 年 4 月)
这是针对 Android 插件 2.3.0 的次要更新,修复了某些 Android 实体设备无法正确使用 Instant Run 的问题(请参阅问题 #235879)。
- 依赖项:
-
- Gradle 3.3 或更高版本。
- Build Tools 25.0.0 或更高版本。
- 新变化:
-
- 使用 Gradle 3.3,其中包括性能改进和新功能。如需了解详情,请参阅 Gradle 版本说明。
- 构建缓存:存储构建项目时 Android 插件生成的特定输出(例如,未打包的 AAR 和经过 dex 预处理的远程依赖项)。使用缓存时,整洁 build 的速度会显著加快,因为构建系统在进行后续构建时可以直接重用这些缓存的文件,而无需重新创建。使用 Android 插件 2.3.0 及更高版本的项目在默认情况下会使用构建缓存。如需了解详情,请参阅有关使用构建缓存加快构建速度的文章。
- 变更:
-
- 支持对 Android Studio 2.3 中包含的 Instant Run 进行更改。
- 大型项目的配置速度应该会明显加快。
- 修复了约束布局库自动下载的问题。
- 插件现在使用 ProGuard 版本 5.3.2。
- 修复了多个报告的 bug。如果遇到问题,请继续提交 bug 报告。
2.2.0(2016 年 9 月)
- 依赖项:
-
- Gradle 2.14.1 或更高版本。
- Build Tools 23.0.2 或更高版本。
- 新变化:
-
- 使用 Gradle 2.14.1,其中加入了一些性能改进和新功能,并修复了在使用 Gradle 守护程序时允许获取本地特权的安全漏洞。如需了解详情,请参阅 Gradle 版本说明。
- 利用
externalNativeBuild {}
DSL,Gradle 现在可让您链接到自己的原生源代码,并使用 CMake 或 ndk-build 编译原生库。构建原生库后,Gradle 会将它们打包到您的 APK 中。如需详细了解如何在 Gradle 中使用 CMake 和 ndk-build,请参阅向您的项目添加 C 和 C++ 代码一文。 - 当您从命令行运行 build 时,Gradle 现在会尝试自动下载项目依赖但缺失的所有 SDK 组件或更新。如需了解详情,请参阅 Gradle 自动下载缺失软件包部分。
- 新的实验性缓存功能可让 Gradle 通过 dex 预处理、存储和重复使用库的 dex 预处理版本来缩短构建时间。如需详细了解如何使用此实验性功能,请参阅构建缓存指南。
- 通过采用在一个任务中处理压缩、签名和压缩对齐操作的新默认打包管道,提升了构建性能。您可以通过在
gradle.properties
文件中添加android.useOldPackaging=true
来恢复使用旧的打包工具。在使用新的打包工具时,zipalignDebug
任务将不可用。不过,您可以调用createZipAlignTask(String taskName, File inputFile, File outputFile)
方法来自己创建一个。 - 除了传统的 JAR 签名,APK 签名现在还会使用 APK 签名方案 v2。所有 Android 平台都接受生成的 APK。如果在签名后修改这些 APK,那么它们的 v2 签名便会失效,并会阻止在设备上安装。如需停用此功能,请将以下代码添加到模块级
build.gradle
文件中:Groovy
android { ... signingConfigs { config { ... v2SigningEnabled false } } }
Kotlin
android { ... signingConfigs { create("config") { ... v2SigningEnabled = false } } }
- 对于 MultiDex build,您现在可以使用 ProGuard 规则来确定 Gradle 应该将哪些类编译到应用的主 DEX 文件中。因为 Android 系统在启动应用时会先加载主 DEX 文件,所以您可以在启动时通过将它们编译到主 DEX 文件中来确定某些类的优先级。在您专门为主 DEX 文件创建 ProGuard 配置文件后,请使用
buildTypes.multiDexKeepProguard
将该配置文件的路径传递给 Gradle。使用此 DSL 与使用buildTypes.proguardFiles
不同,后者会提供应用的常规 ProGuard 规则,并且不会指定主 DEX 文件的类。 - 添加了对
android:extractNativeLibs
标志的支持,此标志可在应用安装到设备的过程中缩小应用的大小。如果您在应用清单的<application>
元素中将此标志设置为false
,Gradle 会将未压缩的对齐版原生库和 APK 打包在一起。这可防止PackageManager
在安装过程中将原生库从 APK 复制到设备的文件系统,同时还有助于减小应用增量更新。 - 您现在可以针对产品变种指定
versionNameSuffix
和applicationIdSuffix
。(问题 59614)
- 变更:
-
-
getDefaultProguardFile
现在会返回 Android Plugin for Gradle 提供的默认 ProGuard 文件,并且不再使用 Android SDK 中的那些文件。 - 改进了 Jack 编译器的性能和功能:
- 在将
testCoverageEnabled
设置为true
后,Jack 现在支持 Jacoco 测试覆盖率。 - 改进了对注解处理器的支持。类路径上的注解处理器(例如任意
compile
依赖项)会自动应用于 build。您还可以在 build 中指定注解处理器,并通过在模块级build.gradle
文件中使用javaCompileOptions.annotationProcessorOptions {}
DSL 来传递参数:Groovy
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className 'com.example.MyProcessor' // Arguments are optional. arguments = [ foo : 'bar' ] } } } }
Kotlin
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { className = "com.example.MyProcessor" // Arguments are optional. arguments(mapOf(foo to "bar")) } } } }
如果要在编译时应用注解处理器,但不将其包含在 APK 中,请使用
annotationProcessor
依赖项范围:Groovy
dependencies { compile 'com.google.dagger:dagger:2.0' annotationProcessor 'com.google.dagger:dagger-compiler:2.0' // or use buildVariantAnnotationProcessor to target a specific build variant }
Kotlin
dependencies { implementation("com.google.dagger:dagger:2.0") annotationProcessor("com.google.dagger:dagger-compiler:2.0") // or use buildVariantAnnotationProcessor to target a specific build variant }
如需查看您可以设置的参数的列表,请从命令行中运行以下命令:
java -jar /build-tools/jack.jar --help-properties
- 在将
- 默认情况下,如果 Gradle 守护程序的堆大小至少为 1.5 GB,那么 Jack 现在会与 Gradle 在同一进程中运行。如需调整守护进程的堆大小,请将以下代码添加到
gradle.properties
文件中:# This sets the daemon heap size to 1.5GB. org.gradle.jvmargs=-Xmx1536M
-
2.1.0(2016 年 4 月)
2.1.3(2016 年 8 月)
此更新需要使用 Gradle 2.14.1 及更高版本。Gradle 2.14.1 加入了一些性能改进、新功能和一个重要的安全修复程序。如需了解详情,请参阅 Gradle 版本说明。
- 依赖项:
-
- Gradle 2.10 或更高版本。
- Build Tools 23.0.2 或更高版本。
- 新变化:
-
- 添加了对 N 开发者预览版、JDK 8 以及使用 Jack 工具链的 Java 8 语言功能的支持。如需了解详情,请阅读 N 预览版指南。
注意:Instant Run 目前无法用于 Jack,在使用新的工具链时将被停用。如果您正在为 N 预览版开发应用,并希望使用受支持的 Java 8 语言功能,只需使用 Jack 即可。
- 添加了对增量 Java 编译的默认支持,以在开发过程中缩短编译时间。这种编译方式仅对已发生变化或需要重新编译的那部分源代码进行重新编译。如需停用此功能,请将以下代码添加到模块级
build.gradle
文件中:Groovy
android { ... compileOptions { incremental false } }
Kotlin
android { ... compileOptions { incremental = false } }
-
添加了对 dexing-in-process 的支持。dexing-in-process 会在构建流程(而不是单独的外部虚拟机流程)中执行 dex 处理。这样不仅可以让增量构建更快,还可以加快完整构建的速度。对于已将 Gradle 守护程序的最大堆大小设置为不小于 2048 MB 的项目,该功能默认处于启用状态。如需进行设置,您可以将以下代码添加到项目的
```none org.gradle.jvmargs = -Xmx2048m ```gradle.properties
文件中:如果您已经在模块级
```none org.gradle.jvmargs = -Xmx3072m ```build.gradle
文件中为javaMaxHeapSize
定义值,则需要将org.gradle.jvmargs
的值设置为“javaMaxHeapSize
+ 1024MB”的结果。例如,如果您将javaMaxHeapSize
设置为“2048m”,则需要将以下代码添加到项目的gradle.properties
文件中:如需停用 dexing-in-process,请将以下代码添加到模块级
build.gradle
文件中:Groovy
android { ... dexOptions { dexInProcess false } }
Kotlin
android { ... dexOptions { dexInProcess = false } }
- 添加了对 N 开发者预览版、JDK 8 以及使用 Jack 工具链的 Java 8 语言功能的支持。如需了解详情,请阅读 N 预览版指南。
2.0.0(2016 年 4 月)
- 依赖项:
-
- Gradle 2.10 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 新变化:
-
- 通过支持字节码注入,然后将代码和资源更新推送到模拟器或实体设备上正在运行的应用,来启用 Instant Run。
- 添加了对增量构建的支持,即使应用未运行也支持。 通过 Android 调试桥将增量更改推送到已连接的设备,缩短了整体构建时间。
- 添加了
maxProcessCount
,以控制可以同时衍生多少个工作器 dex 处理进程。以下代码在模块级build.gradle
文件中将最大并发进程数设置为 4:Groovy
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
Kotlin
android { ... dexOptions { maxProcessCount = 4 // this is the default value } }
</li> <li>Added an experimental code shrinker to support pre-dexing and reduce re-dexing of dependencies, which are not supported with Proguard. This improves the build speed of your debug build variant. Because the experimental shrinker does not support optimization and obfuscation, you should enable Proguard for your release builds. To enable the experimental shrinker for your debug builds, add the following to your module-level <code>build.gradle</code> file:
Groovy
android { ... buildTypes { debug { minifyEnabled true useProguard false } release { minifyEnabled true useProguard true // this is a default setting } } }
Kotlin
android { ... buildTypes { getByName("debug") { minifyEnabled = true useProguard = false } getByName("release") { minifyEnabled = true useProguard = true // this is a default setting } } }
</li> <li>Added logging support and improved performance for the resource shrinker. The resource shrinker now logs all of its operations into a <code>resources.txt</code> file located in the same folder as the Proguard log files. </li> </ul>
- 改变的行为:
-
- 如果将
minSdkVersion
设置为 18 或更高,APK 签名会使用 SHA256。
<li>DSA and ECDSA keys can now sign APK packages. <p class="note"> <strong>Note:</strong> The <a href= "/training/articles/keystore.html">Android keystore</a> provider no longer supports <a href= "/about/versions/marshmallow/android-6.0-changes.html#behavior-keystore"> DSA keys on Android 6.0</a> (API level 23) and higher. </p> </li> </ul>
- 如果将
- 修复的问题:
-
- 修复了导致在测试和主 build 配置中出现重复 AAR 依赖项的问题。
Android Plugin for Gradle,修订版 1.5.0(2015 年 11 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 已将数据绑定插件集成到 Android Plugin for Gradle 中。如需启用该插件,请将以下代码添加到各个使用它的项目级
build.gradle
文件中: - 添加了新的 Transform API,以允许第三方插件在经过编译的
.class
文件转换为.dex
文件之前对其进行操纵。Transform API 可简化注入自定义类操纵的过程,同时为您可以操纵的内容提供了更大的灵活性。如需将转换插入到 build 中,请创建一个新类来实现其中一个Transform
接口,并使用android.registerTransform(theTransform)
或android.registerTransform(theTransform, dependencies)
注册该接口。您无需将任务连接在一起。另外,请注意以下关于 Transform API 的信息: - 转换可应用于以下一个或多个对象:当前项目、子项目和外部库。
- 必须对转换进行全局注册,将其应用于所有变体。
- 现在,内部代码处理(通过 Java 代码覆盖库 [JaCoCo]、ProGuard 和 MultiDex)会使用 Transform API。但是,Java Android 编译器套件 (Jack) 不使用此 API:只有
javac/dx
代码路径才使用。 - Gradle 会按以下顺序执行转换:JaCoCo、第三方插件、ProGuard。 第三方插件的执行顺序与第三方插件添加转换的顺序一致;第三方插件开发者无法通过 API 控制转换的执行顺序。
- 废弃了
ApplicationVariant
类中的dex
getter。 您现在无法再通过 Variant API 访问Dex
任务,因为它现在是通过转换来完成的。目前没有用于控制 dex 进程的替代进程。 - 修复了对资产的增量支持。
- 通过让 MultiDex 可用于测试项目,改进了对 MultiDex 的支持。现在,测试会自动拥有
com.android.support:multidex-instrumentation
依赖项。 - 添加了以下功能:在 Gradle build 调用异步任务且工作器进程中出现失败情况时,让 Gradle build 正常失败,并报告根本的错误原因。
- 添加了对在包含多个 ABI 的变体中配置特定应用二进制接口 (ABI) 的支持。
- 添加了在安装或运行测试时对
ANDROID_SERIAL
环境变量的设备序列号列表(以逗号分隔)的支持。 - 修复了以下问题:如果 APK 名称包含空格,则无法在搭载 Android 5.0(API 级别 20)及更高版本的设备上安装。
- 修复了与 Android 资产打包工具 (AAPT) 错误输出相关的各种问题。
- 添加了 JaCoCo 增量插桩支持,以加快增量构建的速度。Android Plugin for Gradle 现在会直接调用 JaCoCo 插桩工具。如需强制调用新版 JaCoCo 插桩工具,您需要将其添加为构建脚本依赖项。
- 修复了 JaCoCo 支持,因此它会忽略不属于类的文件。
- 添加了对矢量可绘制对象的支持,可在构建时生成 PNG 以实现向后兼容性。如果资源目录未指定 API 版本,或在应用清单的
<uses-sdk>
元素中将android:minSdkVersion
属性指定为 20 或更低,那么 Android Plugin for Gradle 会针对在该资源目录中找到的每个矢量可绘制对象生成 PNG。您可以在build.gradle
文件的defaultConfig
或productFlavor
部分中使用generatedDensities
属性设置 PNG 密度。 - 添加了对可模拟
android.jar
的共享,插件仅生成一次该文件并会将其用于单元测试。现在,app
和lib
等多个模块都会共享该文件。删除$rootDir/build
便可重新生成该文件。 - 已将 Java 资源的处理更改为在混淆任务之前(而不是在打包 APK 期间)发生。此更改让混淆任务有机会在软件包混淆之后调整 Java 资源。
- 修复了在实验性库插件中使用 Java 原生接口 (JNI) 代码的问题。
- 添加了独立于实验性库插件中的
android:compileSdkVersion
属性来设置平台版本的功能。
android { dataBinding { enabled = true } }
android { dataBinding { enabled = true } }
- 已将数据绑定插件集成到 Android Plugin for Gradle 中。如需启用该插件,请将以下代码添加到各个使用它的项目级
Android Plugin for Gradle,修订版 1.3.1(2015 年 8 月)
依赖项:- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 修复了 ZipAlign 任务,可在使用自定义文件名时正确使用上一个任务的输出。
- 使用 NDK 修复了 Renderscript 打包功能。
- 保留了对
createDebugCoverageReport
构建任务的支持。 - 修复了对在
build.gradle
build 文件中自定义使用archiveBaseName
属性的支持。 - 修复了在 Android Studio 外部运行 lint 时由参数方法注释查询引起的
Invalid ResourceType
lint 警告。
Android Plugin for Gradle,修订版 1.3.0(2015 年 7 月)
依赖项:- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
-
添加了对
com.android.build.threadPoolSize
属性的支持,可通过gradle.properties
文件或命令行控制Android
任务线程池的大小。以下示例会将此属性设置为 4。-Pcom.android.build.threadPoolSize=4
- 将默认构建行为设置为从 APK 中排除
LICENSE
和LICENSE.txt
文件。如需在 APK 中加入这些文件,请从build.gradle
文件的packagingOptions.excludes
属性中移除这些文件。例如:android { packagingOptions.excludes = [] }
android { packagingOptions.excludes.clear() }
- 添加了
sourceSets
任务,可检查所有可用源代码集的集合。 - 增强了对单元测试的支持,可识别多变种和 build 变体源代码文件夹。例如,如需测试配置了多变种(
flavor1
和flavorA
)和Debug
build 类型的应用,测试源代码集如下:- test
- testFlavor1
- testFlavorA
- testFlavor1FlavorA
- testFlavor1FlavorADebug
Android 测试已经识别出多变种源代码文件夹。
- 改进了单元测试支持,以实现以下目的:
- 即使在 build 文件中将
useJack
属性设置为true
,也可以在主要和测试源代码上运行javac
。 - 正确识别每种 build 类型的依赖项。
- 即使在 build 文件中将
- 添加了对从命令行指定插桩测试运行程序参数的支持。例如:
./gradlew connectedCheck \ -Pandroid.testInstrumentationRunnerArguments.size=medium \ -Pandroid.testInstrumentationRunnerArguments.class=TestA,TestB
在
build.gradle
文件中添加了对任意其他 Android 资源打包工具 (AAPT) 参数的支持。例如:android { aaptOptions { additionalParameters "--custom_option", "value" } }
android { aaptOptions { additionalParameters += listOf("--custom_option", "value") } }
- 添加了对测试 APK 模块的支持,可作为单独的测试模块,并使用
targetProjectPath
和targetVariant
属性来设置 APK 路径和目标变体。注意:测试 APK 模块不支持产品变种,只能以单个变体为目标。此外,尚不支持 Jacoco。
- 在合并资源之前添加了资源名称验证。
- 在为库模块构建 AAR (Android ARchive) 软件包时,不要在清单合并程序设置中提供自动
@{applicationId}
占位符。相反,如果您要在归档库中包含应用 ID,请使用其他占位符(例如@{libApplicationId}
)并为其提供值。
Android Plugin for Gradle,修订版 1.2.0(2015 年 4 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 增强了对使用 Gradle 运行单元测试的支持。
- 添加了对直接从 Gradle 运行单元测试时在类路径中加入 Java 样式资源的支持。
- 为 Android ARchive (AAR) 工件添加了单元测试依赖项支持。
- 添加了对
unitTestVariants
属性的支持,因此可以使用build.gradle
文件操纵单元测试变体。 - 在
testOptions
下添加了unitTest.all
代码块,可为单元测试配置自定义任务。以下示例代码显示了如何使用此新选项添加单元测试配置设置:android { testOptions { unitTest.all { jvmArgs '-XX:MaxPermSize=256m' // Or any other gradle option. } } }
android { testOptions { unitTest.all { jvmArgs += listOf("-XX:MaxPermSize=256m") // Or any other gradle option. } } }
- 修复了
mockable-android.jar
文件打包中枚举和公共实例字段的处理问题。 - 修复了库项目任务依赖项,以便测试类能在更改后重新编译。
- 添加了
testProguardFile
属性,以在缩减测试 APK 的大小时应用 ProGuard 文件。 - 已将
timeOut
属性添加到adbOptions
代码块中,以设置 Android 调试桥屏幕录制的最长录制时间。 - 添加了对 280 dpi 资源的支持。
- 提升了项目评估期间的性能。
- 增强了对使用 Gradle 运行单元测试的支持。
Android Plugin for Gradle,修订版 1.1.3(2015 年 3 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 修复了在触发 ProGuard 故障的测试应用上出现重复依赖项的问题。
- 修复了不符合 JDK Comparator 合同并生成 JDK 7 错误的 Comparator 实现。
Android Plugin for Gradle,修订版 1.1.2(2015 年 2 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 标准化了为单元测试创建可模拟的 JAR 时所使用的路径。
- 修复了
build.gradle
文件中的archivesBaseName
设置。 - 修复了构建库测试应用时清单合并程序中未解决的占位符故障。
Android Plugin for Gradle,修订版 1.1.1(2015 年 2 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 修改了 build 变体,仅让打包了 Wear 应用的变体触发特定于 Wear 的构建任务。
- 已将依赖项相关问题更改为在构建时(而不是调试时)失败。此行为可让您运行有助于解决冲突的诊断任务(如“依赖项”)。
- 修复了
android.getBootClasspath()
方法,以返回相应值。
Android Plugin for Gradle,修订版 1.1.0(2015 年 2 月)
- 依赖项:
-
- Gradle 2.2.1 或更高版本。
- Build Tools 21.1.1 或更高版本。
- 一般说明:
-
- 添加了新的单元测试支持
- 针对与常见模拟框架(例如 Mockito)兼容的特殊版
android.jar
文件,启用了在本地 JVM 上运行的单元测试。 - 添加了新的测试任务
testDebug
、testRelease
以及testMyFlavorDebug
(在使用产品变种时)。 - 添加了以下会被识别为单元测试的新源代码文件夹:
src/test/java/
、src/testDebug/java/
、src/testMyFlavor/java/
。 - 在
build.gradle
文件中添加了新配置,以用于声明仅供测试用的依赖项(例如testCompile 'junit:junit:4.11'
、testMyFlavorCompile 'some:library:1.0'
)。注意:仅供测试用的依赖项目前不兼容 Jack(Java Android 编译器套件)。
- 添加了
android.testOptions.unitTests.returnDefaultValues
选项,以控制可模拟 android.jar 的行为。 - 使用
AndroidTest
替换了测试任务名称中的Test
例如,assembleDebugTest
任务现在是assembleDebugAndroidTest
任务。单元测试任务仍会在任务名称中包含UnitTest
(例如assembleDebugUnitTest
)。 - 修改了 ProGuard 配置文件,不再适用于测试 APK。如果启用了缩减大小功能,ProGuard 将处理测试 APK,且只会应用在缩减主 APK 大小时生成的映射文件。
- 更新了依赖项管理
- 修复了使用
provided
和package
范围的问题。注意:这些范围与 AAR (Android ARchive) 软件包不兼容,并且会导致使用 AAR 软件包进行的构建失败。
- 修改了依赖项解析,以比较被测应用与测试应用的依赖项。如果为这两个应用找到的工件版本相同,该工件不会包含在测试应用中,并且只会与被测应用打包在一起。如果为这两个应用找到的工件版本不同,构建将会失败。
- 修复了使用
- 在资源合并程序中添加了对
anyDpi
资源限定符的支持。 - 加快了对包含大量 Android 模块的项目的评估和 IDE 同步速度。
Android Plugin for Gradle,修订版 1.0.1(2015 年 1 月)
- 依赖项:
-
-
Gradle 2.2.1(最高到 2.3.x)。
注意:此版本的 Android Plugin for Gradle 与 Gradle 2.4 及更高版本不兼容。
- Build Tools 21.1.1 或更高版本。
-
- 一般说明:
Android Plugin for Gradle,修订版 1.0.0(2014 年 12 月)
- 依赖项:
-
-
Gradle 2.2.1(最高到 2.3.x)。
注意:此版本的 Android Plugin for Gradle 与 Gradle 2.4 及更高版本不兼容。
- Build Tools 21.1.1 或更高版本。
-
- 一般说明:
-
- 初始插件版本。