การอัปเดตข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ SDK ใน Android 13

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

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

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

รายการการเปลี่ยนแปลงสำหรับ Android 13

การเปลี่ยนแปลงรายการใน Android 13 จะอยู่ในหมวดหมู่ต่อไปนี้

หากต้องการดูรายการอินเทอร์เฟซที่ไม่ใช่ SDK ทั้งหมดสำหรับ Android 13 ให้ดาวน์โหลดไฟล์ต่อไปนี้

ไฟล์: hiddenapi-flags.csv

การตรวจสอบข้อผิดพลาดด้วย SHA-256: 233a277aa8ac475b6df61bffd95665d86aac6eb2ad187b90bf42a98f5f2a11a3

อินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งถูกบล็อกใน Android 13

กล่องโค้ดต่อไปนี้แสดงรายการอินเทอร์เฟซที่ไม่ใช่ SDK ทั้งหมดที่ไม่รองรับใน Android 12 (API ระดับ 31) ซึ่งถูกบล็อกใน Android 13 (API ระดับ 33) กล่าวคือ อินเทอร์เฟซเหล่านี้อยู่ในรายการ max-target-s ดังนั้นแอปจะใช้อินเทอร์เฟซเหล่านี้ได้ก็ต่อเมื่อกำหนดเป้าหมายเป็น Android 12 (API ระดับ 31) หรือต่ำกว่า

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

Landroid/app/Activity;->setDisablePreviewScreenshots(Z)V # Use setRecentsScreenshotEnabled() instead.
Landroid/os/PowerManager;->isLightDeviceIdleMode()Z # Use isDeviceLightIdleMode() instead.
Landroid/os/Process;->setArgV0(Ljava/lang/String;)V # In general, do not try to change the process name. If you must change the process name (for instance, for debugging), you can use pthread_setname_np() instead, though be aware that doing this might confuse the system.
Landroid/view/accessibility/AccessibilityInteractionClient;->clearCache(I)V # Use android.accessibilityservice.AccessibilityService#clearCache() instead.