如何测试 TV 应用在不同品牌电视上的兼容性?

解读

面试官想知道你是否理解国内电视生态碎片化现状,能否给出“低成本、高置信度”的兼容性验证方案,而不仅仅是“买一堆电视”。重点考察:

  1. 对 TV 硬件差异(芯片、遥控器、屏幕参数、音频输出、DRM、摄像头、麦克风)的敏感度;
  2. 对国内主流品牌(小米、华为、海信、创维、TCL、长虹、康佳、索尼、三星、OPPO、雷鸟、当贝、坚果等)ROM 定制点的了解;
  3. 能否用自动化+云测+众测+本地真机矩阵的组合拳,在有限预算内把问题收敛到“必现 Top N”;
  4. 是否能把兼容性指标量化并沉淀为持续集成门禁,而不是一次性“跑完就算”。

知识点

  1. 国内 TV 碎片化根因:AOSP 版本跨度大(Android 9→12→14)、厂商闭源 TV OS(MIUI TV、鸿蒙、VIDAA、WebOS、Tizen)、芯片平台(Amlogic、MTK、Rockchip、海思、瑞芯微)驱动差异。
  2. 关键兼容维度:屏幕(4K/1080p、HDR10、杜比视界、刷新率、overscan 安全区)、遥控器(方向键/语音/空鼠/触控板、按键码映射、长按/双击)、焦点导航(D-pad、Touch Mode、Accessibility Focus)、音频输出(HDMI ARC、SPDIF、蓝牙)、DRM(Widevine L1/L3、PlayReady、ChinaDRM)、摄像头/麦克风权限、后台进程限制(国内厂商杀后台策略)、系统权限(悬浮窗、后台定位、自启动、通知、后台音频)。
  3. 测试金字塔:单元→集成→UI 自动化→云测真机→众测→线下用户灰度。TV 场景下 UI 自动化最难,需依赖 dpad 事件注入与图像比对。
  4. 国内主流云测平台:华为云测、腾讯 WeTest、百度 MTC、Testin、阿里云 MQC,均提供 TV 机型池,但库存波动大,需要脚本提前预约。
  5. 自动化框架:Espresso+Compose+UIAutomator 混合,通过 ADB 发送 KEYCODE_DPAD_* 事件;图像比对用 OpenCV+SSIM,解决焦点高亮差异。
  6. 兼容性门禁指标:Crash 率 < 0.1%,ANR 率 < 0.05%,启动时间 P90 < 1.2 s,焦点丢失率 0,黑边/裁切率 0,DRM 播放失败 0,音频延迟 < 40 ms。
  7. 国内分发渠道:华为应用市场、小米电视商店、当贝市场、沙发管家、当贝投影、坚果商店、OPPO 电视商店、腾讯极光、爱奇艺奇异果、优酷 CIBN、芒果 TV;每个渠道对 SDK 接口、权限、广告、支付、DRM 都有额外校验,需同步做渠道包兼容。

答案

“我会把兼容性测试拆成四层,确保两周内用 30 台真机覆盖 95% 用户机型。”

  1. 机型分级
    拉取内部埋点 + 友盟 + 奥维云网市占,按“芯片×品牌×年度销量”三维打分,选出 Top 30 机型:

    • 核心档(10 台):小米 EA43、红米 A55、华为智慧屏 SE55、海信 E5H、创维 A23、TCL V8E、索尼 X80K、三星 Q60C、OPPO K9、雷鸟 515;
    • 长尾档(20 台):覆盖 Amlogic S905L、MTK 9652、海思 V560、Rockchip 3566 四颗主流 SoC,Android 9/10/11/12 各至少 2 台,带杜比视界与 ChinaDRM 各 2 台。
  2. 自动化基线
    在 Jenkins nightly job 里,用 Gradle Managed Device + 云测 TV 镜像,先跑 200 条 Espresso/UIAutomator 脚本,覆盖启动、焦点循环、播放器换集、支付、账号登录、语音搜索、外设插拔;脚本统一通过 ADB 发送 KEYCODE_DPAD 事件,图像断言用 SSIM>0.95 判定焦点高亮;失败自动截屏、录屏、dump layout,上传 Allure 报告。

  3. 真机矩阵
    每周三凌晨,脚本预约华为云测+WeTest 共 30 台 TV,跑 90 min 完整用例;同时把 APK 上传到内部“众测宝”小程序,推送 200 名外部家庭用户(覆盖 12 省、带宽 50–300 M),48 h 内回收 500+ 份日志;Crash/ANR 自动回捞到 Sentry,按“机型+芯片+Android 版本”三维聚类。

  4. 人工复测
    对自动化+众测发现的 Top 10 必现问题,拉出 5 台代表机型到实验室复测:

    • 屏幕安全区:用 5% 安全边距测试,确保关键按钮不被裁切;
    • 遥控器冲突:同时接蓝牙语音遥控器、红外遥控器、手机 App 遥控器,验证键值冲突;
    • 音频透传:播放 Dolby Atmos 片源,HDMI eARC 回连功放,检查是否降级为 PCM;
    • DRM 降级:在 Widevine L1 机型上强制切 L3,看是否黑屏或降清晰度;
    • 后台杀进程:模拟 1 G 内存,连续启动 10 个应用,再切回自家 App,检查播放续播是否丢失。
  5. 门禁与回归
    把“Crash 率 < 0.1%、焦点丢失 0、黑边/裁切 0”写进 GitLab MR 模板,未达标禁止合入;发版前再跑一轮“渠道包校验”,确保小米/华为/当贝三家商店对权限、广告、支付 SDK 的特殊要求全部通过。

通过“分级选型+自动化+云测+众测+人工复测”组合拳,过去三个版本我们把线上兼容投诉从 1.3% 降到 0.2%,单版本硬成本控制在 3 万元以内。

拓展思考

  1. 如果预算砍半,只能留 10 台真机,你会如何再缩?
    答:用“芯片+Android 版本”二维矩阵,每颗 SoC 只留市占最高的一档品牌,再把 DRM、HDR、语音遥控器做成云测按需预约,线下只留 5 台“最小交集”机型,其余用众测日志补全。

  2. 折叠屏手机已经普及,TV 未来也可能出现“可卷曲”或“分体显示”新形态,兼容性模型如何提前布局?
    答:把“屏幕尺寸/密度”从静态 values-sw600dp 升级为动态 WindowSizeClass,焦点导航抽象成 DirectionalPad+Touch+Gesture 三层,播放器模块提前接入 Google ExoPlayer + 华为 WisePlay 双 DRM 中间层,确保分辨率切换时无缝续播;同时在新形态真机未上市前,用 Android Emulator 的 Virtual Display 模拟 21:9、32:9、4K@120 Hz 场景,提前暴露布局溢出问题。