ส่วนขยาย WindowManager

Jetpack WindowManager ไลบรารีช่วยให้นักพัฒนาแอปพลิเคชันสามารถรองรับรูปแบบของอุปกรณ์ใหม่ๆ และ สภาพแวดล้อมหลายหน้าต่าง

WindowManager Extensions (ส่วนขยาย) คือโมดูลสำหรับเลือกเข้าร่วมแพลตฟอร์ม Android ที่ เปิดใช้ฟีเจอร์ Jetpack WindowManager ที่หลากหลาย ใช้โมดูลแล้ว ใน AOSP ใน frameworks/base/libs/WindowManager/Jetpack และจัดส่งไปยังอุปกรณ์ที่รองรับฟีเจอร์ WindowManager

การกระจายโมดูลส่วนขยาย

ระบบจะรวบรวมส่วนขยายไว้ในไลบรารี .jar และวางไว้ใน system_ext ในอุปกรณ์หากเปิดใช้ส่วนขยายในไฟล์เครื่องสำอางของอุปกรณ์

หากต้องการเปิดใช้ส่วนขยายในอุปกรณ์ ให้เพิ่มการตั้งค่าต่อไปนี้ลงในอุปกรณ์ของผลิตภัณฑ์ ไฟล์ตัวอย่าง:

$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)

การดำเนินการนี้จะเปิดใช้ androidx.window.extensions และ androidx.window.sidecar บนอุปกรณ์และตั้งค่าพร็อพเพอร์ตี้ persist.wm.extensions.enabled การรวมแพ็กเกจเหล่านี้ไว้ในไฟล์ Makefile จะวางการประกาศใน etc/permissions/ ซึ่งทำให้พร้อมใช้งานในขั้นตอนการสมัคร โดยปกติ โมดูลจะถูกโหลดและดำเนินการในฐานะส่วนหนึ่งของกระบวนการแอปพลิเคชันที่ เมื่อใช้โดยไลบรารี Jetpack WindowManager ซึ่งทำให้ ซึ่งคล้ายกับโค้ดเฟรมเวิร์กฝั่งไคลเอ็นต์ดังที่แสดงใน ตัวเลข:

วันที่
รูปที่ 1 โหลดส่วนขยาย WindowManager ลงในแอปพลิเคชัน กระบวนการที่คล้ายกับโค้ดแพลตฟอร์ม

โมดูล androidx.window.extensions เป็นโมดูลส่วนขยายปัจจุบันภายใต้ ที่กำลังพัฒนา โมดูล androidx.window.sidecar เป็นโมดูลเดิม รวมไว้เพื่อการใช้งานร่วมกับ Jetpack WindowManager เวอร์ชันแรกสุด แต่จะไม่มีการบำรุงรักษาไฟล์ช่วยเหลือแล้ว

รูปต่อไปนี้แสดงตรรกะในการกำหนดการใช้ androidx.window.extensions หรือ androidx.window.sidecar

วันที่
รูปที่ 2 แผนผังการตัดสินใจสำหรับการเข้าถึง androidx.window.extensions หรือ androidx.window.sidecar

โมดูลส่วนขยาย

ส่วนขยายมอบฟีเจอร์การจัดหน้าต่างสำหรับอุปกรณ์ที่มีหน้าจอขนาดใหญ่แบบพับได้ และ อุปกรณ์ที่รองรับการจัดกรอบเวลาในจอแสดงผลภายนอก ฟีเจอร์ต่างๆ มีดังนี้

การใช้ส่วนขยายของ OEM สามารถระบุคอมโพเนนต์หรือคอมโพเนนต์ที่ไม่มีข้อมูล การติดตั้งใช้งานที่เป็นค่าเริ่มต้นหรือชั่วคราวของวิธีการใน WindowExtensions หากฮาร์ดแวร์อุปกรณ์ไม่รองรับฟีเจอร์ที่เกี่ยวข้อง เว้นแต่จะมีการขอให้ใช้ฟีเจอร์โดยเฉพาะใน เอกสารคำจำกัดความความเข้ากันได้ (CDD) 7.1.1.1

ส่วนขยายและ API ของ Jetpack

โมดูลส่วนขยาย WindowManager มีแพลตฟอร์ม API ของตนเองนอกเหนือจาก API ของแพลตฟอร์มสาธารณะ โมดูลส่วนขยายได้รับการพัฒนาต่อสาธารณะใน ไม่ใช่สำหรับนักพัฒนาซอฟต์แวร์ androidx.window.extensions ไลบรารี Jetpack เพื่อให้ Jetpack WindowManager (androidx.window) สามารถลิงก์กับหน้านั้นขณะคอมไพล์ได้ แพลตฟอร์ม API ของส่วนขยายโดยทั่วไป มี API ระดับล่าง

