การอัปเดตข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ 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 และเราเข้าใจว่าแอปของคุณอาจมีกรณีการใช้งานที่ถูกต้อง สำหรับการใช้อินเทอร์เฟซเหล่านี้ หากอินเทอร์เฟซที่แอปใช้ใน เวอร์ชันก่อนหน้าถูกบล็อกใน 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.