ส่วนขยาย WindowManager

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

WindowManager Extensions (ส่วนขยาย) เป็นโมดูลแพลตฟอร์ม 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 ของส่วนขยายสามารถจัดเตรียมส่วนประกอบที่เป็นโมฆะหรือส่วนประกอบด้วยการใช้งานเริ่มต้นหรือ stub ของวิธีการในอินเทอร์เฟซ WindowExtensions หากฮาร์ดแวร์อุปกรณ์ไม่รองรับคุณสมบัติที่เกี่ยวข้อง เว้นแต่ว่าคุณสมบัตินั้นได้รับการร้องขอเป็นพิเศษใน เอกสารข้อกำหนดความเข้ากันได้ (CDD) 7.1.1.1 .

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

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

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

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

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

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

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

เวอร์ชันแพลตฟอร์ม Android ระดับ API ส่วนขยาย WindowManager เวอร์ชัน androidx.window.extensions API
แอนดรอยด์ 14 3 1.2.0
ระบบปฏิบัติการ Android 13 QPR3 2 1.1.0
แอนดรอยด์ 13 1 1.0.0
แอนดรอยด์ 12L 1 1.0.0

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

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

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

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

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

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

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

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

ผลงาน

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

โมดูล

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

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

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

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

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

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

หากต้องการรันการทดสอบจาก Android Studio ให้ทำดังต่อไปนี้:

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

หรือคุณสามารถสร้างการกำหนดค่าใน Android Studio เพื่อเรียกใช้วิธีทดสอบ คลาสการทดสอบ หรือการทดสอบทั้งหมดในโมดูล

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