Android Studio 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*
artifacts。 - R8 对 ProGuard 规则的解析得到改进。
- 以下错误已得到修复:
- 尝试运行 Kotlin Main 类时失败,并显示错误:
"Error: Could not find or load main class..."
- R8 在执行某些优化时进入无限循环。
- 在运行窗口中使用重新运行失败的测试命令有时会错误地返回“未找到测试”消息。
- D8 未正确处理
invoke-virtual
实例,导致崩溃并显示VerifyError
:invoke-super/virtual can't be used on private method
- Data Binding 编译器依赖于旧版本的
com.android.tools:annotations
。该编译器现在会尽可能使用基础项目中的工具注解。 - 使用性能分析器时,Android Studio 在 fragment 过渡期间崩溃。
- 调试包含文本框的布局时,调试器崩溃。
- D8 未能读取包含特殊字符的一些 ZIP 文件。
3.1.3 (2018 年 6 月)
此 Android Studio 3.1 更新包含对以下错误的修复:
- 内存泄漏导致 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 有时启动失败,在
com.intellij.psi.jsp.JspElementType
的类初始化期间出现ProcessCanceledException
。
3.1.2 (2018 年 4 月)
此 Android Studio 3.1 更新包含对以下错误的修复:
- 在某些情况下,Android Studio 在退出期间无限期挂起。
-
启用 Instant Run 时,使用源代码集配置的构建失败,并显示以下消息:
“Android Gradle 插件无法识别 SourceSet name。”
- 启用 Instant Run 时,由运行命令触发的新 Kotlin 项目构建失败。
- 编辑
build.gradle
文件时,有时键入字符和字符出现在屏幕上之间会出现明显的延迟。 -
在模块或外部依赖项数量庞大的一些项目中,dex 处理期间发生构建失败,并显示以下错误消息:
“RejectedExecutionException: 线程限制超出,正在替换阻塞的工作器”
- D8 主 DEX 列表的计算未考虑某些反射调用。
此更新还包括一些更改,可在某些情况下显著加快从 Gradle 运行 lint 检查的速度。
3.1.1 (2018 年 4 月)
此 Android Studio 3.1 更新包含对以下错误的修复:
-
在某些情况下,当在 Android Studio 3.1 中首次打开在 Android Studio 3.0 中创建的项目时,Gradle-aware Make 任务会从运行/调试配置中的启动前区域移除。导致在点击运行或调试按钮时项目无法构建,进而导致部署不正确的 APK 以及使用 Instant Run 时崩溃等失败。
为了解决此问题,Android Studio 3.1.1 会为缺少此条目的项目在运行配置中添加 Gradle-aware Make 任务。此修改在项目加载后首次 Gradle 同步时发生。
- 如果启用高级性能分析,则调试包含文本框的布局时,调试器崩溃。
- 点击构建变体后,Android Studio 冻结。
- AAR (Android archive) 文件被提取了两次,一次在 Gradle 同步过程中,一次在 Gradle 构建过程中。
- 从 SVG 文件导入的一些矢量图形中缺少元素。
- 关于弃用
compile
依赖项配置的警告已更新,为implementation
和api
配置提供了更好的指导。有关不再使用compile
配置的详细信息,请参阅新依赖项配置的文档。
编码/IDE
IntelliJ 2017.3.3
Android Studio 的核心 IDE 已更新,包含来自 IntelliJ IDEA 2017.3.3 版本的多项改进。改进包括更好的集合和字符串控制流分析、改进的 nullability 推断、新的快速修复等。
详情请参阅 IntelliJ IDEA 2017.2 和 2017.3 版本的 JetBrains 发布说明,以及bug 修复更新的 JetBrains 发布说明。
借助 Room 改进 SQL 编辑功能
使用 Room 数据库库时,您可以利用 SQL 编辑方面的几项改进:
- 在
Query
内的代码补全功能可理解 SQL 表(实体)、列、查询参数、别名、连接、子查询和 WITH 子句。 - SQL 语法高亮显示现在正常工作。
- 您可以右键点击 SQL 中的表名并进行重命名,这也会重写相应的 Java 或 Kotlin 代码(例如,包括查询的返回类型)。重命名也支持反向操作,因此重命名 Java 类或字段也会重写相应的 SQL 代码。
- 使用查找用例时会显示 SQL 用例(右键点击并从上下文菜单中选择查找用例)。
- 要在 Java 或 Kotlin 代码中导航到 SQL 实体的声明,您可以在点击实体时按住 Control 键(在 Mac 上按住 Command 键)。
有关将 SQL 与 Room 结合使用的信息,请参阅使用 Room 将数据保存在本地数据库中。
数据绑定的更新
此更新包含对数据绑定的几项改进:
-
您现在可以在数据绑定表达式中使用
LiveData
对象作为可观察字段。ViewDataBinding
类现在包含一个新的setLifecycle()
方法,用于观察LiveData
对象。 -
ObservableField
类现在可以在其构造函数中接受其他Observable
对象。 -
您可以预览新的数据绑定类增量编译器。有关此新编译器的详细信息以及启用它的说明,请参阅数据绑定编译器 V2。
新编译器的优势包括:
-
ViewBinding
类在 Java 编译器之前由 Android Gradle 插件生成。 - 库在编译应用时保留其生成的绑定类,而不是每次都重新生成。这可以显著提高多模块项目的性能。
-
编译器和 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 控制台已替换为构建窗口,该窗口包含同步和构建标签页。
有关如何使用新的简化版构建窗口的详细信息,请参阅监控构建过程。
批量更新和索引并发
Gradle 同步和 IDE 索引过程现在效率更高,减少了许多冗余索引操作浪费的时间。
C++ 和 LLDB
我们在 C++ 开发的编码、同步、构建和调试阶段进行了许多质量和性能改进。改进包括:
-
如果您处理大型 C++ 项目,您应该会注意到构建符号所花费的时间显著减少。大型项目的同步时间也大大缩短。
-
通过更积极地重用缓存结果,提高了使用 CMake 构建和同步时的性能。
-
为更多 C++ 数据结构添加了格式化程序(“美化打印器”),使 LLDB 输出更易于阅读。
-
LLDB 现在仅支持 Android 4.1 (API level 16) 及更高版本。
注意:使用 Android Studio 3.0 或更高版本进行原生调试在 32 位 Windows 上不起作用。如果您使用的是 32 位 Windows 并需要调试原生代码,请使用 Android Studio 2.3。
Kotlin
Kotlin 已升级到版本 1.2.30
Android Studio 3.1 包含 Kotlin 版本 1.2.30。
Kotlin 代码现在通过命令行 lint 检查进行分析
从命令行运行 lint 现在会分析您的 Kotlin 类。
对于您希望运行 lint 的每个项目,必须将Google 的 Maven 仓库包含在顶层 build.gradle
文件中。Android Studio 3.0 及更高版本中创建的项目已包含 Maven 仓库。
性能工具
使用 CPU Profiler 分析原生 C++ 进程样本
CPU 性能分析器现在包含一个默认配置,用于记录应用原生线程的采样跟踪。您可以将应用部署到运行 Android 8.0(API 级别 26)或更高版本的设备,然后从 CPU 性能分析器的记录配置下拉菜单中选择 Sampled (Native) 来使用此配置。之后,像往常一样记录和检查跟踪。
您可以通过创建记录配置来更改默认设置,例如采样间隔。
要切换回跟踪 Java 线程,请选择 Sampled (Java) 或 Instrumented (Java) 配置。
过滤 CPU 跟踪、内存分配结果和堆转储
CPU 性能分析器和内存性能分析器包含一个搜索功能,可让您过滤方法跟踪记录、内存分配或堆转储的结果。

