以下是 Android Studio Bumblebee 中的新功能。
支持 KMP 测试执行
您可以从 Android Studio Bumblebee 运行 Kotlin Multiplatform (KMP) 项目的测试。
为了确保您的测试能从 Android Studio 成功运行,请确保您满足以下所有要求:
- AGP 7.0.0-alpha08 或更高版本
- Gradle 6.8.2 或更高版本
- Kotlin 插件 1.4.30 或更高版本
新的设备管理器
“设备管理器”是 AVD Manager 的替代品,既可以从 Android Studio 的欢迎屏幕访问,也可以在打开项目后访问。设备管理器引入了一些新功能,让您更轻松地创建和管理所有本地测试设备,例如:
- 更加灵活的 UI,支持在 IDE 中停靠、浮动或在单独窗口中显示,就像其他 Android Studio 工具窗口一样。这样,您无需遮挡 IDE 的其他窗口,即可更轻松地访问设备。
- “虚拟设备”标签页,可用于创建、管理和部署虚拟设备;快速查看每个设备的详细信息;或单击一下即可在 Device File Explorer 中快速检查设备。
- “实体设备”标签页,可让您使用 ADB Wifi 快速与新设备配对并快速查看每个实体设备的详细信息。您还可以通过单击按钮使用 Device File Explorer 快速检查每个设备的文件系统。
要打开新的“设备管理器”,请执行以下任一操作:
- 从 Android Studio 欢迎屏幕中,依次选择“更多操作 > 虚拟设备管理器”。
- 打开项目后,从主菜单栏中依次选择“View > Tool Windows > Device Manager”。
Layout Inspector 的新功能
捕获布局层次结构快照
Layout Inspector 现在允许您保存正在运行的应用的布局层次结构的快照,以便您可以轻松地与他人共享或日后参考。
快照捕获了您在使用 Layout Inspector 时通常会看到的数据,包括布局的详细 3D 渲染、View、Compose 或混合布局的组件树,以及 UI 中每个组件的详细属性。要保存快照,请执行以下操作:
- 将您的应用部署到运行 API 级别 23 或更高版本的设备上
- 依次选择“View > Tool Windows > Layout Inspector”打开 Layout Inspector。
- Layout Inspector 应自动连接到您的应用进程。如果未连接,请从下拉菜单中选择应用进程。
- 当您要捕获快照时,请点击 Layout Inspector 工具栏中的“Export snapshot”
。
- 在出现的系统对话框中,指定您要保存快照的名称和位置。确保使用
*.li
扩展名保存文件。
然后,您可以从主菜单栏中依次选择“File > Open”,打开 *.li
文件来加载 Layout Inspector 快照。
支持检查 Compose 语义
在 Compose 中,语义 (Semantics) 以另一种方式描述您的 UI,该方式可供无障碍服务 (Accessibility) 和测试框架 (Testing) 理解。在 Android Studio Bumblebee 中,您现在可以使用 Layout Inspector 检查 Compose 布局中的语义信息。
选择 Compose 节点时,使用“Attributes”窗口检查它是否直接声明了语义信息、是否合并了其子节点的语义,或两者兼而有之。要快速识别哪些节点包含声明或合并的语义,请使用“Component Tree”窗口中的“View options”下拉列表,然后选择“Highlight Semantics Layers”。这只会突出显示树中包含语义的节点,您可以使用键盘在它们之间快速导航。
避免 Activity 重启
在旧版本的 Android Studio 中,将 Layout Inspector 连接到正在运行的应用会导致您的应用的 Activity 重启。这是启用设备标志以检查应用布局所必需的。
在 Android Studio Bumblebee 中,您可以通过预先设置此标志来避免连接 Layout Inspector 时 Activity 重启,方法是执行以下任一步骤:
启用运行配置选项
- 从主菜单栏中依次选择“Run > Edit Configurations”。将显示“运行/调试配置”对话框。
- 导航到您要使用的运行配置。
- 在“Layout Inspector 选项”部分,勾选“Connect to Layout Inspector without restarting activity”旁边的复选框。
- 下次要使用 Layout Inspector 检查应用时,请使用此运行配置。
从命令行设置标志
- 在连接到您设备的机器上打开终端窗口
- 使用以下命令为您的应用设置设备标志:
adb shell settings put global debug_view_attributes_application_package <my_package_name>
- 将您的应用部署到设备并连接 Layout Inspector。Android Studio 将检查标志是否已设置,并尽可能避免重启 Activity。
Layout Inspector 快照文档
您现在可以捕获应用布局层次结构的快照,以便日后保存、共享或检查。快照捕获了您在使用 Layout Inspector 时通常会看到的数据,包括布局的详细 3D 渲染、View、Compose 或混合布局的组件树,以及 UI 中每个组件的详细属性。当检查正在运行的应用的布局时,请点击 Layout Inspector 工具栏中的“Export snapshot”,然后将快照保存为
*.li
文件。然后,您可以从主菜单栏中依次选择“File > Open”,打开 *.li
文件来加载 Layout Inspector 快照。快照将显示在编辑器窗口中的标签页中,以便您轻松地将其与正在运行的应用进行比较。
App Inspection 的新功能
在 Android Studio Bumblebee 中,App Inspection 窗口提供了新的工具和功能。您可以从主菜单栏中依次选择“View > Tool Windows > App Inspection”打开“App Inspector”。
Network Inspector
“Profilers”工具窗口中的 Network Profiler 已移至“App Inspection”工具窗口。如果您之前使用过 Network Profiler,所有相同的功能和丰富的网络流量数据仍然可用。只需将您的应用部署到运行 API 级别 26 及更高版本的设备上,然后打开“App Inspector > Network Inspector”标签页即可。
检查 Jobs、Alarms 和 Wakelocks
“Background Task Inspector”现在除了支持检查 Workers 外,还允许您检查应用的 Jobs、Alarms 和 Wakelocks。每种类型的异步任务现在都会显示在检查器标签页的相应标题下,让您轻松监控其状态和进度。与 Workers 类似,您可以选择 Job、Alarm 或 Wakelock,以在“Task Details”面板中检查其详细信息。
由于 Workers 在底层使用了 Jobs 和 Wakelocks,因此 Workers 调度的那些任务会显示为每个 Worker 的子任务。请注意,您只能在“Graph mode”下查看 Workers。
Profilers 的新功能
在 Android Studio Bumblebee 中,有一些新功能可以帮助您更深入地了解应用如何使用资源。要分析您的应用,请从主菜单栏中依次选择“View > Tool Windows > Profiler”。
卡顿检测轨道
使用运行 Android 11(API 级别 30)或更高版本的设备分析应用时,CPU 分析器现在显示一组新的轨道,用于说明“Frame Lifecycle”(帧生命周期)下每个帧的阶段:Application(应用)、Wait for GPU(等待 GPU)、Composition(合成)和 Frames on display(显示中的帧)。每个轨道都用帧编号标记帧,并用颜色编码矩形,让您轻松可视化特定帧在其生命周期中的位置,以及可以切换以与 Vsync 事件进行比较的指南。您可以使用此数据来了解应用中可能出现卡顿的位置并调查根本原因。在“Analysis”面板中,现在有一个“Frames”标签页,方便地汇总了所有帧的渲染信息。如需了解更多信息,请参阅UI 卡顿检测。
支持 Profileable 应用分析
在分析应用时,使用最接近用户将安装的应用版本生成准确数据非常重要。为此,您现在可以在应用清单中包含 <profileable>
属性,以分析不可调试的应用,如下面代码所示。
<profileable android:shell="true"/>
Profileable 是 Android 10 中引入的清单配置,可用于 CPU 和内存分析任务。与 debuggable 标志相比,使用 profileable 标志的主要优势在于性能测量开销较低;但是,某些分析功能对于 Profileable build 不可用,例如事件时间轴、API 启动的 CPU 分析、堆转储或实时位置记录。如需了解更多信息,请参阅Profileable 应用。
折叠调用堆栈帧
您现在可以在“Profilers”工具窗口中检查“Callstack Sample Recording”时折叠与您调查无关的帧。调用堆栈有助于了解执行了代码的哪一部分以及为何调用它。但是,Java/Kotlin 程序的调用堆栈通常不仅包含 Java/Kotlin 代码,还包含可能分散注意力的原生代码帧。要了解有关优化调用堆栈视图的更多信息,请参阅检查调用堆栈帧。
无线调试
Android Studio Bumblebee 支持在 Android 11 及更高版本的设备上进行无线调试。您可以在 Android Studio 中通过 Wi-Fi 配对和部署应用,而无需使用 USB 线缆或使用命令行管理 Android Debug Bridge (adb) 连接。要使用此功能,请从设备选择菜单中导航到“Pair devices using Wi-Fi”(通过 Wi-Fi 配对设备)选项,然后选择二维码或配对 PIN 码。然后,在您的 Android 11 及更高版本设备上,在“Developer options”(开发者选项)下,找到“Wireless Debugging”(无线调试)屏幕,并使用 Android Studio 初始化并无线连接到 adb 会话。如需了解更多无线调试设置信息,请参阅通过 Wi-Fi 连接到设备(Android 11+)。
默认启用 Compose 交互式预览
从 Android Studio Bumblebee 开始,默认启用交互式预览功能。交互式预览允许您像在设备上一样与预览进行交互。交互式预览与其他预览在沙盒环境中隔离,您可以在其中点击元素并在预览中输入用户输入。这是测试您的可组合函数的不同状态和手势(例如复选框已选中或为空)的快速方法。
预览交互模式直接在 Android Studio 中运行,无需运行模拟器,这会导致一些限制:
- 没有网络访问权限。
- 没有文件访问权限。
- 某些 Context API 可能无法完全可用。
动画矢量可绘制对象 (AVD) 预览
Animated Vector Drawable 工具提供了预览动画可绘制资源的功能。此工具可帮助您在 Android Studio 中预览 <animation-list>
、<animated-vector>
和 <animated-selector>
资源,并使您更容易完善自定义动画。
默认开启非传递性 R 类
非传递性 R 类现在默认开启。您可以将非传递性 R 类与 Android Gradle 插件一起使用,为具有多个模块的应用构建更快的版本。这样做有助于防止资源重复,确保每个模块的 R 类仅包含对其自身资源的引用,而不会从其依赖项中拉取引用。这会生成更及时的 build,并带来避免编译的相应优势。
您可以通过前往“Refactor > Migrate to Non-Transitive R Classes...”来获取使用此功能的帮助。
Apple Silicon 支持更新
对于在 Apple Silicon (arm64) 硬件上使用 macOS 的用户,Android Studio Arctic Fox 和 Android Emulator 自去年以来一直支持这种新架构。然而,在此版本中,我们现在已将 Android SDK 平台工具 v32.0.0(包含 adb 和 fastboot)和构建工具 v32.1.0(包含 aapt)更新为通用二进制文件,这样您的 Android 开发工具不再需要 Rosetta 二进制转换器即可运行。请参阅SDK 平台工具版本说明。
设计工具的更新设备选择器
为了简化针对各种 Android 设备设计应用的过程,我们更新了各种设计工具窗口(如 Layout Editor 和 Layout Validation)中的设备选择器,其中包含反映每种设备外形规格流行尺寸的参考设备。从手机到平板电脑,从 Wear 设备到 Android TV,现在可以在最能代表流行真实设备的屏幕尺寸上更轻松地预览、验证或编辑您的布局。
Android 测试
Android Studio Bumblebee 和 AGP 7.1 引入了多项新功能和改进,可帮助您更可靠、更具扩展性地运行自动化插桩测试,并查看可用于调试问题的有用结果。
统一的 Gradle 测试运行器
Android Gradle 插件 7.1.0 及更高版本和 Android Studio Bumblebee 及更高版本使用 Gradle 自己的 Android 插桩测试运行器实现来运行插桩测试。通过使用相同的测试运行器,无论您是从命令行(例如在持续集成服务器上)使用 AGP 运行,还是从 Android Studio 运行,结果都可能是一致的。
旧版本的 Android Studio 使用 IntelliJ Android 插桩测试运行器,而不是 Gradle 的 Android 插桩测试运行器。因此,如果您未使用最新版本的 Android Studio,则根据您是从 Android Studio 运行测试还是从命令行使用 Gradle 插件运行测试,可能会看到不同的测试结果,例如使用一个运行器测试通过而另一个运行器测试失败。
如果您已将插桩测试配置保存到您的项目,它们将使用 Gradle 在连接的设备上运行测试。您可以使用测试类或方法旁边的装订线操作创建新的插桩测试配置,如下所示。
运行插桩测试时,您可以通过检查 Test Matrix 中 Gradle 任务输出中的测试输出来确认 Android Studio 正在使用 Gradle 测试运行器。尽管我们正在随着每个 Android Studio 版本改进此功能,但仍存在一些已知问题。如果您遇到问题,请报告错误。您还可以停用新的测试流水线以恢复旧行为。
Android Emulator 现在默认直接在 Android Studio 内部运行
Android Emulator 默认直接在 Android Studio 内部运行。这让您可以节省屏幕空间,使用热键在模拟器和编辑器窗口之间快速切换,并在一个应用窗口中组织您的 IDE 和模拟器工作流程。
模拟器运行时,您可以使用常见的模拟器操作(如旋转)和扩展控制选项(如导航回放)。要在单独的窗口中运行模拟器,请转到“File > Settings > Tools > Emulator”(在 macOS 上为“Android Studio > Preferences > Tools > Emulator”),然后取消选择“Launch in a tool window”。
停用新的测试流水线
默认情况下,Android Studio Bumblebee 使用 Gradle 运行其插桩测试。如果您遇到问题,可以按如下方式停用此行为:
- 依次选择“File > Settings > Build, Execution, Deployment > Testing”(在 MacOS 上为“Android Studio > Preferences > Build, Execution, Deployment > Testing”)。
- 取消选中“Run Android instrumented tests using Gradle”(使用 Gradle 运行 Android 插桩测试)旁边的复选框,然后点击“OK”。
您还可以通过执行以下任一操作来恢复旧行为:
- 从命令行运行 Gradle 任务时,使用以下命令行参数:
-Pandroid.experimental.androidTest.useUnifiedTestPlatform=false
- 将以下参数添加到项目的
gradle.properties
文件中:android.experimental.androidTest.useUnifiedTestPlatform=false
为了帮助解决您可能遇到的问题,请报告错误。
补丁版本
以下是 Android Studio Bumblebee 中的补丁版本。
Android Studio Bumblebee | 2021.1.1 Patch 3 (2022 年 4 月)
此次小幅更新包含以下错误修复:
- Android Gradle 插件
- R8 报告的重复类问题
- 构建变体
- 如果通过新的 onVariants API 设置了变体的版本名称,则
versionNameSuffix
将不再起作用
- 如果通过新的 onVariants API 设置了变体的版本名称,则
- Compose Preview
- 性能和稳定性相关的错误修复。
- 解决了在使用 Live Edit of Literals 功能时偶尔发生的冻结问题。
- 导入/同步
- “Gradle 同步所需”消息包含多余的 AGP 版本
- 重新编译 Foo.java/kt 清理过多,并且未重新编译正确的组件
- 项目结构
- AGP 升级助手在更改目标版本时的稳定性改进
- AGP 升级助手现在通知用户 Gradle 插件正在升级
- Network Inspector
- Bumblebee 更新后,新的 Network Inspector 崩溃
- 在最新版本的 Android Studio 中连接调试器时,我一直遇到此错误。
TrackedHttpURLConnection.getHeaderField
崩溃,并显示NullPointerException
如需了解更多信息,请参阅 Android Studio Bumblebee Patch 3 博客文章。
Android Studio Bumblebee | 2021.1.1 Patch 2 (2022 年 2 月)
此更新包含以下错误修复:
- C++ 构建
ModelCache.safeGet(androidProjectResult.androidProject::getNdkVersion, "")
不得为 null
- 代码编辑器
- Android Studio Live Templates 中的错误 -
className()
表达式无法解析类名
- Android Studio Live Templates 中的错误 -
- D8/R8
java.lang.NoSuchMethodError
: 没有静态方法$jacocoInit
- 由于 Mockito 错误导致 Android 测试覆盖率中断
- 需要针对 API 31 上损坏的 CAS 实现寻找变通方案
- 不支持密封类
- 在 Chrome 中启用水平类合并时出现
NullPointerException
- 虚拟方法合并后出现
AbstractMethodError
- 由于不正确的 init-class out-type 导致堆栈帧验证失败
- Dex 输入使用了未定义的寄存器
StringBuilderOptimizerAnalysisTest
在发布分支上失败- R8 中的非确定性
- 部署
- 运行设备所有者应用的工程失败,并显示错误消息
Couldn't terminate the existing process for
- 运行设备所有者应用的工程失败,并显示错误消息
- 设计工具
- 启用非传递性 R 类时,Compose Preview 无法找到其他模块中的资源
- Studio 在构建时冻结。
- 嵌入式模拟器
- 其他性能和稳定性改进。
- 导入/同步
- 启动 Bumblebee 时出现 IDE 错误:在
IdeBuildTasksAndOutputInformationImp
中,输出类型 Apk 的输出列表构建文件不可用
- 启动 Bumblebee 时出现 IDE 错误:在
- IntelliJ
- 从 Mac OS X Monterey Dock 启动时未加载环境变量
- Jetpack (androidx) > Navigation
- 升级 SafeArgs 以基于最新的稳定版 AGP 构建
- 工具窗口
- 无法运行 Android Device Manager
- BumbleBee 中的 Network Inspector 未以可读格式显示 API 响应
如需了解更多信息,请参阅 Android Studio Bumblebee Patch 2 博客文章。
Android Studio Bumblebee | 2021.1.1 Patch 1 (2022 年 2 月)
此次小幅更新包含以下错误修复:
- 模拟器
- 升级到 Bumblebee 后无法连接到嵌入式模拟器 (Mac M1)
- IntelliJ
- 从 Mac OS X Monterey Dock 启动时未加载环境变量
如需了解更多信息,请参阅 Android Studio Bumblebee Patch 1 博客文章。