ส่วนขยาย WindowManager

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

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

การเผยแพร่โมดูลส่วนขยาย

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

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

$(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 เวอร์ชันแรกสุด แต่เราไม่ได้ดูแลรักษา Sidecar อีกต่อไป

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

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

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

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

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

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

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

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

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

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

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

ตารางต่อไปนี้แสดงandroidx.window.extensionsเวอร์ชัน API สำหรับ 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 ที่พร้อมใช้งานตามระดับ Extensions API ที่ประกาศไว้ เพื่อป้องกันไม่ให้แอปพลิเคชันขัดข้องขณะรันไทม์ หากไม่ตรงกัน WindowManager จะ ปิดใช้ส่วนขยาย (บางส่วนหรือทั้งหมด) และรายงานฟีเจอร์ที่เกี่ยวข้อง ว่าแอปพลิเคชันใช้ไม่ได้

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

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

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

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

ประสิทธิภาพ

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

โมดูล

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

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

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

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

ไม่จำเป็นต้องมีการกำหนดค่าอุปกรณ์ใดๆ นอกเหนือจากการเปิดใช้โมดูลส่วนขยาย ตามที่อธิบายไว้ในส่วนการเผยแพร่โมดูลส่วนขยาย คุณควรเปิดใช้ ส่วนขยายในอุปกรณ์ทั้งหมดที่รองรับโหมดหลายหน้าต่าง ในอนาคต 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 การทดสอบ 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. เปิดเชลล์ในไดเรกทอรีรากของที่เก็บ androidx
  4. เปลี่ยนไดเรกทอรีเป็น framework/support
  5. เรียกใช้คำสั่งต่อไปนี้: ./gradlew window:window:connectedAndroidTest
  6. วิเคราะห์ผลลัพธ์

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

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

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

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