本文记录了在android-15.0.0_r17源码环境下,给sdk_car_md_x86_64-trunk_staging-userdebug模拟器device添加第三排的两个后排屏的修改。
效果如图,在原来的4块屏幕的基础上,另外加了两个屏幕。

对device/generic/car库的修改patch如下,可以保存到0001-add-2-more-passenger-display-on-md_x86_emulator.patch文件:
java
From 60bbdb2560266c003f90edbd6bbbc3ba5367bcb8 Mon Sep 17 00:00:00 2001
From: *** <***@***.com>
Date: Wed, 25 Feb 2026 15:54:03 +0800
Subject: [PATCH] add 2 more passenger display on md_x86_emulator.
Change-Id: Ib7216162f3fbcddb90934a1d1b7db70ca5cc34a0
---
common/car_md.mk | 8 +++--
.../res/values/config.xml | 4 +++
.../res/xml/car_ux_restrictions_map.xml | 30 +++++++++++++++++++
.../androidRRO/res/values/config.xml | 4 +--
.../display_layout_configuration.xml | 8 +++++
emulator/multi-display/display_settings.xml | 6 ++++
.../input/virtio_input_multi_touch_10.idc | 18 +++++++++++
.../input/virtio_input_multi_touch_11.idc | 18 +++++++++++
8 files changed, 91 insertions(+), 5 deletions(-)
create mode 100644 emulator/multi-display/input/virtio_input_multi_touch_10.idc
create mode 100644 emulator/multi-display/input/virtio_input_multi_touch_11.idc
diff --git a/common/car_md.mk b/common/car_md.mk
index 6b1830a..bf2c86c 100644
--- a/common/car_md.mk
+++ b/common/car_md.mk
@@ -17,7 +17,9 @@
PRODUCT_COPY_FILES += \
device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_7.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_7.idc \
device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_8.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_8.idc \
- device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_9.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_9.idc
+ device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_9.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_9.idc \
+ device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_10.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_10.idc \
+ device/generic/car/emulator/multi-display/input/virtio_input_multi_touch_11.idc:$(TARGET_COPY_OUT_VENDOR)/usr/idc/virtio_input_multi_touch_11.idc
PRODUCT_COPY_FILES += device/generic/car/common/config.ini.car_md:config.ini
@@ -32,7 +34,7 @@ PRODUCT_COPY_FILES += \
EMULATOR_DYNAMIC_MULTIDISPLAY_CONFIG := false
BUILD_EMULATOR_CLUSTER_DISPLAY := true
# Set up additional displays
-EMULATOR_MULTIDISPLAY_HW_CONFIG := 1,968,792,160,0,2,1408,792,160,0,3,1408,792,160,0
+EMULATOR_MULTIDISPLAY_HW_CONFIG := 1,968,792,160,0,2,1408,792,160,0,3,1408,792,160,0,4,1408,792,160,0,5,1408,792,160,0
EMULATOR_MULTIDISPLAY_BOOTANIM_CONFIG := 4619827551948147201,4619827124781842690,4619827540095559171
ENABLE_CLUSTER_OS_DOUBLE:=true
@@ -42,7 +44,7 @@ PRODUCT_PACKAGES += CarServiceOverlayMdEmulatorOsDouble \
# Enable MZ audio by default
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
ro.vendor.simulateMultiZoneAudio=true \
- persist.sys.max_profiles=5 \
+ persist.sys.max_profiles=9 \
com.android.car.internal.debug.num_auto_populated_users=1
PRODUCT_PACKAGES += \
diff --git a/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/values/config.xml b/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/values/config.xml
index c314467..a84943b 100644
--- a/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/values/config.xml
+++ b/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/values/config.xml
@@ -43,6 +43,8 @@
<item>occupantZoneId=1,occupantType=REAR_PASSENGER,seatRow=2,seatSide=left</item>
<item>occupantZoneId=2,occupantType=REAR_PASSENGER,seatRow=2,seatSide=right</item>
<item>occupantZoneId=3,occupantType=FRONT_PASSENGER,seatRow=1,seatSide=oppositeDriver</item>
+ <item>occupantZoneId=4,occupantType=REAR_PASSENGER,seatRow=3,seatSide=left</item>
+ <item>occupantZoneId=5,occupantType=REAR_PASSENGER,seatRow=3,seatSide=right</item>
</string-array>
<!--
@@ -70,6 +72,8 @@
<item>displayPort=2,displayType=MAIN,occupantZoneId=1,inputTypes=TOUCH_SCREEN</item>
<item>displayPort=3,displayType=MAIN,occupantZoneId=2,inputTypes=TOUCH_SCREEN</item>
<item>displayPort=4,displayType=MAIN,occupantZoneId=3,inputTypes=TOUCH_SCREEN</item>
+ <item>displayPort=5,displayType=MAIN,occupantZoneId=4,inputTypes=TOUCH_SCREEN</item>
+ <item>displayPort=6,displayType=MAIN,occupantZoneId=5,inputTypes=TOUCH_SCREEN</item>
</string-array>
<!--
diff --git a/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/xml/car_ux_restrictions_map.xml b/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/xml/car_ux_restrictions_map.xml
index 5c1a600..8398339 100644
--- a/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/xml/car_ux_restrictions_map.xml
+++ b/emulator/cluster/rro_overlays/CarServiceOverlay_MdOsDouble/res/xml/car_ux_restrictions_map.xml
@@ -78,6 +78,36 @@
</RestrictionMapping>
+ <RestrictionMapping physicalPort="5">
+ <DrivingState state="parked">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ <DrivingState state="idling">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ <DrivingState state="moving">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ </RestrictionMapping>
+
+ <RestrictionMapping physicalPort="6">
+ <DrivingState state="parked">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ <DrivingState state="idling">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ <DrivingState state="moving">
+ <Restrictions requiresDistractionOptimization="false" uxr="baseline"/>
+ </DrivingState>
+
+ </RestrictionMapping>
+
<!-- Configure restriction parameters here-->
<RestrictionParameters>
<!-- Parameters to express displayed String related restrictions -->
diff --git a/emulator/multi-display/androidRRO/res/values/config.xml b/emulator/multi-display/androidRRO/res/values/config.xml
index 2e1c5cd..2ec3476 100644
--- a/emulator/multi-display/androidRRO/res/values/config.xml
+++ b/emulator/multi-display/androidRRO/res/values/config.xml
@@ -23,10 +23,10 @@
<bool name="config_perDisplayFocusEnabled">true</bool>
<!-- Maximum number of supported users -->
- <integer name="config_multiuserMaximumUsers">10</integer>
+ <integer name="config_multiuserMaximumUsers">15</integer>
<!-- Maximum number of users we allow to be running at a time -->
- <integer name="config_multiuserMaxRunningUsers">5</integer>
+ <integer name="config_multiuserMaxRunningUsers">9</integer>
<!-- Whether to only install system packages on a user if they're whitelisted for that user
type. These are flags and can be freely combined.
diff --git a/emulator/multi-display/display_layout_configuration.xml b/emulator/multi-display/display_layout_configuration.xml
index 37b1cc8..2a83863 100644
--- a/emulator/multi-display/display_layout_configuration.xml
+++ b/emulator/multi-display/display_layout_configuration.xml
@@ -20,5 +20,13 @@
<address>4619827540095559171</address>
</display>
+ <display enabled="true" defaultDisplay="false" displayGroup="passenger_display3">
+ <address>4619827159320901124</address>
+ </display>
+
+ <display enabled="true" defaultDisplay="false" displayGroup="passenger_display4">
+ <address>4619827479153011973</address>
+ </display>
+
</layout>
</layouts>
diff --git a/emulator/multi-display/display_settings.xml b/emulator/multi-display/display_settings.xml
index 8f63b42..35e468f 100644
--- a/emulator/multi-display/display_settings.xml
+++ b/emulator/multi-display/display_settings.xml
@@ -20,4 +20,10 @@
shouldShowIme="true"
forcedDensity="160" />
+<!-- Display settings for 4th Home -->
+<display name="port:4" forcedDensity="160" shouldShowIme="true" shouldShowSystemDecors="true" />
+
+<!-- Display settings for 5th Home -->
+<display name="port:5" forcedDensity="160" shouldShowIme="true" shouldShowSystemDecors="true" />
+
</display-settings>
diff --git a/emulator/multi-display/input/virtio_input_multi_touch_10.idc b/emulator/multi-display/input/virtio_input_multi_touch_10.idc
new file mode 100644
index 0000000..c11fe93
--- /dev/null
+++ b/emulator/multi-display/input/virtio_input_multi_touch_10.idc
@@ -0,0 +1,18 @@
+device.internal = 1
+
+touch.deviceType = touchScreen
+touch.orientationAware = 1
+
+cursor.mode = navigation
+cursor.orientationAware = 1
+
+# This displayID matches the unique ID of the virtual display created for Emulator.
+# This will indicate to input flinger than it should link this input device
+# with the virtual display.
+touch.displayId = local:4619827159320901124
+
+# Allow touches while the screen is off
+touch.enableForInactiveViewport = 1
+
+# Tap on the display will wake the device.
+touch.wake = 1
diff --git a/emulator/multi-display/input/virtio_input_multi_touch_11.idc b/emulator/multi-display/input/virtio_input_multi_touch_11.idc
new file mode 100644
index 0000000..e319844
--- /dev/null
+++ b/emulator/multi-display/input/virtio_input_multi_touch_11.idc
@@ -0,0 +1,18 @@
+device.internal = 1
+
+touch.deviceType = touchScreen
+touch.orientationAware = 1
+
+cursor.mode = navigation
+cursor.orientationAware = 1
+
+# This displayID matches the unique ID of the virtual display created for Emulator.
+# This will indicate to input flinger than it should link this input device
+# with the virtual display.
+touch.displayId = local:4619827479153011973
+
+# Allow touches while the screen is off
+touch.enableForInactiveViewport = 1
+
+# Tap on the display will wake the device.
+touch.wake = 1
--
2.43.2