开始构建适用于 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 设备,请确保您的应用不会在状态栏区域中放置重要信息。

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