โมดูลส่วนขยาย 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 ซึ่งทำให้การทำงานคล้ายกับโค้ดเฟรมเวิร์กฝั่งไคลเอ็นต์ ดังที่แสดงในรูปต่อไปนี้

ส่วนขยาย WindowManager จะโหลดลงในกระบวนการของแอปคล้ายกับโค้ดแพลตฟอร์ม

รูปที่ 1 ส่วนขยายที่โหลดลงในกระบวนการของแอป

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

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

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

Jetpack WindowManager (androidx.window) มีไว้เพื่อเพิ่มเป็นทรัพยากร Dependency ของแอป และมี API สาธารณะที่นักพัฒนาแอปใช้ รวมถึง API สำหรับ ฟีเจอร์ส่วนขยาย WindowManager ไลบรารี WindowManager จะโหลดส่วนขยายลงในกระบวนการของแอปโดยอัตโนมัติ และจะห่อหุ้ม API ของส่วนขยายระดับล่าง ไว้ใน Abstraction ระดับสูงและอินเทอร์เฟซที่มุ่งเน้นมากขึ้น API ของ Jetpack WindowManager เป็นไปตามมาตรฐานการพัฒนาแอป 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

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

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

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

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

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

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

ส่วนขยายเวอร์ชันใหม่กว่าจะต้องทำงานร่วมกับ WindowManager เวอร์ชันที่ต่ำกว่าที่คอมไพล์ลงในแอปต่อไปเพื่อรักษาความเข้ากันได้แบบย้อนกลับ เพื่อ ให้มั่นใจได้ว่าจะเป็นเช่นนี้ API ส่วนขยายเวอร์ชันใหม่จะเพิ่มเฉพาะ API ใหม่และ จะไม่นำ API เก่าออก ด้วยเหตุนี้ แอปที่มี WindowManager เวอร์ชันต่ำกว่าจึงใช้ Extensions 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 เนื่องจากในกรณีดังกล่าว หน้าต่างแอป จะไม่ปรากฏหรือจะไม่ข้ามขอบเขตบานพับ

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

หากต้องการรองรับการใช้งานฟีเจอร์การพับ ผู้ผลิตอุปกรณ์ต้องทำดังนี้

  • กำหนดค่าสถานะอุปกรณ์ใน 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 โหมดจอแสดงผลคู่จะช่วยให้แอปที่ทำงานบนหน้าจอด้านในของอุปกรณ์แบบพับได้แสดงเนื้อหาเพิ่มเติมบนจอแสดงผลด้านนอกที่หันไปทางผู้ใช้คนอื่นๆ ได้ เช่น จอแสดงผลด้านนอกสามารถแสดงตัวอย่างกล้องต่อบุคคลที่ถูกถ่ายภาพหรือบันทึกวิดีโอ

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

หากต้องการรองรับการใช้งานฟีเจอร์การพับ ผู้ผลิตอุปกรณ์ต้องทำดังนี้

  • กำหนดค่าสถานะอุปกรณ์ใน 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 เพื่อเรียกใช้เมธอดทดสอบ คลาสทดสอบ หรือการทดสอบทั้งหมดในโมดูลก็ได้

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