API ที่ส่วนขยายมีให้มีไว้สำหรับ Jetpack เฉพาะไลบรารี WindowManager API ของส่วนขยายไม่ได้ออกแบบมาให้เรียกโดย นักพัฒนาแอปพลิเคชันได้โดยตรง ต้องไม่เพิ่มไลบรารีส่วนขยายเป็น Dependency สำหรับแอปพลิเคชันในไฟล์บิลด์ Gradle เพื่อให้แน่ใจว่า หลีกเลี่ยงการคอมไพล์ไลบรารีส่วนขยายลงในแอปพลิเคชันล่วงหน้า directly; ให้ใช้การโหลดรันไทม์แทนการโหลดมิกซ์ ของคลาสส่วนขยายที่คอมไพล์ไว้ล่วงหน้าและรันไทม์

เพิ่ม Jetpack WindowManager (androidx.window) เป็นแอปพลิเคชัน ของ Dependency และให้ API ที่นักพัฒนาซอฟต์แวร์ใช้งานแบบสาธารณะ ซึ่งรวมถึง สำหรับฟีเจอร์ส่วนขยาย WindowManager ไลบรารี WindowManager โดยอัตโนมัติ จะโหลดส่วนขยายในกระบวนการแอปพลิเคชัน และรวมส่วนขยายในระดับที่ต่ำกว่า ส่วนขยาย API ไปยังบทคัดย่อระดับสูงขึ้นและโฟกัสมากขึ้น อินเทอร์เฟซ WindowManager Jetpack API ปฏิบัติตามมาตรฐานสมัยใหม่ การพัฒนาแอปพลิเคชัน Android และมีจุดประสงค์เพื่อมอบ ความสามารถในการทำงานร่วมกันด้วยการผสานรวมอย่างดีกับฐานของโค้ดที่ใช้ AndroidX รุ่นอื่นๆ ห้องสมุด

เวอร์ชันและการอัปเดตของส่วนขยาย

คุณสามารถอัปเดตโมดูลส่วนขยายพร้อมกับแพลตฟอร์ม Android ทุกปี หรือ อัปเดตรายไตรมาส การอัปเดตรายไตรมาสจะทำให้ระดับ API ของส่วนขยายสามารถ เพิ่มขึ้นระหว่างการอัปเดต API ของแพลตฟอร์ม Android ทำให้สามารถทำซ้ำได้เร็วขึ้น และ มอบโอกาสให้ OEM สามารถเพิ่มการเข้าถึง API อย่างเป็นทางการลงในฟีเจอร์ใหม่ๆ ใกล้จะเปิดตัวฮาร์ดแวร์แล้ว

ตารางต่อไปนี้แสดงเวอร์ชันของ API androidx.window.extensions สำหรับ Android รุ่นต่างๆ

เวอร์ชันแพลตฟอร์ม Android ระดับ API ส่วนขยายของ WindowManager เวอร์ชัน 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

ระดับ API ของส่วนขยาย (คอลัมน์ตรงกลาง) จะเพิ่มขึ้นทุกครั้งที่มีการ นอกเหนือจากแพลตฟอร์ม API ที่เสถียรที่มีอยู่แล้ว (คอลัมน์ด้านขวา)

ความเข้ากันได้แบบย้อนหลังและไปข้างหน้า

Jetpack WindowManager จัดการความซับซ้อนในการจัดการกับระดับ API ที่มักใช้งาน การอัปเดต API วิวัฒนาการที่รวดเร็วและความเข้ากันได้แบบย้อนหลัง เมื่อรหัสห้องสมุด จะดำเนินการในขั้นตอนการสมัคร ไลบรารีจะตรวจสอบ ระดับ API ของส่วนขยาย และให้สิทธิ์ในการเข้าถึงคุณลักษณะตาม

WindowManager ดำเนินการเพื่อป้องกันไม่ให้แอปพลิเคชันขัดข้องขณะรันไทม์ด้วย การตรวจสอบการสะท้อนรันไทม์ของ Java สำหรับ Extensions API ที่มีอยู่ตาม ระดับ API ของส่วนขยายที่ประกาศไว้ หากข้อมูลไม่ตรงกัน WindowManager สามารถ ปิดการใช้งานส่วนขยาย (บางส่วนหรือทั้งหมด) และรายงาน คุณลักษณะที่ไม่พร้อมให้บริการในแอปพลิเคชัน

