着手开发适用于 Chrome 操作系统的应用

Chrome 操作系统设备(例如 Chromebook)现在支持 Google Play 商店和 Android 应用。本文假设您有一款专为手机或平板电脑打造的现有 Android 应用,并想针对 Chromebook 优化此应用。要了解构建 Android 应用的基础知识,请参阅构建首个应用

更新应用的清单文件

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

从 Chrome 操作系统版本 M53 开始,没有明确要求 android.hardware.touchscreen 功能的所有 Android 应用也可以在支持 android.hardware.faketouch 功能的 Chrome 操作系统设备上运行。不过,为了确保应用可以在所有 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>
    

不同的硬件设备配有一系列不同的传感器。虽然 Android 手持设备通常带有 GPS 和加速度计,但这并不保证每个 Chromebook 中均配有这些传感器。不过,某些情况下会以其他方式提供传感器的功能。例如,Chromebook 可能没有 GPS 传感器,但它们仍可基于 WLAN 连接提供位置数据。有关 Android 平台支持的所有传感器的概览,请参阅传感器概览文档。如果您想要让您的应用在 Chromebook 上运行,而不考虑传感器的可用性,则应将清单文件更新为不要求使用任何传感器。

某些软件功能在 Chromebook 上不受支持。例如,提供自定义 IME、应用微件、动态壁纸和应用启动器等功能的应用不受支持,并且无法在 Chromebook 上安装。要获取 Chromebook 目前不支持的软件功能的完整列表,请参阅不兼容的软件功能

更新目标 SDK 版本

只需将 targetSdkVersion 属性更新为可用的最新 API 级别,应用便可以利用 Android 平台中的所有改进。例如,Android 7.0(API 级别 24)包含针对多窗口支持的增强功能。借助此版本,您可以自由地调整 Activity 的大小,让其感觉起来更自然。您还可以访问众多 API 以在多个应用间执行拖放操作,并自定义鼠标光标。

检查网络要求

Chromebook 在容器中运行整个 Android 操作系统,这一点类似于 Docker 或 LXC。这意味着 Android 无法直接访问系统的 LAN 接口。相反,IPv4 流量会经过内部的网络地址转换 (NAT) 层,而 IPv6 单播流量则会通过 extra hop 进行路由。从 Android 应用到互联网的出站单播连接基本上应该照常运行;但一般来说,入站连接会被屏蔽。来自 Android 的多播或广播数据包不会通过防火墙转发到 LAN。

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

源自 Android 的 IPv4 连接将使用 Chrome 操作系统主机的 IPv4 地址。在内部,Android 应用会发现系统将不公开的 IPv4 地址分配给网络接口。源自 Android 的 IPv6 连接将使用与 Chrome 操作系统主机的不同地址,因为 Android 容器将具有专用的公开 IPv6 地址。

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

Chromebook 最强大的功能之一是它可以让用户轻松地从一个设备迁移到另一个设备。也就是说,如果用户想换一台 Chromebook,则只需在新设备上登录,登录后原有的所有应用都会显示。

要进一步改进此体验,您应该将应用的数据备份到云端,以便在设备之间进行同步。也就是说,应用不应该依赖互联网连接进行正常操作。应用应该在设备处于离线状态时将用户的操作保存在本地,并在设备重新连接到网络后立即将其同步到云端。例如,Google 文档允许用户在离线状态下修改文档,并在设备连接到网络后将更改同步到云端。

Chromebook 还可以在多位用户之间(例如,在学校中)共用。由于本地存储并不是无限的,因此可以随时从设备中移除整个帐号及其存储内容。对于教学环境,最好牢记这一点。

更新 NDK 库

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

为应用开发新的测试用例

首先,请确保指定了正确的清单标记。这些标记包括所需的屏幕方向,建议将 screenOrientation 设为 unspecified。如果您将屏幕方向设为 landscape,请考虑改为使用 sensorLandscape 以确保能够在平板电脑上提供最佳体验。如果您在尺寸或屏幕方向方面有特殊要求,则还应该考虑添加新的元标记作为尺寸或屏幕方向提示,而这只会影响桌面环境。如果您还想在手机上对其进行更改,则应该指定布局 defaultHeightdefaultWidthminHeight

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

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

Google 建议您查看在 Chrome 操作系统中运行的 Android 应用的测试用例,并且您可以在自己的测试计划中使用这些用例。这些测试用例涵盖了 Android 应用要在 Chrome 操作系统设备上运行时应该准备应对的各种常见情形。

多窗口和屏幕方向更改

Chrome 操作系统的多窗口环境可能会让状态持久性问题和再次调用问题更加明显。您应该在必要时使用 ViewModel 保存和恢复状态。

要测试状态持久性,您应该将应用最小化一段时间,同时启动另一项会占用大量资源的进程,然后恢复应用以验证其是否会返回之前的状态。

要测试窗口大小调整功能,请按全屏键 (F4) 将窗口最大化,然后恢复原样。要测试自由大小调整功能,请在开发者选项中启用此功能,然后检查应用能否顺利调整大小,而不会发生崩溃。

如果 Chrome 操作系统设备支持的话,您可以从笔记本电脑模式更改为平板电脑模式,以确定是否一切正常。您可以在平板电脑模式下旋转一次设备以测试屏幕方向更改,然后重新转换为笔记本电脑模式。请重复此步骤几次。

您可以通过偏移界面元素或基于位置信息的轻触输入,确保顶部栏不会导致应用无法运行。对于 Chrome 操作系统设备,请确保应用不会在状态栏区域中放置重要信息。

如果使用摄像头或其他硬件功能(例如触控笔),请确保其在执行上述窗口和设备更改时行为正常。