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, CardView2. QNX: material_button_init() | ❌ 认证失败(CTS 报错 MATERIAL_DESIGN_UNSUPPORTED) |
| R09-020 | 必须支持响应式布局 | 1. Android:ConstraintLayout2. 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 | 必须支持紧急状态 UI | 1. 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. 必须通过的测试用例
| 测试用例 | 验证目标 | 通过标准 |
|---|---|---|
MaterialDesignTest | Material 组件是否正常 | 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 |
UIComplexityTest | UI 交互复杂度是否受限 | interaction_steps <= 3 |
VoiceInteractionTest | 语音交互是否正常 | voice_command_recognized == true |
UIPerformanceTest | UI 渲染性能是否达标 | 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 性能 | 检查帧率是否 ≥ 60fps | adb shell dumpsys gfxinfo |
| 6. 紧急状态 UI | 检查 EmergencyUi.show() 是否注册 | adb logcat -s EMERGENCY |
🔥 认证通过率提升技巧:
- 在 CI 流程中强制检查 Material Design:
# 自动化测试脚本 if [ $(get_material_component_count.sh) -lt 5 ]; then echo "Material components not used" exit 1 fi- 使用 Google 的参考实现:
- Android 参考:
car-receiver-library/examples/android/ui- QNX 参考:
car-receiver-library/examples/qnx/ui
五、附:Google 官方资源与避坑指南
| 资源 | 用途 | 避坑提示 |
|---|---|---|
| UI/UX GitHub | 获取参考实现 | ⚠️ 切勿修改 MaterialButton 或 ConstraintLayout 内部逻辑 |
| 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 测试套件。
下一步行动: