ส่วนขยาย WindowManager

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

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

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

รูปภาพต่อไปนี้แสดงตรรกะในการกำหนดการใช้ 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) มีไว้เพื่อเพิ่มเป็นข้อกําหนดของแอปพลิเคชันและให้บริการ 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 จากบรรทัดคําสั่ง ให้ทําดังนี้

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

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