Skip to content

车载鸿蒙

1. 车载鸿蒙概述

1.1 HarmonyOS for Automotive

HarmonyOS for Automotive 架构:
┌─────────────────────────────────────────────────┐
│  车载鸿蒙应用层                                   │
│  ├── 车机应用(导航/音乐/通讯)                   │
│  ├── 座舱 HMI(仪表盘/中控/后屏)                 │
│  └── 第三方应用(游戏/办公/影音)                 │
├─────────────────────────────────────────────────┤
│  车载框架层                                      │
│  ├── ArkUI(座舱 UI 框架)                       │
│  ├── 车载框架 API(车辆控制/传感器/通信)        │
│  ├── 分布式能力(手机-车机协同)                 │
│  └── AI 能力(语音/视觉/导航)                   │
├─────────────────────────────────────────────────┤
│  车载中间件                                      │
│  ├── 车载系统服务(电源/空调/车窗)              │
│  ├── 车载安全(ADAS/安全域隔离)                 │
│  ├── OTA 升级(空中下载)                        │
│  └── 多域融合(座舱域/智驾域/车身域)           │
├──────────────────────────────────────────────────┤
│  车载内核/驱动                                   │
│  ├── HongMeng Kernel(车载实时内核)             │
│  ├── HDF 车载驱动(传感器/执行器)               │
│  └── 车载通信(车载以太网/车载 CAN)             │
└─────────────────────────────────────────────────┘

1.2 车载鸿蒙 vs Android Auto/CarPlay

维度车载鸿蒙Android AutoCarPlay
架构原生车载系统手机投屏手机投屏
深度集成车辆 API 直接集成有限 API有限 API
自定义高度自定义 HMI固定 UI 模板固定 UI 模板
性能原生应用,高性能受限于手机性能受限于手机性能
离线能力完全离线可用依赖手机网络依赖手机网络
车机厂商OEM 深度定制第三方适配第三方适配
AI 集成小艺车载Google AISiri
生态鸿蒙生态(元服务)Google 生态Apple 生态

2. 车机应用开发

2.1 车载应用模型

车机应用模型:
┌─────────────────────────────────────────────────────┐
│  UIAbility(车机页面入口)                          │
│  ├── 仪表盘页面                                    │
│  ├── 中控页面                                      │
│  ├── 后屏页面                                      │
│  └── HUD 页面                                      │
├─────────────────────────────────────────────────────┤
│  车载 ExtensionAbility                             │
│  ├── VehicleExtensionAbility(车辆控制)           │
│  ├── AudioExtensionAbility(音频管理)             │
│  ├── NavigationExtensionAbility(导航管理)        │
│  └── DisplayExtensionAbility(显示管理)           │
└─────────────────────────────────────────────────────┘

2.2 车载 UI 开发

arkts
// 车机仪表盘组件
@Entry
@Component
struct Dashboard {
  @State speed: number = 0;
  @State battery: number = 85;
  @State navigation: NavigationInfo = new NavigationInfo();

  build() {
    Row() {
      // 左侧速度表
      Speedometer({ speed: this.speed })
        .width(280)
        .height(280)

      // 中间导航信息
      Column() {
        NavigationInfo({
          destination: this.navigation.destination,
          eta: this.navigation.eta,
          distance: this.navigation.distance
        })
      }
      .width('40%')
      .height('100%')

      // 右侧状态卡片
      Column() {
        StateCard({ title: '电量', value: this.battery + '%', icon: '🔋' })
        StateCard({ title: '里程', value: '12,580', icon: '🚗' })
        StateCard({ title: '温度', value: '24°C', icon: '🌡️' })
      }
      .width(200)
      .height('100%')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#1a1a2e')
  }
}

// 速度表组件
@Component
struct Speedometer {
  @Prop speed: number = 0;

  build() {
    Column() {
      // 圆形速度显示
      Canvas((ctx: CanvasRenderingContext2D) => {
        // 绘制速度圆环
        ctx.beginPath();
        ctx.arc(140, 140, 100, -Math.PI / 2, -Math.PI / 2 + (this.speed / 200) * Math.PI * 2);
        ctx.lineWidth = 20;
        ctx.strokeStyle = this.speed > 120 ? '#ff4444' : '#4488ff';
        ctx.stroke();

        // 绘制速度数值
        ctx.fillStyle = '#ffffff';
        ctx.font = '48px Arial';
        ctx.textAlign = 'center';
        ctx.fillText(String(this.speed), 140, 160);
        ctx.font = '16px Arial';
        ctx.fillText('km/h', 140, 185);
      })
      .width(280)
      .height(280)
      .borderRadius(140)
    }
  }
}

2.3 车载传感器接入

arkts
// 车载传感器数据接入
import { vehicleSensor } from '@kit.VehicleKit';

class VehicleSensorService {
  private speedSubscription: number = 0;
  private batterySubscription: number = 0;

  async initSensors() {
    // 订阅车速
    this.speedSubscription = await vehicleSensor.subscribe(
      vehicleSensor.SensorType.SPEED,
      (data: vehicleSensor.SensorData) => {
        console.log(`Speed: ${data.value} km/h`);
      }
    );

    // 订阅电量
    this.batterySubscription = await vehicleSensor.subscribe(
      vehicleSensor.SensorType.BATTERY_LEVEL,
      (data: vehicleSensor.SensorData) => {
        console.log(`Battery: ${data.value}%`);
      }
    );
  }

