开始构建适用于 ChromeOS 的应用

ChromeOS 设备(例如 Chromebook)支持 Google Play 商店和 Android 应用。本文���设您有一���专为手机或平板电脑设计的现有 Android 应用,并想针对 Chromebook 进行优化。如需了解构建 Android 应用的基础知识,请参阅构建首个 Android 应用

更新应用的清单文件

首先,根据 Chromebook 与其他 Android 设备之间在硬件和软件方面的一些主要差异,更新您的清单文件。

从 ChromeOS 版本 M53 开始,没有明确要求 android.hardware.touchscreen 功能的所有 Android 应用也可以在支持 android.hardware.faketouch 功能的 ChromeOS 设备上运行。不过,为了确保您的应用在所有 Chromebook 上都能正常运行,请更新您的清单文件,使 android.hardware.touchscreen 功能不再是必需的,如以下示例所示。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          ... >
    <!-- Some Chromebooks don't support touch. Although not essential,
         it's a good idea to explicitly include this declaration. -->
    <uses-feature android:name="android.hardware.touchscreen"
                  android:required="false" />
</manifest>

不同的硬件设备配有不同组的传感器,Chromebook 可能不包含 Android 手持设备中提供的所有传感器,例如 GPS 和加速度计。不过,在某些情况下,传感器的功能是以其他方式提供的。例如,Chromebook 可能没有 GPS 传感器,但它们会根据 Wi-Fi 连接提供位置数据。如需详细了解 Android 平台支持的传感器,请参阅传感器概览

如果您希望应用能够在 Chromebook 上运行,而不考虑传感器的可用���,请更新您的清单文件,将传感器配置为不需要传感器。

Chromebook 不支持某些软件功能。例如,提供自定义 IME、应用 widget、动态壁纸和应用启动器的应用不受支持,因此无法安装在 Chromebook 上。如需查看 Chromebook 不支持的软件功能的完整列表,请参阅不兼容的软件功能

更新目标 SDK 版本

请将应用的 targetSdkVersion 属性更新为可用的最新 API 级别,以充分利用 Android 平台中的所有改进。查看 Android 平台在不同版本中的改进。

检查网络要求

Chromebook 在容器中运行整个 Android 操作系统,类似于 Docker 或 LXC。这意味着 Android 无法直接访问系统的 LAN 接口。相反,IPv4 流量通过内部网络地址转换 (NAT) 层,IPv6 单播流量通过额外跃点路由。

从 Android 应用到互联网的出站单播连接大多按原样运作。通常,入站连接会被阻止。来自 Android 的多播或广播数据包不会通过防火墙转发到 LAN。

作为多播限制的例外情况,ChromeOS 会运行一项在 Android 和 LAN 接口之间转发 mDNS 流量的服务,因此建议使用标准的网络服务发现 API 来发现 LAN 网段上的其他设备。在 LAN 上找到一台设备后,Android 应用可以使用标准 TCP 或 UDP 单播套接字与其通信。

源自 Android 的 IPv4 连接会使用 ChromeOS 主机的 IPv4 地址。 在内部,Android 应用会看到分配给网络接口的专用 IPv4 地址。源自 Android 的 IPv6 连接使用与 ChromeOS 主机不同的地址,因为 Android 容器具有专用的公共 IPv6 地址。

有效地使用云端和本地存储空间

Chromebook 可让用户轻松从一台设备迁移到另一台设备。如果用户停止使用一台 Chromebook,然后开始使用另一台 Chromebook,则只需登录,系统就会显示其所有应用。

借助此功能,您可以将应用数据备份到云端,以便在设备间进行同步。不过,即使连接到互联网,您的应用也可以正常运行。而应在设备离���时将用户的工作保存到本地,并在设备恢复在线状态后同步到云端。

Chromebook 还可以在多人间(例如学校)共用。由于本地存储空间不是无限的,因此可以随时从设备中移除整个帐号及其存储空间。对于教学环境,最好记住这种情况。

更新 NDK 库

如果您的应用使用 Android NDK 库且其目标 SDK 版本为 23 或更高版本,请确保文本重定位已从 ARM 和 x86 版本的 NDK 库中移除,因为它们与 Android 6.0(API 级别 23)及更高版本不兼容。如果将文本重定位保留在 NDK 库中,还可能会导致 Chromebook 出现兼容性错误,尤其是在使用 x86 架构的设备上运行时。

为应用开发新的测试用例

如需为应用开发测试用例,首先请确保指定了正确的清单标志。具体来说,请考虑将 screenOrientation 设置为 unspecified。如果您要指定横向模式,请考虑使用 sensorLandscape,以确保在平板电脑上获得最佳体验。

如果您对桌面环境有特殊的尺寸或屏幕方向需求,请考虑添加元标记作为尺寸或屏幕方向提示。如需在手机上添加尺寸和屏幕方向,请改为指定布局 defaultHeightdefaultWidthminHeight 属性。

如果您对特定设备类别的特定输入设备处理感兴趣,请指定 android.hardware.type.pc 以停用输入兼容性模式。

如果您使用任何类型的网络,请确保在连接问题解决或设备从睡眠模式唤醒后,应用可以重新连接到网络。

我们建议查看 ChromeOS 上的 Android 应用的测试用例列表,您可以在测试计划中使用这些用例。测试用例涵盖了 Android 应用应在 ChromeOS 设备上运行时应该准备好应对的常见场景。

多窗口和屏幕方向更改

ChromeOS 的多窗口环境可能会让状态保留和召回问题更加明显。使用 ViewModel 可适时保存和恢复您的状态。

如需测试状态持久性,请将应用最小化一段时间,启动另一项会占用大量资源的进程,然后恢复应用以确认其恢复到之前的状态。

通过按全屏键 (F4)、最大化和恢复窗口测试窗口大小调整。如需测试自由大小调整功能,请先在开发者选项中启用该功能,然后检查应用能否流畅调整大小且不会���溃。

如果您的 ChromeOS 设备支持,请从笔记本电脑模式切换到平板电脑模式,检查一切是否按预期运行。在平板电脑模式下旋转一次设备,测试屏幕方向更改,然后转换回笔记本电脑模式。请重复此步骤几次。

通过偏移界面元素或基于位置的触控输入,确保顶部栏不会破坏您的应用。对于 ChromeOS 设备,请确保您的应用不会在状态栏区域中放置重要信息。

如果您使用的是相机或其他硬件功能(如触控笔),请确保它在执行之前所述的窗口和设备更改时行为正常。