要搜索,请点击窗格右上角的过滤 图标,输入您的查询,然后按 Enter 键。
提示:您也可以通过按 Control + F(在 Mac 上按 Command + F)打开搜索字段。
在 CPU 性能分析器的火焰图标签页中,包含与您的搜索查询相关方法的调用栈会突出显示并移到图表的左侧。
有关按方法、类或软件包名称进行过滤的详细信息,请参阅记录和检查方法跟踪。
网络性能分析器中的“请求”标签页
网络性能分析器现在包含一个请求标签页,提供选定时间线内的网络请求详细信息。在之前的版本中,网络性能分析器仅提供网络响应的信息。
网络性能分析器中的“线程视图”
在网络性能分析器中选择时间线的一部分后,您可以选择以下任一标签页,查看该时间范围内的网络活动详细信息:
- 连接视图:提供与旧版 Android Studio 相同的信息,它列出了在选定时间线内,应用所有 CPU 线程发送或接收的文件。对于每个请求,您可以检查大小、类型、状态和传输时长。
- 线程视图:显示应用每个 CPU 线程的网络活动。此视图允许您检查应用中哪个线程负责每个网络请求。

布局检查器
布局检查器新增了一些功能,包括之前由已弃用的 Hierarchy Viewer 和 Pixel Perfect 工具提供的一些功能:
- 用于导航和检查布局的缩放按钮和键盘快捷键
- 参考网格叠加层
- 能够加载参考图像并将其用作叠加层(对于将布局与 UI 样稿进行比较非常有用)
- 渲染子树预览,用于在复杂布局中隔离视图

