保姆级教程:在AAOS 14模拟器上配置多屏(仪表+中控+副驾)并修改分辨率
2026/5/4 13:05:13 网站建设 项目流程

保姆级教程:在AAOS 14模拟器上配置多屏(仪表+中控+副驾)并修改分辨率

车内多屏交互正成为智能座舱的核心体验。从传统仪表盘到副驾娱乐屏,开发者需要面对分辨率适配、多任务处理等复杂场景。本文将手把手带你从源码编译到参数调优,构建一个1920x1080高清多屏测试环境。

1. 环境准备与源码配置

1.1 获取AAOS 14源码基础环境

确保已完成以下前置条件:

  • 200GB以上可用磁盘空间
  • Ubuntu 22.04 LTS操作系统
  • JDK 17开发环境
  • 已同步AAOS 14源码(建议使用清华镜像源加速)
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-14.0.0_r1 repo sync -j8

1.2 定位多屏配置文件关键路径

多屏配置主要涉及三个核心文件:

  1. device/generic/car/common/car_md.mk- 定义屏幕参数和硬件配置
  2. device/generic/car/emulator/multi-display/display_settings.xml- 控制各屏显示特性
  3. device/generic/car/common/config.ini.car_md- 模拟器基础参数

通过对比sdk_car_x86_64sdk_car_md_x86_64的差异,可以发现多屏方案主要新增了以下功能模块:

功能模块配置文件作用描述
多触点输入virtio_input_multi_touch_*.idc为每个屏幕分配独立触摸输入
显示布局display_layout_configuration.xml定义屏幕物理排列关系
音频分区car_audio_configuration.xml实现多区域独立音频控制

2. 编译多屏模拟器镜像

2.1 选择编译目标

执行以下命令进入编译配置界面:

source build/envsetup.sh lunch sdk_car_md_x86_64-userdebug

关键编译参数说明:

  • PRODUCT_NAME: sdk_car_md_x86_64
  • PRODUCT_DEVICE: emulator_car64_x86_64
  • PRODUCT_MODEL: Car multi-display on x86_64 emulator

2.2 启动增量编译

建议首次编译使用完整构建,后续修改配置后可使用增量编译:

make -j$(nproc) # 首次完整编译 make snod # 增量构建system.img

注意:编译过程中若出现Java堆空间不足,可设置export _JAVA_OPTIONS="-Xmx8g"

3. 分辨率与DPI调优实战

3.1 修改屏幕物理参数

打开car_md.mk文件,定位到EMULATOR_MULTIDISPLAY_HW_CONFIG参数:

# 原始配置 EMULATOR_MULTIDISPLAY_HW_CONFIG := 1,968,792,160,0,2,1408,792,160,0,3,1408,792,160,0 # 修改为1080P配置 EMULATOR_MULTIDISPLAY_HW_CONFIG := 1,1320,1080,220,0,2,1920,1080,220,0,3,1920,1080,220,0

参数格式解析:

<display_id>,<width>,<height>,<dpi>,<flag>,...

3.2 调整显示密度设置

同步修改config.ini.car_mddisplay_settings.xml中的DPI值:

<!-- display_settings.xml示例 --> <display name="port:1" forcedDensity="220" dontMoveToTop="true"/>

3.3 皮肤文件适配

将模拟器皮肤调整为1080P规格:

# config.ini.car_md skin.name=1920x1080 skin.path=1920x1080

4. 多屏模拟器操作指南

4.1 启动模拟器

使用以下命令冷启动多屏模拟器:

emulator -no-snapshot -skin 1920x1080

常用调试参数组合:

  • -gpu host:启用主机GPU加速
  • -memory 6144:分配6GB内存
  • -no-boot-anim:跳过启动动画加速启动

4.2 多屏管理命令

获取当前活跃屏幕信息:

dumpsys display | grep mDisplayId

典型输出示例:

mDisplayId=4619827259835644672, state=ON mDisplayId=4619827551948147201, state=ON mDisplayId=4619827124781842690, state=ON

启动应用到指定屏幕:

am start -n com.android.car.settings/.Settings_Launcher --display 2

4.3 屏幕截图技巧

为每个屏幕单独截图:

for did in $(dumpsys display | grep mDisplayId | cut -d= -f2 | cut -d, -f1); do screencap -d $did -p screen_${did}.png done

5. 常见问题排查

5.1 触摸事件失效

检查/vendor/usr/idc/目录下是否包含多触点配置文件:

virtio_input_multi_touch_7.idc virtio_input_multi_touch_8.idc virtio_input_multi_touch_9.idc

5.2 分辨率未生效

验证步骤:

  1. 确认已执行make snod重新生成system.img
  2. 删除out/target/product/sdk_car_md_x86_64/data缓存
  3. 使用-wipe-data参数启动模拟器

5.3 多屏错位问题

调整display_layout_configuration.xml中的物理位置参数:

<display x="0" y="0" width="1320" height="1080" name="port:1"/> <display x="1320" y="0" width="1920" height="1080" name="port:2"/>

6. 高级调试技巧

6.1 SurfaceFlinger分析

获取各屏图层信息:

dumpsys SurfaceFlinger --display-id 4619827551948147201

6.2 窗口管理调试

查看各屏窗口堆栈:

wm displays

6.3 输入事件监控

实时查看触摸事件分发:

getevent -l /dev/input/event7

在实际项目中,我发现修改DPI后需要同步调整framework/base中的默认尺寸常量。例如将config_defaultDisplayMinimumSize从默认的600dp调整为适应车机的400dp,才能确保系统UI元素正常显示。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询