Android Studio 中的 ChromeOS lint 规则

ChromeOS 团队致力于增强开发者工具和框架,以便 Android 应用开发者能够无缝地针对 Chromebook 优化其应用。为此,我们需要不断寻找方法,为开发者提供有影响力的工具集,以提升在大屏幕和 ChromeOS 上进行开发的体验。

随着新挑战的出现,ChromeOS 也在不断发展。其中一个挑战是尽早且经常性地向工程师告知严重问题。Lint 规则是质量的核心,因为它们会向开发者提供有关问题的预警信号,如果不加以解决,这些问题就会出现。我们更新后的 lint 规则可让开发者更清楚地了解其应用在 ChromeOS 上的运行情况,并展示软件和硬件方面的问题,这些问题无疑会导致在任何 ChromeOS 设备上运行的 Android 应用出现问题。

如需详细了解这些 lint 规则的存在及其重要性,请阅读我们的博文。

这些 lint 规则位于何处?

我们已经积极开发了几个月。根据 Android Studio 的发布时间表,Electric Eel Canary build 引入了一些 lint 规则。其中一些 lint 规则现在也已在 Flamingo Canary 版本中提供。我们将在未来几个月内继续努力,争取在 Android Studio 的稳定版中实现这些功能。

另一点需要注意的重要事项是,这些规则将在较新版本的 Android Studio 中默认启用。这样做的目的是提供更明确的指导,说明我们希望如何帮助工程师在未来为 ChromeOS 和更大的屏幕构建应用。

新 lint 规则(截至 Flamingo Canary 3 更新)

x86/x86_64 ABI 支持

大多数 Chromebook 都基于 Intel 架构运行,因此它们是主要的 x86 架构平台。如果 NDK 代码包含在二进制文件中,为了让 ChromeOS 获得适当的支持,使用 x86 可提升性能,因为这样可以省去 ARM 库所需的转换。因此,强烈建议您的开发团队添加 x86 或最好是 x86_64 架构支持,因为这会显著提升 ChromeOS 或任何 Intel 设备上任何原生代码的性能。

补救措施

如果可能,请在 build.gradle 内的 abiSplits 中添加 x86x86_64。此外,请确保将代码添加到相应的文件夹中,以支持这些 ABI。如需了解详情,请参阅有关 Android ABI 的文档以及有关 ADS 的 ABI 支持的讲座。

注意:请确保所使用的任何第三方库也具有 x86 和 x86_64 二进制文件。

ChromeOS 硬件限制

与 Android 手机相比,大多数 ChromeOS 设备配备的硬件传感器和其他功能较少。此规则旨在提醒开发者,如果将标志 <uses-feature>android:required=true 搭配使用,您的应用将无法在 ChromeOS 的 Google Play 商店中上架。强烈建议您确保硬件功能不是默认必需的,以确保尽可能多的设备可以访问您的应用。您可以改为添加防御性代码,以便在运行时检查特定硬件。举例来说

<uses-feature android:name="android.hardware.camera" android:required="true">

补救措施

确保应用中的功能确实是必需的,如果不是,请将 android:required 参数更改为 false,并在需要 API 调用时添加防御性编程。如需了解详情,请参阅有关明确声明的功能的文档。

不可调整大小的 activity

默认情况下,在 Chromebook 上运行 Android R 或更高版本的 ChromeOS 版 Android 运行时会根据默认界面状态启动 Android 应用的手机版或平板电脑版。不过,还有第三种选项,即“可调整大小”模式,可为 ChromeOS 用户带来更出色的体验。通过在 activity 中启用此标志,用户可以在任何多窗口环境中使用您的应用,并可将应用调整为合适的大小。这些更改将允许用户根据自己的需求调整界面大小。将这些更改添加到清单后,请针对下面引用的桌面模拟器测试您的应用。

在桌面模拟器中测试应用

补救措施

resizableActivity="true" 属性添加到 AndroidManifest.xml 文件中的 activity。如需了解详情,请参阅有关大屏设备限制的文档。

配置变更

可调整大小的屏幕有一个主要注意事项,那就是每当用户更改应用的大小时,系统都会调用 onConfigurationChanged()。如果您的应用在该方法内发出完整重绘,则会产生相关的性能影响。目前,我们正在检查以确保 finish() 不在 onConfigurationChanged 内调用,因为您应该以更精细的方式处理 savedInstanceState,而不是强制执行完全重绘。我们将继续寻找会导致性能下降的情况,并相应地更新此规则。

补救措施

确保在 activity 和 fragment 的 onConfigurationChanged() API 中未调用 finish()。如需了解详情,请参阅有关处理配置更改的文档。

键盘和鼠标支持

随着 Jetpack Compose 的采用率不断提高,我们希望确保使用这些库进行构建时,也包含对鼠标和键盘的支持功能。随着时间的推移,我们会继续提高鼠标、键盘、触控板和其他外围设备交互的易用性。为了获得基准体验,您必须将 Gradle 依赖项更新到最低必需版本。

补救措施

androidx.compose.foundation:foundation 更新到最低版本 1.2。如需了解详情,请参阅 Compose 版本发布说明

提示:90% 的用户通过键盘和鼠标在 Chromebook 上与应用互动。(资料来源:2022 年 Google 内部数据*

反馈

该团队一直在努力改进这些工具以及与大屏幕优化相关的文档。此流程中的一个关键步骤是向我们提供反馈,说明 Android Studio 中部署的 lint 规则的准确性和实用性。为此,您可以针对规则提供反馈。当 lint 规则显示在 Android Studio 中时,点击“针对此警告提供反馈”。系统应会显示一个类似于下方所示的对话框。您提供的信息越准确、越详尽,我们就越能快速迭代,做出适当的更改。

Android Studio 中的“提供反馈”对话框