ไลบรารี Jetpack WindowManager ช่วยนักพัฒนาแอปพลิเคชันให้รองรับรูปแบบของอุปกรณ์ใหม่ๆ และสภาพแวดล้อมแบบหลายหน้าต่าง
WindowManager Extensions (ส่วนขยาย) คือโมดูลแพลตฟอร์ม Android ที่เลือกใช้ได้ ซึ่งเปิดใช้ฟีเจอร์ต่างๆ ของ Jetpack WindowManager โมดูลนี้ใช้งานใน AOSP ใน frameworks/base/libs/WindowManager/Jetpack
และจัดส่งในอุปกรณ์ที่รองรับฟีเจอร์ WindowManager
การเผยแพร่โมดูลส่วนขยาย
ระบบจะคอมไพล์ส่วนขยายเป็นไลบรารี .jar
และวางไว้ในพาร์ติชัน system_ext
ในอุปกรณ์หากเปิดใช้ส่วนขยายในไฟล์ Make ของอุปกรณ์
หากต้องการเปิดใช้ส่วนขยายในอุปกรณ์ ให้เพิ่มข้อมูลต่อไปนี้ลงในไฟล์ make ของอุปกรณ์
$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
ซึ่งจะเปิดใช้แพ็กเกจ androidx.window.extensions
และ androidx.window.sidecar
ในอุปกรณ์ รวมถึงตั้งค่าพร็อพเพอร์ตี้ persist.wm.extensions.enabled
การรวมแพ็กเกจเหล่านี้ไว้ในไฟล์ makefile จะวางประกาศใน etc/permissions/
ด้วย ซึ่งทำให้กระบวนการของแอปพลิเคชันใช้งานได้ โดยปกติแล้ว ระบบจะโหลดและเรียกใช้โมดูลเป็นส่วนหนึ่งของกระบวนการของแอปพลิเคชันเมื่อรันไทม์เมื่อไลบรารี WindowManager ของ Jetpack นำมาใช้ ซึ่งทําให้การดำเนินการคล้ายกับโค้ดเฟรมเวิร์กฝั่งไคลเอ็นต์ ดังที่แสดงในภาพต่อไปนี้
![](https://source.android.google.cn/static/docs/core/display/images/wm_extensions_in_app_process.png?authuser=002&hl=th)
โมดูล androidx.window.extensions
คือโมดูลส่วนขยายปัจจุบันที่อยู่ระหว่างการพัฒนา โมดูล androidx.window.sidecar
เป็นโมดูลเดิมที่รวมไว้เพื่อให้ใช้งานร่วมกับ Jetpack WindowManager เวอร์ชันแรกๆ ได้ แต่เราไม่ได้ดูแลรักษาไซด์คาร์นี้อีกต่อไป
รูปภาพต่อไปนี้แสดงตรรกะในการกำหนดการใช้ androidx.window.extensions
หรือ androidx.window.sidecar
![](https://source.android.google.cn/static/docs/core/display/images/wm_extensions_decision_tree.png?authuser=002&hl=th)
androidx.window.extensions
หรือ androidx.window.sidecar
โมดูลส่วนขยาย
ส่วนขยายมีฟีเจอร์การแบ่งหน้าจอสำหรับอุปกรณ์หน้าจอขนาดใหญ่แบบพับได้และอุปกรณ์ที่รองรับการแบ่งหน้าจอบนจอแสดงผลภายนอก พื้นที่ฟีเจอร์มีดังนี้
การติดตั้งใช้งานส่วนขยายของ OEM สามารถให้คอมโพเนนต์ Null หรือคอมโพเนนต์ที่มีการใช้งานเมธอดเริ่มต้นหรือ Stub ในอินเทอร์เฟซ WindowExtensions
หากฮาร์ดแวร์ของอุปกรณ์ไม่รองรับฟีเจอร์ที่เกี่ยวข้อง เว้นแต่จะมีการขอฟีเจอร์ดังกล่าวโดยเฉพาะในเอกสารคำจำกัดความความเข้ากันได้ (CDD)
7.1.1.1
ส่วนขยายและ API ของ Jetpack
โมดูลส่วนขยาย WindowManager มีแพลตฟอร์ม API ของตัวเองนอกเหนือจากแพลตฟอร์ม API สาธารณะ โมดูลส่วนขยายได้รับการพัฒนาแบบสาธารณะในไลบรารี androidx.window.extensions
ของ Jetpack ที่ไม่ได้แสดงต่อนักพัฒนาซอฟต์แวร์ เพื่อให้ Jetpack WindowManager (androidx.window
) ลิงก์กับโมดูลดังกล่าวได้เมื่อถึงเวลาคอมไพล์ โดยปกติแล้ว อินเทอร์เฟซ Extensions API จะมี API ระดับล่าง
API ที่ส่วนขยายมีไว้สำหรับให้ไลบรารี Jetpack WindowManager เท่านั้น Extensions API ไม่ได้มีไว้เพื่อให้นักพัฒนาแอปพลิเคชันเรียกใช้โดยตรง อย่าเพิ่มไลบรารีส่วนขยายเป็น Dependency สําหรับแอปพลิเคชันในไฟล์บิลด์ Gradle เพื่อให้แน่ใจว่าฟังก์ชันการทํางานถูกต้อง หลีกเลี่ยงการคอมไพล์ไลบรารีส่วนขยายล่วงหน้าลงในแอปพลิเคชันโดยตรง แต่ให้ใช้การโหลดรันไทม์แทนเพื่อป้องกันไม่ให้เกิดการโหลดคลาสส่วนขยายที่คอมไพล์ไว้ล่วงหน้าและคลาสส่วนขยายที่รันไทม์ให้มาผสมกัน
Jetpack WindowManager (androidx.window
) มีไว้เพื่อเพิ่มเป็นข้อกําหนดของแอปพลิเคชันและให้บริการ API แบบสาธารณะสําหรับนักพัฒนาแอป รวมถึง API สําหรับฟีเจอร์ส่วนขยาย WindowManager ไลบรารี WindowManager จะโหลดส่วนขยายลงในกระบวนการของแอปพลิเคชันโดยอัตโนมัติ และรวม Extensions API ระดับล่างไว้ในอินเทอร์เฟซระดับสูงที่เน้นการทำงานมากขึ้น WindowManager Jetpack API เป็นไปตามมาตรฐานการพัฒนาแอปพลิเคชัน Android สมัยใหม่และมีไว้เพื่อให้สามารถทำงานร่วมกันได้อย่างสะดวกด้วยการผสานรวมกับโค้ดเบสที่ใช้ไลบรารี AndroidX อื่นๆ ได้อย่างราบรื่น
เวอร์ชันและการอัปเดตส่วนขยาย
โมดูลส่วนขยายจะอัปเดตพร้อมกับแพลตฟอร์ม Android ได้ทุกปีหรือทุกไตรมาส การอัปเดตรายไตรมาสช่วยให้สามารถเพิ่มระดับ Extensions API ระหว่างการอัปเดต API ของแพลตฟอร์ม Android ซึ่งช่วยให้สามารถทําซ้ำได้เร็วขึ้นและเปิดโอกาสให้ OEM เพิ่มการเข้าถึง API อย่างเป็นทางการสําหรับฟีเจอร์ใหม่ๆ ในช่วงใกล้เปิดตัวฮาร์ดแวร์
ตารางต่อไปนี้แสดงเวอร์ชัน androidx.window.extensions
API สำหรับ Android เวอร์ชันต่างๆ
เวอร์ชันแพลตฟอร์ม Android | ระดับ API ของ WindowManager Extensions | เวอร์ชัน API ของ androidx.window.extensions |
---|---|---|
Android 15 | 6 | 1.5.0 (เร็วๆ นี้) |
Android 14 QPR3 | 5 | 1.4.0 (เร็วๆ นี้) |
Android 14 QPR1 | 4 | 1.3.0 |
Android 14 | 3 | 1.2.0 |
Android 13 QPR3 | 2 | 1.1.0 |
Android 13 | 1 | 1.0.0 |
Android 12L | 1 | 1.0.0 |
ระดับ Extensions API (คอลัมน์กลาง) จะเพิ่มขึ้นทุกครั้งที่มีการเพิ่มแพลตฟอร์ม API ที่เสถียรที่มีอยู่ (คอลัมน์ขวา)
ความเข้ากันได้แบบย้อนหลังและแบบไปข้างหน้า
Jetpack WindowManager จัดการกับความซับซ้อนของการจัดการกับการอัปเดตระดับ API ที่บ่อยครั้ง การพัฒนา API ที่รวดเร็ว และการรองรับการทำงานแบบย้อนหลัง เมื่อโค้ดไลบรารีทำงานในกระบวนการสมัคร ไลบรารีจะตรวจสอบระดับ Extensions API ที่ประกาศไว้และให้สิทธิ์เข้าถึงฟีเจอร์ตามระดับที่ประกาศไว้
นอกจากนี้ WindowManager ยังตรวจสอบการแสดงผลของ Java ในรันไทม์ของ Extensions API ที่พร้อมใช้งานตามระดับ Extensions API ที่ประกาศไว้เพื่อปกป้องแอปพลิเคชันจากการขัดข้องขณะรันไทม์ด้วย หากไม่ตรงกัน WindowManager จะปิดใช้ส่วนขยายได้ (บางส่วนหรือทั้งหมด) และรายงานฟีเจอร์ที่เกี่ยวข้องว่าไม่พร้อมใช้งานสำหรับแอปพลิเคชัน
ส่วนขยาย WindowManager ติดตั้งใช้งานเป็นโมดูล system_ext
ที่ใช้ API แพลตฟอร์มส่วนตัวเพื่อเรียกใช้ส่วนหลักของ WindowManager, DeviceStateManager
และบริการระบบอื่นๆ ในการใช้งานฟีเจอร์ส่วนขยาย
การขยายเวลาอาจไม่รองรับการใช้งานกับส่วนขยายเวอร์ชันก่อนเปิดตัวก่อนการเปิดตัวแพลตฟอร์ม Android ประจำไตรมาสหรือประจำปีที่เกี่ยวข้องซึ่งมีการเผยแพร่เวอร์ชันดังกล่าว ประวัติทั้งหมดของ Extensions API จะอยู่ในไฟล์ข้อความ window:extensions:extensions
API ของสาขารุ่น
ส่วนขยายเวอร์ชันใหม่ต้องทำงานร่วมกับ WindowManager เวอร์ชันเก่าที่คอมไพล์ไว้ในแอปพลิเคชันต่อไปเพื่อรักษาความเข้ากันได้ในอนาคต ด้วยเหตุนี้ Extensions API เวอร์ชันใหม่จึงเพิ่มเฉพาะ API ใหม่เท่านั้นและไม่นำ API เวอร์ชันเก่าออก ด้วยเหตุนี้ แอปพลิเคชันที่มี WindowManager เวอร์ชันเก่าจึงใช้ Extensions API เวอร์ชันเก่าที่แอปคอมไพล์ไว้ได้ต่อไป
การยืนยัน CTS ช่วยให้มั่นใจได้ว่า Extensions API เวอร์ชันที่ประกาศในอุปกรณ์จะมี API ทั้งหมดของเวอร์ชันนั้นและเวอร์ชันก่อนหน้าพร้อมใช้งาน
ประสิทธิภาพ
ระบบจะแคชโมดูลส่วนขยายไว้ในตัวโหลดคลาสของระบบที่ไม่ใช่บูตไบต์แพธโดยค่าเริ่มต้นตั้งแต่ Android 14 (API ระดับ 34) เป็นต้นไป ดังนั้นจึงไม่มีผลกระทบต่อประสิทธิภาพเนื่องจากการโหลดโมดูลลงในหน่วยความจำเมื่อแอปเริ่มต้น การใช้ฟีเจอร์ของโมดูลแต่ละรายการอาจส่งผลเล็กน้อยต่อลักษณะประสิทธิภาพของแอปเมื่อมีการดำเนินการเรียก IPC เพิ่มเติมระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์
โมดูล
การฝังกิจกรรม
คอมโพเนนต์การฝังกิจกรรมช่วยให้แอปพลิเคชันเพิ่มประสิทธิภาพ UI สำหรับอุปกรณ์หน้าจอขนาดใหญ่และจอแสดงผลภายนอกได้ การฝังกิจกรรมช่วยให้สามารถแสดงกิจกรรม 2 อย่างควบคู่กันในเลย์เอาต์แบบหลายแผง ซึ่งช่วยอำนวยความสะดวกในการพัฒนาแอปแบบปรับเปลี่ยนได้สำหรับแอปพลิเคชันเดิม
คอมโพเนนต์การฝังกิจกรรมต้องพร้อมใช้งานในอุปกรณ์ทุกเครื่องที่มีจอแสดงผลในตัวเท่ากับหรือใหญ่กว่า sw600dp
นอกจากนี้ คุณยังต้องเปิดใช้การฝังกิจกรรมในอุปกรณ์ที่รองรับการเชื่อมต่อจอแสดงผลภายนอกด้วย เนื่องจากแอปพลิเคชันอาจแสดงในขนาดที่ใหญ่ขึ้นเมื่อมีการเชื่อมต่อจอแสดงผลภายนอกขณะรันไทม์
การกำหนดค่าอุปกรณ์
ไม่จำเป็นต้องมีการกําหนดค่าอุปกรณ์ที่เฉพาะเจาะจง นอกเหนือจากการเปิดใช้งานข้อบังคับของส่วนขยายตามที่อธิบายไว้ในส่วนการเผยแพร่ข้อบังคับของส่วนขยาย คุณควรเปิดใช้ส่วนขยายในอุปกรณ์ทั้งหมดที่รองรับโหมดหลายหน้าต่าง Android เวอร์ชันในอนาคตมีแนวโน้มที่จะกำหนดให้ต้องใช้ส่วนขยายในการกําหนดค่าอุปกรณ์แบบพกพาและหน้าจอขนาดใหญ่ทั่วไป
ข้อมูลเลย์เอาต์หน้าต่าง
คอมโพเนนต์ข้อมูลเลย์เอาต์หน้าต่างจะระบุตำแหน่งและสถานะของการบานพับในอุปกรณ์แบบพับได้เมื่อบานพับตัดผ่านหน้าต่างแอปพลิเคชัน ข้อมูลเลย์เอาต์ของหน้าต่างช่วยให้แอปพลิเคชันตอบสนองและแสดงเลย์เอาต์ที่เพิ่มประสิทธิภาพในโหมดตั้งโต๊ะบนอุปกรณ์แบบพับได้ ดูรายละเอียดการใช้งานได้ที่ทําให้แอปของคุณรองรับการพับ
อุปกรณ์ Android แบบพับได้ที่มีบานพับที่เชื่อมต่อพื้นที่แผงแสดงผลแยกกันหรือต่อเนื่องกันต้องทำให้แอปพลิเคชันเข้าถึงข้อมูลเกี่ยวกับบานพับได้ผ่าน WindowLayoutComponent
ตำแหน่งและขอบของบานพับต้องรายงานโดยสัมพันธ์กับหน้าต่างแอปพลิเคชันที่ระบุโดย Context
ที่ส่งไปยัง API หากขอบเขตของกรอบแอปพลิเคชันไม่ตัดกับขอบเขตของบานพับ ก็ไม่ต้องรายงานบานพับ DisplayFeature
นอกจากนี้ คุณไม่จําเป็นต้องรายงานฟีเจอร์การแสดงผลเมื่อตำแหน่งของฟีเจอร์นั้นอาจรายงานได้ไม่ถูกต้อง เช่น เมื่อผู้ใช้สามารถย้ายหน้าต่างแอปพลิเคชันได้อย่างอิสระในโหมดหลายหน้าต่างหรือโหมด Letterboxing ที่เข้ากันได้
สำหรับฟีเจอร์การพับ คุณต้องรายงานการอัปเดตสถานะเมื่อตำแหน่งบานพับเปลี่ยนแปลงระหว่างสถานะที่มั่นคง โดยค่าเริ่มต้นในสถานะการแสดงผลแบบแบน API ต้องรายงาน FoldingFeature.State.FLAT
หากฮาร์ดแวร์ของอุปกรณ์อยู่ในโหมดพับครึ่งได้โดยมีสถานะคงที่
API ต้องรายงานFoldingFeature.State.HALF_OPENED
ไม่มีสถานะ "ปิด" ใน API เนื่องจากในกรณีเช่นนี้ หน้าต่างแอปพลิเคชันจะมองไม่เห็นหรือไม่ข้ามขอบเขตบานพับ
การกำหนดค่าอุปกรณ์
OEM ต้องดำเนินการต่อไปนี้เพื่อรองรับการใช้งานฟีเจอร์การพับ
กำหนดค่าสถานะอุปกรณ์ใน
device_state_configuration.xml
ให้DeviceStateManagerService
ใช้ ดูข้อมูลอ้างอิงได้ที่DeviceStateProviderImpl.java
หากการติดตั้งใช้งานเริ่มต้นของ
DeviceStateProvider
หรือDeviceStatePolicy
ไม่เหมาะกับอุปกรณ์ คุณสามารถใช้การติดตั้งใช้งานที่กําหนดเองได้เปิดใช้โมดูลส่วนขยายตามที่อธิบายไว้ในส่วนการจัดจำหน่ายของโมดูลส่วนขยาย
ระบุตําแหน่งของฟีเจอร์การแสดงผลใน
com.android.internal.R.string.config_display_features
ทรัพยากรสตริง (ปกติอยู่ในframeworks/base/core/res/res/values/config.xml
ในการวางซ้อนของอุปกรณ์)รูปแบบที่ควรจะเป็นสำหรับสตริงคือ
<type>-[<left>,<top>,<right>,<bottom>]
type
อาจเป็นfold
หรือhinge
ค่าของleft
,top
,right
และbottom
คือพิกัดพิกเซลแบบจำนวนเต็มในพื้นที่พิกัดของจอแสดงผลในแนวการวางแนวการแสดงผลตามปกติ สตริงการกําหนดค่าอาจมีฟีเจอร์การแสดงผลหลายรายการโดยคั่นด้วยเครื่องหมายอัฒภาคเช่น
<!-- Jetpack WindowManager display features --> <string name="config_display_features" translatable="false">fold-[1000,0,1000,2000]</string>
กําหนดการแมประหว่างตัวระบุสถานะอุปกรณ์ภายในที่ใช้ใน
DeviceStateManager
กับค่าคงที่สถานะสาธารณะที่ส่งไปยังนักพัฒนาแอปในcom.android.internal.R.array.config_device_state_postures
รูปแบบที่คาดไว้สำหรับแต่ละรายการมีดังนี้
<device_specific_state_identifier>:<Jetpack WindowManager state identifier>
ตัวระบุสถานะที่รองรับมีดังนี้
COMMON_STATE_NO_FOLDING_FEATURES = 1
: รัฐไม่มีฟีเจอร์การพับที่จะรายงาน เช่น อาจเป็นสถานะปิดของอุปกรณ์แบบพับเข้าที่มีหน้าจอหลักอยู่ด้านในCOMMON_STATE_HALF_OPENED = 2
: ฟีเจอร์การพับเปิดอยู่ครึ่งหนึ่งCOMMON_STATE_FLAT = 3
: ฟีเจอร์การพับแบน เช่น อาจเป็นสถานะเปิดของอุปกรณ์แบบพับเข้าที่มีหน้าจอหลักอยู่ด้านในCOMMON_STATE_USE_BASE_STATE = 1000
: ใน Android 14 ค่าที่ใช้สำหรับสถานะที่จำลองซึ่งสถานะบานพับจะมาจากสถานะฐานตามที่ระบุไว้ในCommonFoldingFeature.java
ดูข้อมูลเพิ่มเติมได้
DeviceStateManager.DeviceStateCallback#onBaseStateChanged(int)
เช่น
<!-- Map of System DeviceState supplied by DeviceStateManager to WindowManager posture.--> <string-array name="config_device_state_postures" translatable="false"> <item>0:1</item> <!-- CLOSED : COMMON_STATE_NO_FOLDING_FEATURES --> <item>1:2</item> <!-- HALF_OPENED : COMMON_STATE_HALF_OPENED --> <item>2:3</item> <!-- OPENED : COMMON_STATE_FLAT --> <item>3:1</item> <!-- REAR_DISPLAY : COMMON_STATE_NO_FOLDING_FEATURES --> <item>4:1000</item> <!-- CONCURRENT : COMMON_STATE_USE_BASE_STATE --> </string-array>
พื้นที่หน้าต่าง
คอมโพเนนต์พื้นที่หน้าต่างมีชุดฟีเจอร์ที่ให้สิทธิ์แอปพลิเคชันเข้าถึงจอแสดงผลและพื้นที่แสดงผลเพิ่มเติมในอุปกรณ์แบบพับได้และอุปกรณ์แบบหลายจอแสดงผลบางรุ่น
โหมดจอแสดงผลด้านหลังช่วยให้แอปพลิเคชันแสดง UI แสดงตัวอย่างของกล้องบนจอแสดงผลฝาพับของอุปกรณ์แบบพับได้ เพื่อใช้กล้องของอุปกรณ์หลักสำหรับถ่ายเซลฟีและวิดีโอ อุปกรณ์ที่มีจอแสดงผลที่รองรับ Android (ตามที่ระบุไว้ใน CDD ของ Android ในแอตทริบิวต์ต่างๆ เช่น ขนาด ความหนาแน่น และความสามารถในการไปยังส่วนต่างๆ ที่พร้อมใช้งาน) ซึ่งสอดคล้องกับกล้องด้านหลังของอุปกรณ์ต้องให้สิทธิ์เข้าถึงโหมดจอแสดงผลด้านหลัง
ใน Android 14 โหมดหน้าจอคู่ช่วยให้แอปพลิเคชันที่ทำงานบนหน้าจอด้านในของอุปกรณ์แบบพับได้แสดงเนื้อหาเพิ่มเติมบนหน้าจอด้านนอกที่หันไปยังผู้ใช้คนอื่นๆ ได้ เช่น หน้าจอด้านนอกสามารถแสดงตัวอย่างจากกล้องต่อบุคคลที่ถ่ายภาพหรือบันทึกเสียง
การกำหนดค่าอุปกรณ์
OEM ต้องดำเนินการต่อไปนี้เพื่อรองรับการใช้งานฟีเจอร์การพับ
กำหนดค่าสถานะอุปกรณ์ใน
device_state_configuration.xml
ให้DeviceStateManagerService
ใช้ ดูข้อมูลเพิ่มเติมได้ที่DeviceStateProviderImpl.java
หากการติดตั้งใช้งานเริ่มต้นของ
DeviceStateProvider
หรือDeviceStatePolicy
ไม่เหมาะกับอุปกรณ์ คุณสามารถใช้การติดตั้งใช้งานที่กําหนดเองได้สำหรับอุปกรณ์แบบพับได้ซึ่งรองรับโหมดเปิดหรือโหมดวางราบ ให้ระบุตัวระบุสถานะที่เกี่ยวข้องใน
com.android.internal.R.array.config_openDeviceStates
สำหรับอุปกรณ์แบบพับเข้าที่รองรับสถานะพับ ให้ระบุตัวระบุสถานะที่เกี่ยวข้องใน
com.android.internal.R.array.config_foldedDeviceStates
สำหรับอุปกรณ์แบบพับเข้าที่รองรับสถานะพับครึ่ง (บานพับเปิดครึ่งหนึ่งเหมือนแล็ปท็อป) ให้ระบุสถานะที่เกี่ยวข้องใน
com.android.internal.R.array.config_halfFoldedDeviceStates
สำหรับอุปกรณ์ที่รองรับโหมดการแสดงผลด้านหลัง ให้ทำดังนี้
- แสดงสถานะที่เกี่ยวข้องใน
com.android.internal.R.array.config_rearDisplayDeviceStates
สำหรับDeviceStateManager
- ระบุที่อยู่จริงของจอแสดงผลด้านหลังใน
com.android.internal.R.string.config_rearDisplayPhysicalAddress
- ระบุตัวระบุสถานะใน
com.android.internal.R.integer.config_deviceStateRearDisplay
เพื่อใช้โดยส่วนขยาย - เพิ่มตัวระบุสถานะใน
com.android.internal.R.array.config_deviceStatesAvailableForAppRequests
เพื่อให้แอปพลิเคชันใช้งานได้
- แสดงสถานะที่เกี่ยวข้องใน
ใน Android 14 สำหรับอุปกรณ์ที่รองรับโหมดการแสดงผลแบบคู่ (พร้อมกัน) ให้ทำดังนี้
- ตั้งค่า
com.android.internal.R.bool.config_supportsConcurrentInternalDisplays
เป็นtrue
- ระบุที่อยู่จริงของจอแสดงผลด้านหลังใน
com.android.internal.R.config_deviceStateConcurrentRearDisplay
- ระบุตัวระบุสถานะใน
com.android.internal.R.integer.config_deviceStateConcurrentRearDisplay
เพื่อใช้โดยส่วนขยายหากต้องการทำให้ตัวระบุพร้อมใช้งานสำหรับแอปพลิเคชัน - เพิ่มตัวระบุสถานะใน
com.android.internal.R.array.config_deviceStatesAvailableForAppRequests
เพื่อให้แอปพลิเคชันใช้งานได้
- ตั้งค่า
การยืนยัน
OEM ต้องยืนยันการติดตั้งใช้งานเพื่อให้แน่ใจว่ามีการทำงานตามที่คาดไว้ในสถานการณ์ทั่วไป OEM สามารถใช้การทดสอบ CTS และการทดสอบโดยใช้ Jetpack WindowManager เพื่อทดสอบการติดตั้งใช้งาน
การทดสอบ CTS
หากต้องการเรียกใช้การทดสอบ CTS โปรดดูหัวข้อเรียกใช้การทดสอบ CTS การทดสอบ CTS ที่เกี่ยวข้องกับ Jetpack WindowManager อยู่ภายใต้cts/tests/framework/base/windowmanager/jetpack/
ชื่อโมดูลทดสอบคือ CtsWindowManagerJetpackTestCases
การทดสอบ WindowManager
หากต้องการดาวน์โหลดการทดสอบ Jetpack WindowManager ให้ทำตามวิธีการของ Android Jetpack
การทดสอบจะอยู่ในคลังหน้าต่างในส่วนโมดูล window:window
ดังนี้
window/window/src/androidTest/
หากต้องการเรียกใช้การทดสอบอุปกรณ์สําหรับโมดูล window:window
จากบรรทัดคําสั่ง ให้ทําดังนี้
- เสียบอุปกรณ์ที่เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปและการแก้ไขข้อบกพร่อง USB
- อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
- เปิดเชลล์ในไดเรกทอรีรูทของที่เก็บข้อมูล androidx
- เปลี่ยนไดเรกทอรีเป็น
framework/support
- เรียกใช้คำสั่งต่อไปนี้
./gradlew window:window:connectedAndroidTest
- วิเคราะห์ผลลัพธ์
หากต้องการเรียกใช้การทดสอบจาก Android Studio ให้ทำดังนี้
- เปิด Android Studio
- เสียบอุปกรณ์ที่เปิดใช้ตัวเลือกสำหรับนักพัฒนาแอปและการแก้ไขข้อบกพร่อง USB
- อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
- ไปที่การทดสอบภายในคลังหน้าต่างของโมดูลหน้าต่าง
- เปิดคลาสทดสอบและเรียกใช้โดยใช้ลูกศรสีเขียวทางด้านขวาของตัวแก้ไข
หรือจะสร้างการกําหนดค่าใน Android Studio เพื่อเรียกใช้เมธอดทดสอบ คลาสทดสอบ หรือการทดสอบทั้งหมดในโมดูลก็ได้
คุณวิเคราะห์ผลลัพธ์ด้วยตนเองได้โดยดูที่เอาต์พุตของเชลล์ ระบบจะข้ามการทดสอบบางอย่างหากอุปกรณ์ไม่เป็นไปตามสมมติฐานบางอย่าง ระบบจะบันทึกผลลัพธ์ไว้ในตำแหน่งมาตรฐาน และผู้วิเคราะห์สามารถเขียนสคริปต์เพื่อทําการวิเคราะห์ผลลัพธ์โดยอัตโนมัติ