ใช้งานส่วนขยาย WindowManager เป็นโมดูล system_ext ที่ใช้ API ของแพลตฟอร์มส่วนตัวที่จะเรียกใช้ WindowManager Core DeviceStateManager, และบริการอื่นๆ ของระบบในการใช้งานฟีเจอร์ส่วนขยาย

อาจไม่สามารถใช้งานร่วมกับส่วนขยายเวอร์ชันก่อนเผยแพร่ ก่อนการเผยแพร่แพลตฟอร์ม Android รายไตรมาสหรือรายปีที่สอดคล้องกันกับ ทำให้เวอร์ชันต่างๆ ได้รับการสรุปผลแล้ว คุณสามารถดูประวัติทั้งหมดของ API ส่วนขยายได้ ที่พบใน Branch ของรุ่น window:extensions:extensions ไฟล์ข้อความ API

ส่วนขยายเวอร์ชันใหม่กว่าต้องทำงานร่วมกับส่วนขยายเวอร์ชันเก่า WindowManager คอมไพล์ลงในแอปพลิเคชันเพื่อรักษาความเข้ากันได้แบบส่งต่อ ถึง โปรดตรวจสอบว่า Extensions API เวอร์ชันใหม่จะเพิ่มเฉพาะ API ใหม่และ จะไม่ลบรายการที่เก่ากว่า ดังนั้น แอปพลิเคชันที่มี WindowManager เวอร์ชันเก่า เวอร์ชันต่างๆ จะยังใช้ API ของส่วนขยายเวอร์ชันเก่าที่แอปคอมไพล์ไว้ได้ เทียบกับ

การยืนยัน CTS ช่วยดูแลให้ API ของส่วนขยายเวอร์ชันที่ประกาศไว้ใน อุปกรณ์จะมี API ทั้งหมดสำหรับเวอร์ชันนั้นและเวอร์ชันก่อนหน้านั้นและใช้งานได้

ประสิทธิภาพ

โดยค่าเริ่มต้น โมดูลส่วนขยายจะได้รับการแคชในตัวโหลดคลาสระบบที่ไม่ใช่ Bootclasspath โดยเริ่มตั้งแต่ Android 14 (API ระดับ 34) จึงไม่มีผลกระทบต่อประสิทธิภาพเนื่องจากการโหลดโมดูลลงในหน่วยความจำเมื่อเริ่มต้นแอป การใช้ฟีเจอร์ของแต่ละโมดูลอาจมีผลเล็กน้อยต่อคุณลักษณะด้านประสิทธิภาพของแอป เมื่อมีการเรียก IPC เพิ่มเติมระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์

โมดูล

การฝังกิจกรรม

การฝังกิจกรรม คอมโพเนนต์ให้ชุดฟีเจอร์ที่ช่วยให้แอปพลิเคชันจัดระเบียบ การนำเสนอหน้าต่างกิจกรรมภายในขอบเขตของแอปพลิเคชันหลัก ช่วงเวลานี้ รวมถึงการแสดงกิจกรรม 2 รายการพร้อมกันใน เลย์เอาต์แบบหลายแผง ช่วยเพิ่มประสิทธิภาพให้หน้าจอขนาดใหญ่สำหรับเวอร์ชันเดิม แอปพลิเคชัน

คอมโพเนนต์การฝังกิจกรรมต้องใช้งานได้ในอุปกรณ์ทั้งหมดที่มี จอแสดงผลในตัวที่มีขนาดเท่ากับหรือใหญ่กว่า sw600 dp ต้องเปิดใช้การฝังกิจกรรมบนอุปกรณ์ที่รองรับการแสดงผลภายนอกด้วย การเชื่อมต่อ เนื่องจากแอปพลิเคชันอาจแสดงในขนาดที่ใหญ่ขึ้นเมื่ออยู่นอกระบบ จอแสดงผลจะเชื่อมต่อระหว่างรันไทม์

การกำหนดค่าอุปกรณ์

ไม่จำเป็นต้องกำหนดค่าอุปกรณ์ใดเป็นพิเศษนอกจากการเปิดใช้ส่วนขยาย ตามที่อธิบายไว้ในการกระจายโมดูลส่วนขยาย การเปิดใช้ส่วนขยายในอุปกรณ์ทุกประเภทที่รองรับ โหมดหลายหน้าต่าง Android เวอร์ชันในอนาคตมีแนวโน้มจะทำให้ส่วนขยาย ซึ่งจำเป็นสำหรับการกำหนดค่าอุปกรณ์แบบพกพาและอุปกรณ์ที่มีหน้าจอขนาดใหญ่โดยทั่วไป

