给android源码下的模拟器添加两个后排屏的修改

本文记录了在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
相关推荐
敲敲了个代码2 小时前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展
雪人不是菜鸡2 小时前
简单工厂模式
开发语言·算法·c#
铸人2 小时前
大数分解的Shor算法-C#
开发语言·算法·c#
yyjtx2 小时前
DHU上机打卡D31
开发语言·c++·算法
rit84324992 小时前
全变分正则化图像去噪的MATLAB实现
开发语言·matlab
勇往直前plus2 小时前
python格式化字符串
开发语言·前端·python
恋猫de小郭2 小时前
Flutter 的真正价值是什么?深度解析再结合鸿蒙,告诉你 Flutter 的真正优势
android·前端·flutter
未来之窗软件服务3 小时前
AI人工智能(二十四)错误示范ASR张量错误C#—东方仙盟练气期
开发语言·人工智能·c#·仙盟创梦ide·东方仙盟
大黄说说3 小时前
不是进阶阶梯,而是协作维度:重新理解 Claude Code 中的 Commands、Skills 与 Agents
开发语言