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、应用小部件、动态壁纸和应用启动器的应用不受支持,无法安装在Chromebook上。有关Chromebook上不支持的软件功能的完整列表,请参阅不兼容的软件功能。
更新目标SDK
将应用的targetSdkVersion
属性更新到最新的可用API级别,以充分利用Android平台的所有改进。查看不同版本中Android平台的改进。
检查网络要求
Chromebook 在容器中运行完整的 Android 操作系统,类似于 Docker 或 LXC。这意味着 Android 无法直接访问系统的局域网接口。相反,IPv4 流量通过网络地址转换 (NAT) 的内部层传递,IPv6 单播流量则通过额外的跳跃路由。
Android 应用发往互联网的出站单播连接大多按原样工作。一般来说,入站连接会被阻止。来自 Android 的多播或广播数据包不会通过防火墙转发到局域网。
作为多播限制的例外,ChromeOS 运行一项服务,可在 Android 和局域网接口之间转发 mDNS 流量,因此,标准的 网络服务发现 API 是发现局域网段上其他设备的推荐方法。在局域网上找到设备后,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 应用在 ChromeOS 设备上运行时应准备应对的常见场景。
多窗口和方向更改
ChromeOS 的多窗口环境可能会使状态持久性和召回问题更加明显。在适当的时候使用 ViewModel
来保存和恢复您的状态。
要测试状态持久性,请将您的应用最小化一段时间,启动另一个资源密集型进程,然后恢复您的应用以确认它是否返回到您离开时的状态。
通过按全屏键 (F4)、最大化和还原来测试窗口大小调整。要测试自由调整大小,请先在开发者选项中启用它,然后检查您的应用是否可以平滑地调整大小而不会崩溃。
如果您的 ChromeOS 设备支持,请从笔记本电脑模式更改为平板电脑模式,以检查一切是否按预期工作。在平板电脑模式下旋转设备一次以测试方向更改,然后转换回笔记本电脑模式。重复此步骤几次。
确保顶部栏不会通过偏移 UI 元素或基于位置的触摸输入来破坏您的应用。对于 ChromeOS 设备,请确保您的应用不会在状态栏区域放置重要信息。
如果您使用摄像头或其他硬件功能(如笔),请确保在执行前面概述的窗口和设备更改时,其行为正确。