  async unsubscribe() {
    await vehicleSensor.unsubscribe(this.speedSubscription);
    await vehicleSensor.unsubscribe(this.batterySubscription);
  }
}

2.4 车机与手机协同

arkts
// 车机与手机分布式协同
import { distributedAbility } from '@kit.DistributedKit';

// 1. 手机 → 车机:导航投屏
async function castToCar(phoneUri: string) {
  const carDevices = await distributedAbility.getCarDevices();
  if (carDevices.length > 0) {
    await distributedAbility.castAbility({
      fromApp: phoneUri,
      toDevice: carDevices[0].deviceId,
      type: distributedAbility.CastType.NAVIGATION
    });
  }
}

// 2. 车机 → 手机:音乐续播
async function musicContinuity() {
  const phone = await distributedAbility.findPhoneDevice();
  if (phone) {
    await distributedAbility.transferAbility({
      fromDevice: 'car',
      toDevice: phone.deviceId,
      want: {
        bundleName: 'com.example.music',
        abilityName: 'MusicAbility'
      }
    });
  }
}

// 3. 手机 → 车机:日历同步
async function syncCalendar() {
  await distributedAbility.syncData({
    dataType: 'calendar',
    deviceId: 'car-device-id'
  });
}

3. 车载 HMI 设计

3.1 车载 HMI 设计原则

车载 HMI 设计原则:
├── 安全优先:驾驶时减少分心,关键信息一目了然
├── 简洁布局:信息密度适中,避免信息过载
├── 大图标/大字体:驾驶中需远距离识别
├── 语音优先:关键操作通过语音完成
├── 暗色主题:减少驾驶时的屏幕眩光
├── 实时反馈:操作后立即显示反馈
├── 断网可用:离线场景核心功能可用
└── 多屏协同:仪表盘/中控/后屏/HUD 协同

3.2 多屏协同

多屏协同架构:
┌──────────────┐  ┌──────────────────┐  ┌──────────────┐
│  仪表盘      │  │  中控屏          │  │  后屏        │
│  (驾驶信息)  │──│  (导航/多媒体)   │──│  (娱乐/控制) │
│              │  │                  │  │              │
│  速度/转速   │  │  导航            │  │  视频        │
│  电量/里程   │  │  音乐            │  │  空调控制    │
│  驾驶辅助    │  │  电话            │  │  座椅控制    │
│  警示信息    │  │  设置            │  │  后排娱乐    │
└──────────────┘  └──────────────────┘  └──────────────┘

多屏协同能力:
├── 跨屏拖拽:导航从手机拖到中控屏
├── 多屏联动:中控屏选音乐,后屏显示歌词
├── 屏间切换:导航信息自动显示到仪表盘
└── 内容迁移:应用窗口在屏间迁移

4. 车载开发工具

4.1 DevEco Studio 车载开发支持

DevEco Studio 车载开发工具:
├── 车载模拟器:模拟不同车机屏幕
├── 车载 HMI 预览:多屏同时预览
├── 车载 API 检查:车辆 API 兼容性检查
├── 传感器模拟:模拟车速/电量/温度等
├── 性能分析:车载应用性能监控
└── OTA 调试:OTA 升级调试

5. 🎯 面试高频考点

Q1: 车载鸿蒙与 Android Auto/CarPlay 的区别?

答要点

  • 架构:车载鸿蒙是原生车载系统,Android Auto/CarPlay 是手机投屏
  • 深度集成:车载鸿蒙直接集成车辆 API,第三方仅能访问有限 API
  • 自定义:车载鸿蒙 OEM 高度自定义 HMI,Android Auto/CarPlay 固定模板
  • 性能:车载鸿蒙原生应用高性能,投屏方案受限于手机性能
  • 离线:车载鸿蒙完全离线可用,投屏方案依赖手机网络
  • 生态:鸿蒙生态(元服务/分布式) vs Google/Apple 生态

Q2: 车载 HMI 设计原则是什么?

答要点

  • 安全优先:驾驶时减少分心
  • 简洁布局:避免信息过载
  • 大图标/大字体:远距离可识别
  • 语音优先:关键操作通过语音
  • 暗色主题:减少眩光
  • 多屏协同:仪表盘/中控/后屏/HUD 协同
  • 断网可用:离线核心功能可用

Q3: 车机与手机如何协同?

答要点

  • 分布式软总线:设备发现 + 连接
  • 跨设备应用迁移:导航/音乐无缝切换
  • 多屏协同:内容在屏间迁移/联动
  • 共享能力:手机摄像头/麦克风共享给车机
  • 同步数据:日历/联系人/媒体库同步
  • 统一体验:跨设备一致的操作体验

💡 面试提示:车载鸿蒙是鸿蒙最重要的增长方向之一。重点掌握 原生架构优势车载 HMI 设计原则车机-手机协同多屏协同。对比 Android Auto/CarPlay 时强调深度集成原生性能