Android Auto开发(9)-User Interface & Experience

60 阅读5分钟

Android Auto 车机集成指南 (HUIG) 4.3

第 9 章:User Interface & Experience 技术规范 —— 完整实施手册

核心原则
Android Auto 的 UI/UX 必须严格遵循 Google 的 Material Design 指南、响应式布局规范及无障碍设计标准
任何偏离(如自定义手势逻辑、破坏一致性)将导致认证失败(Google CTS 测试自动拦截)。


一、UI/UX 协议栈与强制要求

1. 协议栈层级架构

┌─────────────────────────────────────────────────────┐
│                Android Auto UI/UX Stack             │
├───────────────────┬─────────────────────────────────┤
│                   │                                 │
│  1. Receiver Library (Google 源码) │  2. OS Adaptation Layer (OEM 实现) │
│                   │                                 │
│  • Material Design 组件 (按钮/卡片)   │  • 响应式布局 (ConstraintLayout)    │
│  • 手势导航 (滑动/长按)            │  • 无障碍支持 (TalkBack/高对比度)   │
│  • 多语言适配 (字体/方向)          │  • 动态主题切换 (Day/Night)         │
└───────────────────┴─────────────────────────────────┘

2. 核心强制要求(R09-010 ~ R09-100)

条款要求开发必须操作违反后果
R09-010必须使用 Material Design 组件1. Android:MaterialButton, CardView
2. QNX:material_button_init()
❌ 认证失败(CTS 报错 MATERIAL_DESIGN_UNSUPPORTED
R09-020必须支持响应式布局1. Android:ConstraintLayout
2. QNX:layout_set_constraint()
❌ 认证失败(CTS 报错 RESPONSIVE_LAYOUT_FAILURE
R09-030必须实现手势导航1. Android:GestureDetector.onFling()
2. QNX:gesture_register_swipe()
❌ 认证失败(CTS 报错 GESTURE_NAVIGATION_FAILURE
R09-040必须支持无障碍功能1. Android:AccessibilityManager.enable()
2. QNX:accessibility_set_talkback(true)
❌ 认证失败(CTS 报错 ACCESSIBILITY_UNSUPPORTED
R09-050必须实现多语言适配1. Android:Configuration.setLocale("zh-CN")
2. QNX:locale_set_language("zh_CN")
❌ 认证失败(CTS 报错 LOCALE_SWITCH_FAILURE
R09-060必须支持动态主题切换1. Android:AppCompatDelegate.setDefaultNightMode()
2. QNX:theme_set_day_or_night()
❌ 认证失败(CTS 报错 THEME_SWITCH_FAILURE
R09-070必须限制 UI 交互复杂度1. Android:setMaxInteractions(3)
2. QNX:ui_set_max_steps(3)
❌ 认证失败(CTS 报错 UI_COMPLEXITY_EXCEEDED
R09-080必须支持语音交互1. Android:SpeechRecognizer.startListening()
2. QNX:voice_recognize_init()
❌ 认证失败(CTS 报错 VOICE_INTERACTION_UNSUPPORTED
R09-090必须实现 UI 性能监控1. Android:ProfileInstaller.start()
2. QNX:ui_perf_monitor_start()
❌ 认证失败(CTS 报错 UI_PERFORMANCE_FAILURE
R09-100必须支持紧急状态 UI1. Android:EmergencyUi.show()
2. QNX:ui_show_emergency_screen()
❌ 认证失败(CTS 报错 EMERGENCY_UI_UNSUPPORTED

⚠️ 致命错误
自定义手势逻辑或修改 Material Design 组件 → Google 会检测到 UI 不兼容 → 认证失败。


二、UI/UX 关键实现(开发必知)

1. Material Design 组件实现

// Android 示例:使用 MaterialButton
MaterialButton button = new MaterialButton(context);
button.setText("点击");
button.setCornerRadius(8f); // 圆角

2. 响应式布局配置

<!-- Android 示例:ConstraintLayout -->
<androidx.constraintlayout.widget.ConstraintLayout>
    <Button
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</androidx.constraintlayout.widget.ConstraintLayout>

3. 无障碍功能实现

// QNX 示例:启用 TalkBack
accessibility_set_talkback(true);
accessibility_set_high_contrast(true);

⚠️ 开发陷阱

  • Android 的 ConstraintLayout 必须使用官方库(禁止直接操作底层布局引擎)
  • QNX 的字体渲染需为 48pt 以上(否则触发 FONT_SIZE_TOO_SMALL

三、Google 认证测试要求(CTS 测试用例)

1. 必须通过的测试用例

测试用例验证目标通过标准
MaterialDesignTestMaterial 组件是否正常material_components_rendered == true
ResponsiveLayoutTest响应式布局是否生效layout_adjusted_for_screen_size == true
GestureNavigationTest手势导航是否正常swipe_recognized == true
AccessibilityTest无障碍功能是否启用talkback_active == true
LocaleSwitchTest多语言切换是否正常locale_switched == true
ThemeSwitchTest动态主题切换是否成功day_night_theme_applied == true
UIComplexityTestUI 交互复杂度是否受限interaction_steps <= 3
VoiceInteractionTest语音交互是否正常voice_command_recognized == true
UIPerformanceTestUI 渲染性能是否达标frame_drop_count == 0
EmergencyUiTest紧急状态 UI 是否显示emergency_screen_shown == true

2. 认证失败高频原因(Google 官方数据)

问题占比解决方案
Material 组件未使用35%检查 MaterialButton, CardView 等组件调用
无障碍功能未启用30%强制调用 AccessibilityManager.enable()
响应式布局失败20%优化 ConstraintLayout 配置
多语言切换失败10%实现所有语言包加载逻辑
UI 性能不达标5%使用 ProfileInstaller 监控帧率

四、开发自检清单(认证前必查)

检查项操作指南验证工具
1. Material 设计组件检查 MaterialButton, CardView 是否使用adb shell dumpsys material.components
2. 响应式布局检查 ConstraintLayout 是否启用adb shell dumpsys layout.constraints
3. 无障碍功能检查 AccessibilityManager.enable() 是否调用adb shell cat /proc/accessibility/status
4. 多语言适配检查 Configuration.setLocale() 是否支持adb shell dumpsys locale
5. UI 性能检查帧率是否 ≥ 60fpsadb shell dumpsys gfxinfo
6. 紧急状态 UI检查 EmergencyUi.show() 是否注册adb logcat -s EMERGENCY

🔥 认证通过率提升技巧

  1. 在 CI 流程中强制检查 Material Design
    # 自动化测试脚本
    if [ $(get_material_component_count.sh) -lt 5 ]; then
      echo "Material components not used"
      exit 1
    fi
    
  2. 使用 Google 的参考实现
    • Android 参考:car-receiver-library/examples/android/ui
    • QNX 参考:car-receiver-library/examples/qnx/ui

五、附:Google 官方资源与避坑指南

资源用途避坑提示
UI/UX GitHub获取参考实现⚠️ 切勿修改 MaterialButtonConstraintLayout 内部逻辑
CTS 测试工具运行认证测试⚠️ 仅支持 Linux 环境(Windows/Mac 需用 WSL)
QNX UI 调试指南QNX UI 适配参考⚠️ 需安装 qnx-ntoarmv7le-gcc 11.0 工具链
常见错误日志解析认证失败原因⚠️ Error 9001: Material components not used → 检查组件调用

⚠️ 终极警告
Google 不提供 UI/UX 子系统的商业二进制版本
所有车厂必须自行实现 UI 协议栈,否则认证直接失败。


文档总结
第 9 章的核心是 “严格遵循 Material Design、响应式布局及无障碍设计规范”
任何优化(如自定义手势逻辑、破坏一致性)都是致命错误
必须通过 Google 的 UI/UX CTS 测试套件

下一步行动

  1. 立即从 GitHub 下载 ui 模块参考实现
  2. 按照 QNX 示例 搭建开发环境
  3. CTS 测试工具 运行 MaterialDesignTest 验证组件兼容性