ChromeOS 设备(如 Chromebook)支持 Google Play 商店和 Android 应用。本文假设您已有一个为手机或平板电脑设计的 Android 应用,您希望将其优化以用于 Chromebook。要了解构建 Android 应用的基础知识,请参阅构建您的第一个 Android 应用。
更新应用的清单文件
首先,更新您的清单文件以考虑 Chromebook 与运行 Android 的其他设备之间的一些关键硬件和软件差异。
从 ChromeOS M53 版本开始,所有 Android 应用,如果未明确要求android.hardware.touchscreen
功能,则也适用于支持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、应用小部件、动态壁纸和应用启动器的应用不受支持,并且无法安装在 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 也可以在大量人群中共享,例如在学校。由于本地存储不是无限的,因此可以随时从设备中删除整个帐户及其存储。对于教育环境,最好牢记这种情况。
更新 NDK 库
如果您的应用使用 Android NDK 库并且其目标 SDK 版本为 23 或更高,请确保从 ARM 和 x86 版本的 NDK 库中删除文本重定位,因为它们与 Android 6.0(API 级别 23)及更高版本不兼容。通过在 NDK 库中保留文本重定位,您也可能会导致与 Chromebook 的兼容性错误,尤其是在使用 x86 架构的设备上运行时。
为您的应用开发新的测试用例
要为您的应用开发测试用例,首先请确保指定了正确的清单标志。特别是,请考虑将screenOrientation
设置为unspecified
。如果您想指定横向方向,请考虑使用sensorLandscape
以确保平板电脑上的体验最佳。
如果您对桌面环境有特殊的大小或方向需求,请考虑添加元标记作为大小或方向提示。要在手机上包含大小和方向,请改用指定布局defaultHeight
、defaultWidth
或minHeight
属性。
如果您对特定设备类别感兴趣的特定输入设备处理,请指定android.hardware.type.pc
以禁用输入兼容模式。
如果您使用任何类型的网络,请确保应用在连接问题解决或设备从睡眠模式唤醒后可以重新连接到网络。
我们建议查看Chrome OS 上 Android 应用的测试用例列表,您可以在测试计划中使用这些用例。这些测试用例涵盖了如果预计 Android 应用将在 Chrome OS 设备上运行,则应为其准备的常见场景。
多窗口和方向更改
Chrome OS 的多窗口环境可能使状态持久性和恢复问题更加明显。在适当的时候使用ViewModel
来保存和恢复您的状态。
要测试状态持久性,请将您的应用最小化一段时间,启动另一个资源密集型进程,然后恢复您的应用以确认它是否恢复到您离开时的状态。
通过按下全屏键 (F4)、最大化和还原来测试窗口大小调整。要测试自由调整大小,请先在开发者选项中启用它,然后检查您的应用是否平滑地调整大小而不会崩溃。
如果您的 Chrome OS 设备支持,请从笔记本电脑模式更改为平板电脑模式,以检查所有内容是否按预期工作。在平板电脑模式下旋转设备一次以测试方向更改,然后转换回笔记本电脑模式。重复此步骤几次。
确保顶部栏不会通过偏移 UI 元素或基于位置的触摸输入来破坏您的应用。对于 Chrome OS 设备,请确保您的应用不会在状态栏区域放置重要信息。
如果您正在使用相机或其他硬件功能(如笔),请确保在执行前面概述的窗口和设备更改时,它能够正常工作。