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 传感器,但它们仍可基于 WLAN 连接提供位置数据。如需详细了解 Android 平台支持的传感器,请参阅传感器概览。
如果您想要让您的应用在 Chromebook 上运行,而不考虑传感器的可用性,请将清单文件更新为不要求使用任何传感器。
某些软件功能在 Chromebook 上不受支持。例如,提供自定义 IME、应用微件、动态壁纸和应用启动器等功能的应用不受支持,并且无法在 Chromebook 上安装。如需查看 Chromebook 不支持的软件功能的完整列表,请参阅不兼容的软件功能。
更新目标 SDK 版本
将应用的 targetSdkVersion
属性更新为可用的最新 API 级别,以便利用 Android 平台中的所有改进。查看 Android 平台在不同版本中的改进。
检查网络要求
Chromebook 在容器中运行整个 Android 操作系统,这一点类似于 Docker 或 LXC。这意味着 Android 无法直接访问系统的 LAN 接口。相反,IPv4 流量会经过内部的网络地址转换 (NAT) 层,而 IPv6 单播流量则会通过 extra hop 进行路由。
从 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 还可以在多位用户之间(例如,在学校中)共用。由于本地存储空间并非无限,因此可以随时从设备中移除整个账号及其存储内容。对于教学环境,最好牢记这一点。
为应用开发新的测试用例
如需为应用开发测试用例,请先确保指定了正确的清单标志。具体而言,请考虑将 screenOrientation
设置为 unspecified
。如果您想指定横向屏幕方向,不妨考虑使用 sensorLandscape
,以确保能够在平板电脑上提供最佳体验。
如果您对桌面环境有特殊的尺寸或屏幕方向需求,不妨考虑添加元标记作为尺寸或屏幕方向提示。如需在手机上添加尺寸和屏幕方向,请改为指定布局 defaultHeight
、defaultWidth
或 minHeight
属性。
如果您对特定设备类别的特定输入设备处理感兴趣,请指定 android.hardware.type.pc
以停用输入兼容性模式。
如果您使用任何类型的网络,请确保在解决连接问题或设备从睡眠模式唤醒后,应用能够重新连接到网络。
建议您查看在 ChromeOS 中运行的 Android 应用的测试用例列表,并且您可以在自己的测试计划中使用这些用例。这些测试用例涵盖了 Android 应用要在 ChromeOS 设备上运行时应该准备应对的常见情形。
多窗口和屏幕方向更改
ChromeOS 的多窗口环境可能会让状态持久性问题和再次调用问题更加明显。在必要时,使用 ViewModel
保存和恢复状态。
如需测试状态持久性,请将应用最小化一段时间,同时启动另一项会占用大量资源的进程,然后恢复应用以确认其是否会返回之前的状态。
要测试窗口大小调整功能,请按全屏键 (F4) 将窗口最大化,然后恢复原样。如需测试自由大小调整功能,请先在开发者选项中启用此功能,然后检查应用能否顺利调整大小,而不会发生崩溃。
如果您的 ChromeOS 设备支持的话,您可以从笔记本电脑模式更改为平板电脑模式,以检查是否一切正常。您可以在平板电脑模式下旋转一次设备以测试屏幕方向更改,然后切换回笔记本电脑模式。重复此步骤几次。
您可以通过偏移界面元素或基于位置信息的轻触输入,确保顶部栏不会导致应用无法运行。对于 ChromeOS 设备,请确保应用不会在状态栏区域中放置重要信息。
如果使用摄像头或其他硬件功能(例如触控笔),请确保其在执行上述窗口和设备更改时行为正常。