ข้อมูลเลย์เอาต์หน้าต่าง

คอมโพเนนต์ข้อมูลเลย์เอาต์หน้าต่างจะระบุตำแหน่งและสถานะของ บานพับบนอุปกรณ์แบบพับได้เมื่อบานพับพาดผ่านหน้าต่างแอปพลิเคชัน ข้อมูลเลย์เอาต์หน้าต่างช่วยให้แอปพลิเคชันสามารถตอบสนองและแสดงข้อมูลที่ได้รับการเพิ่มประสิทธิภาพ ในโหมดบนโต๊ะบนอุปกรณ์แบบพับได้ โปรดดู รับรู้เรื่องราวเกี่ยวกับแอปของคุณ เพื่อดูรายละเอียดการใช้งาน

อุปกรณ์ Android แบบพับได้ซึ่งมีบานพับที่เชื่อมต่อแยกกัน หรือ พื้นที่แผงที่แสดงอย่างต่อเนื่องต้องทำให้ข้อมูลเกี่ยวกับบานพับ พร้อมใช้งานสำหรับแอปพลิเคชันผ่าน WindowLayoutComponent

ต้องรายงานตำแหน่งและขอบเขตแบบบานพับที่สัมพันธ์กับแอปพลิเคชัน ที่ระบุโดย Context ที่ส่งผ่านไปยัง API หากหน้าต่างแอปพลิเคชัน ขอบเขตไม่ตัดกับขอบเขตของบานพับ DisplayFeature ต้องไม่มีการรายงาน นอกจากนี้ คุณไม่ควรรายงานฟีเจอร์การแสดงผลด้วย เมื่ออาจไม่มีการรายงานตำแหน่งที่น่าเชื่อถือ เช่น เมื่อมีการสมัคร ผู้ใช้สามารถย้ายหน้าต่างได้อย่างอิสระในโหมดหลายหน้าต่าง หรือ โหมดแถบดำด้านบน-ล่างของภาพ

สำหรับฟีเจอร์พับ ต้องรายงานการอัปเดตสถานะเมื่อตำแหน่งบานพับมีการเปลี่ยนแปลงระหว่าง สถานะคงที่ โดยค่าเริ่มต้นในสถานะการแสดงผลแบบแบนราบ 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 ต้องยืนยันการติดตั้งใช้งานเพื่อให้แน่ใจว่ามีลักษณะการทำงานที่คาดหวังเหมือนกัน สถานการณ์ การทดสอบและการทดสอบ CTS โดยใช้ Jetpack WindowManager มีให้บริการสำหรับ OEM ในการทดสอบการใช้งาน

การทดสอบ 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 จากบรรทัดคำสั่ง ให้ทำดังนี้ ดังต่อไปนี้

  1. เสียบอุปกรณ์ที่มีตัวเลือกสำหรับนักพัฒนาแอปและเปิดใช้การแก้ไขข้อบกพร่อง USB
  2. อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
  3. เปิด Shell ในไดเรกทอรีรูทของที่เก็บ Androidx
  4. เปลี่ยนไดเรกทอรีเป็น framework/support
  5. เรียกใช้คำสั่งต่อไปนี้ ./gradlew window:window:connectedAndroidTest
  6. วิเคราะห์ผลลัพธ์

หากต้องการเรียกใช้การทดสอบจาก Android Studio ให้ทำดังนี้

  1. เปิด Android Studio
  2. เสียบอุปกรณ์ที่มีตัวเลือกสำหรับนักพัฒนาแอปและเปิดใช้การแก้ไขข้อบกพร่อง USB
  3. อนุญาตให้คอมพิวเตอร์แก้ไขข้อบกพร่องของอุปกรณ์
  4. ไปยังการทดสอบภายในไลบรารีหน้าต่างของโมดูลหน้าต่าง
  5. เปิดคลาสทดสอบและใช้ลูกศรสีเขียวที่ด้านขวาของ ของ Google

หรือจะสร้างการกำหนดค่าใน Android Studio เพื่อทำการทดสอบก็ได้ คลาสทดสอบ หรือการทดสอบทั้งหมดในโมดูล

คุณวิเคราะห์ผลลัพธ์ด้วยตนเองได้โดยการดูเอาต์พุตของ Shell ใช้บ้าง ระบบจะข้ามการทดสอบหากอุปกรณ์ไม่เป็นไปตามสมมติฐานบางอย่าง ผลลัพธ์คือ บันทึกไว้ในตำแหน่งมาตรฐาน และนักวิเคราะห์สามารถเขียนสคริปต์เพื่อทำให้ การวิเคราะห์ผลลัพธ์