การอัปเดตข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ 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 12 (API ระดับ 31) และถูกบล็อกใน 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.