保姆级教程:在Ubuntu上编译并运行Android Automotive 14多屏模拟器(含分辨率自定义)
保姆级教程在Ubuntu上编译并运行Android Automotive 14多屏模拟器含分辨率自定义当新能源车的屏幕数量从传统单中控演变为一车六屏甚至更多时车载系统开发者的测试环境搭建就变得尤为关键。本文将带你从零构建一个支持四屏显示的Android Automotive OS 14模拟器环境重点解决三个核心问题如何正确编译多屏配置的镜像、如何自定义各屏幕分辨率参数以及如何验证多屏协同效果。1. 环境准备与源码获取在Ubuntu 22.04 LTS上我们需要先配置符合AOSP编译要求的开发环境。执行以下命令安装基础依赖sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig python3接着配置repo工具并同步AAOS 14源码mkdir ~/aosp cd ~/aosp repo init -u https://android.googlesource.com/platform/manifest -b android-14.0.0_r1 repo sync -j8 --no-tags --no-clone-bundle注意源码下载约需80GB磁盘空间建议使用国内镜像源加速。若同步中断可通过repo sync --fail-fast继续。2. 多屏配置编译详解完成源码同步后切换到多屏专用编译配置source build/envsetup.sh lunch sdk_car_md_x86_64-userdebug这个sdk_car_md_x86_64配置与标准单屏版的差异主要体现在三个关键文件中文件路径作用多屏特性device/generic/car/common/car_md.mk多屏硬件参数定义配置4个物理显示屏参数device/generic/car/emulator/multi-display/display_settings.xml显示行为控制定义各屏是否显示系统装饰/输入法device/generic/car/common/config.ini.car_md模拟器皮肤配置设置主屏分辨率与DPI开始编译前建议先清理旧构建产物make clobber make -j$(nproc)常见编译问题解决方案内存不足增加swap空间或减少并行编译线程数Java堆溢出在build/core/main.mk中添加JAVA_OPTS -Xmx8g依赖缺失根据报错信息安装对应开发库3. 分辨率自定义实战默认配置的792p分辨率已不符合当前车机主流规格我们通过三步改造升级到1080p步骤一修改硬件参数编辑device/generic/car/common/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 # 修改为格式display_id,width,height,dpi,flag EMULATOR_MULTIDISPLAY_HW_CONFIG : 1,1320,1080,220,0,2,1920,1080,220,0,3,1920,1080,220,0步骤二调整DPI设置在device/generic/car/common/config.ini.car_md中更新显示密度hw.lcd.density220 skin.name1920x1080 skin.path1920x1080步骤三更新显示策略修改device/generic/car/emulator/multi-display/display_settings.xmldisplay nameport:1 forcedDensity220/ display nameport:2 forcedDensity220/ display nameport:3 forcedDensity220/修改完成后需要重新编译系统镜像make -j$(nproc)4. 多屏模拟器运行与验证启动模拟器时建议禁用快照以获取干净状态emulator -no-snapshot -no-boot-anim -gpu swiftshader_indirect多屏模拟器启动后可以通过这些命令验证效果检查显示屏信息adb shell dumpsys display | grep -E mDisplayId|physicalSize测试多屏应用启动# 在display 2启动设置应用 adb shell am start -n com.android.car.settings/.Settings_Launcher_Homepage --display 2屏幕截图比对# 获取各屏ID display_ids$(adb shell dumpsys SurfaceFlinger --display-id) # 为每个屏幕截图 for id in $display_ids; do adb shell screencap -d $id -p /sdcard/${id}.png done典型多屏布局效果Display 01920x1080 中控主屏Display 11320x1080 仪表盘Display 2/31920x1080 副驾娱乐屏5. 高级调试技巧当遇到触摸事件异常时需要检查virtio_input_multi_touch_*.idc配置文件是否正确部署到/vendor/usr/idc/目录。可以通过以下命令验证输入设备映射adb shell getevent -l多屏音频路由验证方法adb shell dumpsys car_audio如果需要动态调整屏幕参数可以使用wm命令实时修改# 修改display 1的分辨率 adb shell wm size -d 1 1600x900 # 修改display 2的DPI adb shell wm density -d 2 2406. 性能优化建议为提升多屏模拟器的运行效率推荐以下配置调整GPU加速配置# 使用主机GPU加速需NVIDIA驱动 emulator -gpu host内存分配策略在config.ini.car_md中增加hw.ramSize8192 hw.gpu.modeauto多屏渲染优化# 启用GLES 3.1渲染 adb shell setprop debug.egl.api GLES_3_1实测性能数据对比基于Intel i7-12700K配置方案单屏FPS四屏FPS内存占用软件渲染2485.2GBGPU加速60386.1GB遇到模拟器卡顿时可以尝试关闭不需要的屏幕adb shell service call SurfaceFlinger 1008 i32 display_id