按变体配置应用签名
现在可以按变体在 Android Gradle 插件中启用或停用应用签名。
下面的示例展示了如何在 Kotlin 或 Groovy 中使用 onVariants() 方法按变体设置应用签名:
androidComponents {
onVariants(selector().withName("fooDebug"), {
signingConfig.enableV1Signing.set(false)
signingConfig.enableV2Signing.set(true)
})
针对 JDK 11 优化 Gradle 构建
在 Android Studio 中运行时,Gradle 构建工具使用 Android Studio 中设置的默认 JDK 版本。在以前的版本中,默认情况下使用 JDK 8;但在 4.2 中,默认的 JDK 版本为 JDK 11。JDK 11 的这项更新会影响 JVM 垃圾回收器的默认配置,因为 JDK 8 使用并行垃圾回收器,而 JDK 11 使用 G1 垃圾回收器。
为提高构建性能,我们建议您使用并行垃圾回收器测试 Gradle 构建。在 gradle.properties 中设置以下内容:
org.gradle.jvmargs=-XX:+UseParallelGC
如果此字段中已设置了其他选项,请添加一个新选项:
org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC
如需使用不同的配置衡量构建速度,请参阅对构建进行性能剖析。
System Trace:改进了内存和图形的指标
在 CPU 性能剖析器中,System Trace 功能添加了用于分析应用性能的新指标。
“Events”表格
“Events”表格是 Analysis 窗格右侧的一个新标签页。此表格列出了当前选定的线程中的所有跟踪事件。
System Trace 的“Events”表格
新跟踪记录和跟踪记录组
System Trace 现提供更多数据,用于跟踪在搭载 Android 9 或更高版本的设备上部署的应用。
BufferQueue(在“Display”部分中)
这一新跟踪记录会显示应用 Surface BufferQueue 的缓冲区计数(0、1 或 2)。它可帮助您了解图像缓冲区在 Android 图形组件之间切换时的状态。例如,值 2 表示该应用当前处于三重缓冲状态,这可能会导致额外的输入延迟。
System Trace 的缓冲区队列
CPU 频率(在“CPU cores”部分中)
除了 CPU 调度数据外,我们还加入了按核心记录的 CPU 频率。该数据显示了每个核心的运行状况,让您可以了解哪些是现代移动处理器中的“大”核心或“小”核心。
System Trace 的 CPU 频率
Process Memory (RSS)
新的 Process Memory (RSS) 显示了应用当前使用的物理内存量。
System Trace 的“Process Memory (RSS)”
Total
这是您的进程当前使用的物理内存总量。在基于 Unix 的系统上,这被称为“驻留集大小”,是匿名分配(由交换文件支持)、文件映射(向内存一次加载一页的文件)和共享内存分配(由多个进程访问,通过各种机制分配)所使用的所有内存的组合。
对于 Windows 开发者,驻留集大小类似于工作集大小。
Allocated
此计数器跟踪进程的正常内存分配目前占用了多少物理内存。这些分配均匿名(不由特定文件支持)且不公开(不共享)。
File Mappings
此计数器跟踪进程拥有的任何文件映射占用了多少物理内存。
Shared
此计数器跟踪在此进程和系统中其他进程之间共享的内存所用的物理内存量。
现在,R8 retrace 包含在命令行工具中
R8 retrace 现包含在 4.0 版命令行工具中。这是一个独立的工具,用于从经过混淆处理的堆栈轨迹获取原始堆栈轨迹。
您可以使用 SDK 管理器下载此软件包,这样会在 android_sdk/cmdline-tools 中安装 R8 retrace。或者,您也可以下载独立的命令行工具软件包。
如需了解使用信息,请参阅用户指南中的 R8 retrace。
布局检查器中新增了刷新操作
布局检查器是在 Android Studio 4.0 中引入的,旨在对正在运行的应用的界面堆栈进行实时检查。 不过,您可能并不总是希望布局检查器立即反映应用发生的情况,因为您可能希望在特定时间点检查应用布局的快照,或最大限度降低实时更新对应用性能的影响。
暂停实时更新并在布局检查器中刷新屏幕截图。
如需从应用手动加载界面数据快照,请先停用 Live updates 选项。然后,您可以点击 Refresh 按钮,以截取界面堆栈的新快照以进行检查。布局检查器现在会记住您的偏好设置,以便在会话之间保持启用或停用 Live updates。
Jetpack Compose 的 Android Gradle 插件支持
从 Android Gradle 插件 4.2 Canary 13 开始,将仅支持 Jetpack Compose 编译器 1.0.0-alpha-04 及更高版本。
适用于 AGP 的升级助理
从 Android Studio 4.2 Canary 5 开始,适用于 Android Gradle 插件的升级助理可帮助您更新项目的 AGP 版本。
“Android Gradle plugin Upgrade Assistant”对话框
该工具以现有的 AGP 升级功能为基础构建,可指导您完成整个项目级更新/重构工作,并包含更新预览,有助于防止在执行 AGP 升级之前发生潜在的重大更改。
升级助理要执行的更改的预览
对 Safe Args 的支持
Safe Args 是一个 Gradle 插件,可生成简单的对象和构建器类,以实现类型安全的导航和访问任何关联参数。使用 Safe Args 时,Android Studio 4.2 Canary 9 及更高版本包含特殊支持,如下所述:
支持针对 Directions、Args 和各种构建器类的自动填充功能
支持 Java 和 Kotlin Safe Args 插件
支持从源代码到 XML 的导航
Database Inspector
查询编辑器改进
Database Inspector 进行了一些改进,可帮助您编写和执行自定义 SQL 语句。当您打开检查器并打开一个 New query 标签页时,应该会看到一个更大、可调整大小的编辑器界面,用于编写查询和设置查询格式,如下所示。
Database Inspector 编辑器
此外,我们现在还提供您的先前查询的历史记录。点击 Show query history “Show query history”按钮 按钮时,您应该会看到先前针对当前所选数据库运行的查询列表。点击列表中的查询以在编辑器中查看完整查询的预览,然后按 Enter 将其复制到编辑器中。接着,点击 Run 以执行语句。
在查询编辑器中运行命令
离线模式
在旧版 Android Studio 中,在使用 Database Inspector 时断开与应用进程的连接会导致关闭检查器及其数据。在 Android Studio 4.2 Canary 8 及更高版本中,我们添加了在进程断开连接后继续检查应用数据库的功能,从而更轻松地在系统崩溃后调试应用。
如果发生断开连接的情况,Database Inspector 会下载您的数据库,然后供您在离线模式下使用这些数据库。您可以在离线模式下打开表格并运行查询。
请注意,当您重新连接至实时应用进程时,Database Inspector 会返回到实时模式,并仅显示设备上的数据。也就是说,重新连接到应用进程后,系统不会保留离线模式下显示的数据。因此,Database Inspector 不允许在离线模式下编辑或运行修改语句。
用于功能模块的新 removable 设置
Android Gradle 插件 4.2 使用 bundletool 1.0.0,后者为使用功能模块的应用引入了一项行为变更:指定为 dist:install-time 但未明确标记为 dist:removable 的任何功能模块都将默认为不可移动。这项新设置优化了安装时间模块与基本模块的融合,这可能会提高某些应用的性能。
如需详细了解这项新设置,请参阅功能模块清单文档中有关 dist:removable 标记的文档。
Android Gradle 插件 4.2
新增的 Gradle 属性:android.native.buildOutput
为了减少构建输出中的杂乱现象,AGP 4.2 会过滤来自使用 CMake 和 ndk-build 的原生 build 的消息,从而在默认情况下仅显示 C/C++ 编译器输出。以前,系统会为构建的每个文件生成一行输出,导致生成大量信息性消息。
如果您想查看完整的原生输出,请将新的 Gradle 属性 android.native.buildOutput 设置为 verbose。
您可以在 gradle.properties 文件中或通过命令行设置此属性。
gradle.properties
android.native.buildOutput=verbose
命令行
-Pandroid.native.buildOutput=verbose
此属性的默认值为 quiet。
gradle.properties 文件的行为变更
从 AGP 4.2 开始,无法再从子项目中替换 Gradle 属性。也就是说,如果您在子项目(而不是根项目)上的 gradle.properties 文件中声明某个属性,该属性将被忽略。
例如,在以前的版本中,AGP 会从 projectDir/gradle.properties、projectDir/app/gradle.properties、projectDir/library/gradle.properties 等文件中读取值。对于应用模块,如果同一 Gradle 属性同时存在于 projectDir/gradle.properties 和 projectDir/app/gradle.properties 中,projectDir/app/gradle.properties 中的值优先。
在 AGP 4.2 中已更改此行为,AGP 不会从子项目内的 gradle.properties 中加载值(例如,子项目为projectDir/app/gradle.properties)。此更改反映了新的 Gradle 行为并支持配置缓存。
如需详细了解如何在 gradle.properties 文件中设置值,请参阅 Gradle 文档。
默认情况下使用 Java 语言版本 8
从 4.2 版本开始,AGP 将默认使用 Java 8 语言级别。Java 8 提供对一些更新语言功能(包括 lambda 表达式、方法引用和静态接口方法)的访问权限。如需查看受支持功能的完整列表,请参阅 Java 8 文档。
如需保留旧行为,请在模块级 build.gradle.kts 或 build.gradle 文件中显式指定 Java 7:
// build.gradle.kts
android {
...
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_7
targetCompatibility = JavaVersion.VERSION_1_7
}
// For Kotlin projects, compile to Java 6 instead of 7
kotlinOptions {
jvmTarget = "1.6"
}
}
新增的 JVM 资源编译器
Android Gradle 插件 4.2 工具中新增了 JVM 资源编译器,它取代了 AAPT2 资源编译器的部分功能,可能会提升构建性能,尤其是在 Windows 计算机上。
从 Canary 7 版本开始,新增的 JVM 资源编译器默认处于启用状态。
现在支持 v3 和 v4 签名
Android Gradle 插件 4.2 现在支持 APK v3 和 APK v4 签名格式。如需在 build 中启用这两种格式之一或同时启用这两种格式,请将以下属性添加到模块级 build.gradle 或 build.gradle.kts 文件中:
// build.gradle.kts
android {
...
signingConfigs {
config {
...
enableV3Signing(true)
enableV4Signing(true)
}
}
}
通过 APK v4 签名,您可以使用 Android 11 中的 ADB 增量 APK 安装快速部署大型 APK。此新标志负责部署过程中的 APK 签名步骤。
部署到多个设备
为了帮助简化跨设备和 API 级别的应用测试,您现在可以执行以下步骤,将应用同时部署到多个设备或模拟器:
在目标设备下拉菜单(位于 IDE 的正上方)中选择 Select Multiple Devices。
目标设备下拉菜单
选择目标设备,然后点击 OK。
“Modify device set”对话框
运行您的应用或测试。
注意:在多个设备上运行和查看测试是一项实验性功能。在多个设备上运行测试配置时,系统可能会提示您先启用此功能,然后才能继续。
Apply Changes
为了帮助您更高效地迭代应用,我们针对搭载 Android 11 或更高版本的设备对 Apply Changes 进行了以下增强:
支持其他代码更改
对于搭载 Android 11 或更高版本的设备,您现在可以添加静态最终基元字段,然后通过点击以下任一按钮将这些更改部署到正在运行的应用中:Apply Code Changes 或 Apply Changes and Restart Activity 。
在 Android 11 设备上,您现在还可以添加资源,然后通过点击 Apply Changes and Restart Activity 图标 ,将这些更改部署到正在运行的应用。
ANDROID_SDK_HOME 环境变量已弃用
ANDROID_SDK_HOME 环境变量已弃用,取而代之的是 ANDROID_PREFS_ROOT。如需了解详情,请参阅模拟器环境变量。
4.2 预览版的已知问题
本部分将介绍 Android Studio 4.2 预览版的当前已知问题。
Kotlin 项目中的 Lint 异常
设置了 checkDependencies=true 的 Kotlin 项目可能会遇到 null 指针异常或以下错误:
Lint error: package fragment is not found for module
有关可能的解决方法,请参阅 Kotlin 项目中的 Lint 异常。
原生内存性能分析器:在应用启动时剖析原生内存的性能这项功能已停用
在应用启动时剖析原生内存的功能已停用。此选项会在即将发布的版本中启用。
解决方法是,您可以使用 Perfetto 独立命令行性能剖析器来捕获启动配置文件。
安装 Canary 8 版本后,Studio 无法启动
将 Android Studio 升级到 4.2 Canary 8 后,如果用户在 .vmoptions 文件中设置了自定义虚拟机选项,Android Studio 可能不会启动。为了解决此问题,我们建议在 .vmoptions 中使用注释排除自定义选项(使用“#”字符)。.vmoptions 文件位于以下位置:
Windows
C:\Users\YourUserName\AppData\[Local|Roaming]\Google\AndroidStudioPreview4.2\studio64.exe.vmoptions
macOS
~/Library/Application Support/Google/AndroidStudioPreview4.2/studio.vmoptions
Linux
~/.config/Google/AndroidStudioPreview4.2/studio64.vmoptions