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

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

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

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