布局编辑器
布局编辑器中的调色板已获得多项改进:
- 视图和布局类别的重新组织。
- 新的视图和布局常用类别,您可以通过收藏命令添加到该类别。
- 改进了视图和布局的搜索功能。
- 用于打开特定视图或布局元素的文档的新命令。
您可以使用组件树或设计编辑器中的新转换视图命令将视图或布局转换为另一种类型的视图或布局。
您现在可以使用属性窗口顶部视图检查器中的新创建连接 按钮,轻松创建与选定视图附近项的约束。
运行和 Instant Run
选择部署目标对话框中的对未来的启动使用相同的选择选项的行为变得更加一致。如果启用使用相同的选择选项,则选择部署目标对话框仅在您首次使用运行命令时打开,直到选定的设备不再连接。
当目标设备运行 Android 8.0(API 级别 26)或更高版本时,Instant Run 可以在不重启应用的情况下部署资源更改。这是因为资源包含在一个分包 APK 中。
模拟器
有关自 Android Studio 3.0 以来模拟器中的新增功能和更改的详细信息,请参阅 Android 模拟器从版本 27.0.2 到版本 27.1.12 的发布说明。
主要改进包括:
- 快速启动快照,用于保存模拟器状态并加快启动速度,并能够使用立即保存命令保存自定义启动状态。
- 无窗口模拟器屏幕。
- 适用于 Android 8.0(API 级别 26)、Android 8.1(API 级别 27)和 Android P 开发者预览版的系统映像。
用户界面和用户体验改进
更多提示、键盘快捷键和有用的消息
我们在 Android Studio 的许多地方添加了提示和有用的消息叠加层。
要查看许多命令的键盘快捷键,只需将鼠标指针悬停在按钮上直到出现提示。
“工具”>“Android”菜单已移除
工具 > Android 菜单已移除。之前在此菜单下的命令已移至其他位置。
- 许多命令已直接移至工具菜单下。
- 将项目与 gradle 文件同步命令已移至文件菜单。
- 设备监视器命令已移除,如下所述。
可从命令行使用的 Device Monitor
在 Android Studio 3.1 中,Device Monitor 的作用比以前小了。在许多情况下,Device Monitor 提供的功能现在由新的和改进的工具提供。
有关从命令行调用 Device Monitor 的说明以及通过 Device Monitor 可用的工具的详细信息,请参阅Device Monitor 文档。