安卓设备碎片化与测试策略解析
1. 分辨率与设备密度
一些分辨率并不常见,若应用不针对特定用户或旧设备类型,可从设备测试矩阵中剔除。例如,ldpi 密度仅用于一小部分安卓设备,市场份额仅 0.1%,很少有应用针对此小分辨率屏幕进行优化。tvdpi 是小众屏幕分辨率,使用率仅 2.7%,因安卓会自动缩小 hdpi 资源以适配该分辨率,可放心忽略。即便如此,仍需支持五种设备密度,且要测试数量众多的屏幕分辨率和宽高比。
2. 硬件与 3D 支持
- 初代安卓设备 :首款安卓设备 HTC Dream(又名 T-Mobile G1),屏幕为 320×480 像素的中密度触摸屏,配备硬件键盘、扬声器、麦克风、五个按钮、可点击轨迹球和后置摄像头。其搭载的 Qualcomm MSM7201A 处理器是 528 MHz 的 Arm11 处理器,仅支持 OpenGL ES 1.1。
- 现代高端设备 :以三星 Galaxy S21 Ultra 5G 为例,屏幕分辨率达 3200×1440,具备 2.9 GHz 8 核处理器、支持 Vulkan 1.1、OpenGL ES 3.2 和 OpenCL 2.0 的 Arm Mali - G78 MP14 GPU、五个摄像头、三个麦克风、立体声扬声器、超声波指纹识别器等多种传感器。
- 虚拟传感器 :安卓利用物理传感器数据创建“虚拟”传感器供应用使用,如游戏旋转向量(加速度计和陀螺仪数据组合)、重力(加速度计和陀螺仪或磁力计数据组合)等。但虚拟传感器需足够的物理传感器才能使用,多数手机有加速度计,但可能省略陀螺仪或磁力计,影响运动检测精度并禁用部分虚拟传感器。
- 3D API 支持 :几乎所有移动处理器都支持基本 3D API,初代安卓手机支持 OpenGL ES 1.1。现代手机支持 OpenGL ES 2.0、3.0、3.1 和 3.2 等后续版本。OpenGL ES 2.0 从功能管线转向可编程管线,可通过着色器创建复杂效果;OpenGL ES 3.0 进一步提升 3D 图形性能和硬件独立性。目前多数设备支持 OpenGL ES 3.2。Vulkan 是较新的图形 API,具有跨桌面和移动设备的可移植性,能更好控制线程和内存管理,但采用速度不如 OpenGL ES,64%的安卓设备有一定程度的 Vulkan 支持,其中 42%支持 Vulkan 1.1,22%支持 Vulkan 1.0.3。
以下是不同 3D API 支持情况对比表格:
| 3D API | 特点 | 支持设备比例 |
| ---- | ---- | ---- |
| OpenGL ES 1.1 | 初代安卓手机支持,移动特定版本的 OpenGL 3D 标准 | - |
| OpenGL ES 2.0 | 从功能管线转向可编程管线,可通过着色器创建复杂效果 | 现代设备基本支持 |
| OpenGL ES 3.0 | 提升 3D 图形性能和硬件独立性,支持顶点数组对象等特性 | - |
| OpenGL ES 3.2 | 最新版本,多数设备支持(67.54%) | 67.54% |
| Vulkan 1.0.3 | 较新图形 API,具有可移植性等优势 | 22% |
| Vulkan 1.1 | 较新图形 API,具有可移植性等优势 | 42% |
3. 并行设备的持续测试
- 安卓设备生态系统碎片化 :安卓设备生态系统存在大量碎片化,受安卓操作系统架构、OEM 和 SoC 供应商生态系统以及平台受欢迎程度等因素影响。设备模拟器可用于开发和基本测试,但无法模拟复杂的硬件配置、设备驱动、自定义内核和真实传感器行为,因此需要在设备上进行大量手动和自动化测试。
-
硬件测试的两种方法
- 自建设备实验室 :利用现有安卓设备,通过 Device Farmer 等开源库管理设备。Device Farmer 可通过网页浏览器远程控制安卓设备,支持手动和自动化测试,还能管理设备库存、设备分组和预订。搭建设备实验室需硬件支持,包括驱动计算机(推荐 Linux 系统,如 Intel NUC)、供电 USB 集线器、无线路由器、大量安卓设备和足够长的电缆。但运行大型设备实验室成本高,存在设备维护、WiFi 干扰、电缆布线和设备可靠性等挑战。
- 外包给云服务 :使用公共云基础设施上的设备农场进行测试,具有易于上手和无需维护的优点。可选择设备并进行手动或自动化测试,部分云服务还支持自动化机器人测试。流行的云服务有亚马逊 AWS 设备农场、谷歌 Firebase 测试实验室和微软 Visual Studio App Center。
以下是自建设备实验室硬件要求列表:
1. 驱动计算机:推荐 Linux 系统,如 Intel NUC
2. USB 集线器:供电 USB 集线器,确保设备连接和稳定供电
3. 无线路由器:为设备提供网络连接,建议使用专用网络
4. 安卓设备:选择目标用户群体中常见和流行的设备
5. 大量电缆:较长电缆,便于设备与 USB 集线器连接,避免设备和硬件组件过热
mermaid 格式流程图展示自建设备实验室步骤:
graph LR
A[确定需求] --> B[准备硬件]
B --> C[安装 Device Farmer]
C --> D[连接设备]
D --> E[配置网络]
E --> F[开始测试]
4. 云服务中的移动测试管道
4.1 AWS 设备农场
亚马逊将移动设备云作为其公共云服务的一部分,提供了 AWS 设备农场。借助该服务,开发者能够使用自己的 AWS 账户在各种真实设备上运行自动化测试。创建新的 AWS 设备农场测试的步骤如下:
1.
上传 APK 文件
:首先,上传已编译的 APK 文件,也可以从最近更新的文件中进行选择。
2.
配置测试自动化
:AWS 设备农场支持多种测试框架,如 Appium 测试(可使用 Java、Python、Node.js 或 Ruby 编写)、Calabash、Espresso、Robotium 或 UI Automator。若没有自动化测试,AWS 还提供了两个机器人应用测试工具,即 Fuzz 和 Explorer。
3.
选择运行设备
:从用户创建的设备池或默认的五个最流行设备池中挑选要运行测试的设备。
4.
设置设备状态
:在开始测试前,可以指定要安装的数据或其他依赖应用,设置无线电状态(如 WiFi、蓝牙、GPS 和 NFC),更改 GPS 坐标,修改区域设置,并设置网络配置文件。
5.
运行测试
:最后,在选定的设备上运行测试,每个设备的执行超时时间最长可达 150 分钟。如果测试执行速度较快,测试可以提前结束,同时这也为测试运行成本设定了上限。
AWS 设备农场为个体开发者提供了免费配额以启动测试自动化,额外的设备测试按每分钟低价收费,还提供了每月计划以同时在多个设备上进行并行测试。截至撰写本文时,其共享设备池共有 91 台设备,其中 54 台为安卓设备,且大多数设备可用性高,减少了排队等待或设备不可用的情况。此外,AWS 设备农场还提供了一些集成方式来运行自动化测试,例如可以在 Android Studio 中使用其 Gradle 插件运行测试,也可以通过 Amazon 提供的 Jenkins 插件在持续集成系统中启动设备测试。
以下是 AWS 设备农场创建测试步骤的表格:
| 步骤 | 操作内容 |
| ---- | ---- |
| 1 | 上传 APK 文件 |
| 2 | 配置测试自动化(选择框架或使用机器人测试工具) |
| 3 | 选择运行设备 |
| 4 | 设置设备状态 |
| 5 | 运行测试(设置执行超时时间) |
4.2 谷歌 Firebase 测试实验室
谷歌收购 Firebase 后,不断扩展和改进其服务。Firebase 测试实验室是其移动设备测试平台,提供了与 AWS 设备农场类似的功能。开发者可以先使用谷歌提供的免费配额,每天运行有限数量的测试,之后可以升级到按设备小时计费的按需付费计划。
Firebase 测试实验室提供了多种启动测试的方式:
-
Android Studio
:Firebase 测试实验室与 Android Studio 集成,开发者可以像在本地设备上一样轻松在其移动设备云中运行测试。
-
Firebase 网页 UI
:在 Firebase 网页控制台上传 APK 文件后,首先会运行自动化的 Robo 测试。此外,还可以使用 Espresso、Robotium 或 UI Automator 运行自己的自动化测试。游戏开发者还可以选择运行集成游戏循环来模拟用户场景。
-
自动化命令行脚本
:通过其命令行 API,可以轻松将 Firebase 测试实验室集成到 CI 系统中,如 Jenkins、CircleCI、JFrog Pipelines 或其他喜欢的 CI/CD 系统。
截至撰写本文时,Firebase 测试实验室支持的安卓设备数量比 AWS 设备农场更多,达到 109 台,并且为流行设备提供了多个 API 级别。由于与谷歌的安卓工具紧密集成,以及为个体开发者提供了慷慨的免费配额,这是让开发团队开始构建测试自动化的便捷方式。
以下是 Firebase 测试实验室启动测试方式的列表:
1. Android Studio 集成测试
2. Firebase 网页 UI 运行测试(包括 Robo 测试和自定义自动化测试)
3. 自动化命令行脚本集成到 CI 系统
4.3 微软 Visual Studio App Center
微软 Visual Studio App Center 原名 Xamarin 测试云,提供了所有云服务中最令人印象深刻的设备列表,有 349 种安卓设备类型可供运行测试。然而,与 AWS 设备农场和 Firebase 测试实验室不同,该服务没有为开发者提供免费层级。不过,微软提供了 30 天的试用服务,允许使用单个物理设备进行测试,付费计划则根据要使用的并发设备数量收费,这对于大型企业来说是合理的选择。
Visual Studio App Center 侧重于通过 App Center CLI 进行命令行集成,缺少一些用户友好的功能,如机器人测试器和通过网页控制台进行简单测试执行。从 App Center CLI 可以轻松使用 Appium、Calabash、Espresso 或 XamarainUITest 启动自动化测试,并且与 CI/CD 工具的集成也很直接。总体而言,Visual Studio App Center 在设备覆盖方面表现出色,明确专注于企业移动设备测试。但对于独立开发者或小型团队来说,它的入门门槛较高,前期成本较大,不过随着业务规模的扩大,它将能很好地发挥作用。
以下是三大云服务的对比表格:
| 云服务 | 免费层级 | 设备数量 | 测试启动方式 | 适用对象 |
| ---- | ---- | ---- | ---- | ---- |
| AWS 设备农场 | 个体开发者有免费配额 | 91 台(54 台安卓设备) | 多种测试框架,支持集成 Android Studio 和 Jenkins | 各类开发者 |
| 谷歌 Firebase 测试实验室 | 个体开发者有免费配额 | 109 台安卓设备 | Android Studio 集成、网页 UI、命令行脚本集成 | 开发团队 |
| 微软 Visual Studio App Center | 无免费层级,有 30 天单设备试用 | 349 种安卓设备类型 | App Center CLI 命令行集成 | 大型企业 |
mermaid 格式流程图展示云服务测试选择流程:
graph LR
A[选择云服务] --> B{是否有免费需求}
B -- 是 --> C[考虑 AWS 或 Firebase]
B -- 否 --> D[考虑 Visual Studio App Center]
C --> E{更注重设备数量还是工具集成}
E -- 设备数量 --> F[选择 Firebase]
E -- 工具集成 --> G[选择 AWS]
D --> H[根据企业设备需求选择计划]
综上所述,安卓设备的碎片化给应用测试带来了巨大挑战,但通过合理选择测试策略,如自建设备实验室或使用云服务,开发者能够有效地应对这些挑战,确保应用在各种设备上都能提供良好的用户体验。不同的测试方式各有优缺点,开发者应根据自身的需求、资源和预算来做出合适的选择。
超级会员免费看
907

被折叠的 条评论
为什么被折叠?



