Android 11 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณเช่นเดียวกับรุ่นก่อนๆ โดยการเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปเท่านั้น หากแอปตั้งค่า targetSdkVersion เป็น 30 คุณควรแก้ไขแอปให้รองรับลักษณะการทำงานเหล่านี้อย่างเหมาะสมในกรณีที่ทำได้
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปทั้งหมดที่ทำงานบน Android 11 ด้วย
ความเป็นส่วนตัว
Android 11 มีการเปลี่ยนแปลงและข้อจำกัดเพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้ ซึ่งรวมถึงสิ่งต่อไปนี้
- การบังคับใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต: การเข้าถึงไดเรกทอรีพื้นที่เก็บข้อมูลภายนอกจะจำกัดไว้ที่ไดเรกทอรีเฉพาะแอป และสื่อบางประเภทที่แอปสร้างขึ้น
- การรีเซ็ตสิทธิ์อัตโนมัติ: หาก ผู้ใช้ไม่ได้โต้ตอบกับแอปเป็นเวลา 2-3 เดือน ระบบจะรีเซ็ต สิทธิ์ที่ละเอียดอ่อนของแอปโดยอัตโนมัติ
- การเข้าถึง ตำแหน่งในเบื้องหลัง: ผู้ใช้ต้องได้รับคำแนะนำ ให้ไปที่การตั้งค่าระบบเพื่อมอบสิทธิ์เข้าถึงตำแหน่งในเบื้องหลังให้แอป
- ระดับการมองเห็นแพ็กเกจ: เมื่อแอป ค้นหารายการแอปที่ติดตั้งในอุปกรณ์ ระบบจะกรองรายการที่แสดง
ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว
ความปลอดภัย
การติดแท็กตัวชี้ฮีป
รายละเอียดการเปลี่ยนแปลง
ชื่อการเปลี่ยนแปลง: NATIVE_HEAP_POINTER_TAGGING
รหัสการเปลี่ยนแปลง: 135754954
วิธีเปิด/ปิด
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAMEadb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปิด/ปิดการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอป
ตอนนี้ตัวชี้ฮีปมีแท็กที่ไม่ใช่ 0 ในไบต์ที่มีนัยสำคัญสูงสุด (MSB) แอปพลิเคชันที่ใช้ตัวชี้อย่างไม่ถูกต้อง รวมถึงแอปพลิเคชันที่แก้ไข MSB อาจหยุดทำงานหรือพบปัญหาอื่นๆ การเปลี่ยนแปลงนี้จำเป็นต่อการรองรับฮาร์ดแวร์ในอนาคตที่เปิดใช้ ARM Memory Tagging Extension (MTE) ดูข้อมูลเพิ่มเติมได้ที่ ตัวชี้ที่ติดแท็ก
หากต้องการปิดใช้ฟีเจอร์นี้ โปรดดูเอกสารประกอบ Manifest ของ allowNativeHeapPointerTagging
การอัปเดตการแจ้งเตือนแบบสั้น
ระบบจะบล็อกการแจ้งเตือนแบบสั้นที่กำหนดเองจากเบื้องหลัง
ด้วยเหตุผลด้านความปลอดภัยและเพื่อรักษาประสบการณ์การใช้งานที่ดี ระบบจะบล็อกการแจ้งเตือนแบบสั้นที่มีมุมมองที่กำหนดเองหากแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปส่งการแจ้งเตือนแบบสั้นดังกล่าวจากเบื้องหลัง โปรดทราบว่าระบบยังคงอนุญาตการแจ้งเตือนแบบสั้นที่เป็นข้อความ
ซึ่งเป็นการแจ้งเตือนแบบสั้นที่สร้างขึ้นโดยใช้
Toast.makeText() ซึ่ง
ไม่ได้เรียก setView()
หากแอปพยายามโพสต์ข้อความโทสต์ที่มีมุมมองที่กำหนดเองจากเบื้องหลัง ระบบจะไม่แสดงข้อความแก่ผู้ใช้ แต่ระบบจะบันทึกข้อความต่อไปนี้ใน Logcat
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
การเรียกกลับของข้อความโทสต์
หากต้องการรับการแจ้งเตือนเมื่อข้อความโทสต์ (ข้อความหรือที่กำหนดเอง) ปรากฏขึ้นหรือหายไป
ให้ใช้
addCallback()
เมธอด ซึ่งเพิ่มเข้ามาใน Android 11
การเปลี่ยนแปลง API ของข้อความโทสต์
แอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปจะเห็นผลข้างเคียงต่อไปนี้สำหรับการแจ้งเตือนแบบสั้นที่เป็นข้อความ
- เมธอด
getView()จะแสดงผลnull - ค่าที่แสดงผลของเมธอดต่อไปนี้จะไม่แสดงค่าจริง ดังนั้นคุณจึงไม่ควรใช้ค่าเหล่านี้ในแอป
- เมธอดต่อไปนี้จะไม่มีการดำเนินการใดๆ ดังนั้นแอปของคุณจึงไม่ควรใช้เมธอดเหล่านี้
การเชื่อมต่อ
จำกัดสิทธิ์อ่านฐานข้อมูล APN
รายละเอียดการเปลี่ยนแปลง
ชื่อการเปลี่ยนแปลง: APN_READING_PERMISSION_CHANGE_ID
รหัสการเปลี่ยนแปลง: 124107808
วิธีเปิด/ปิด
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAMEadb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปิด/ปิดการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอป
ตอนนี้แอปที่กำหนดเป้าหมายเป็น Android 11 ต้องมีสิทธิ์พิเศษ
Manifest.permission.WRITE_APN_SETTINGS
เพื่ออ่านหรือเข้าถึงฐานข้อมูล APN ของผู้ให้บริการโทรคมนาคม การพยายามเข้าถึงฐานข้อมูล APN โดยไม่มีสิทธิ์นี้จะทำให้เกิดข้อยกเว้นด้านความปลอดภัย
การช่วยเหลือพิเศษ
ประกาศการโต้ตอบกับเครื่องมือ TTS ในไฟล์ Manifest
เนื่องจากการเปลี่ยนแปลงระดับการมองเห็นแพ็กเกจ แอปที่กำหนดเป้าหมายเป็น
Android 11 และโต้ตอบกับเครื่องมืออ่านออกเสียงข้อความ (TTS) ต้อง
เพิ่มองค์ประกอบ <queries> ต่อไปนี้ลงในไฟล์ Manifest
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
ประกาศการใช้ปุ่มการช่วยเหลือพิเศษในไฟล์ข้อมูลเมตา
รายละเอียดการเปลี่ยนแปลง
ชื่อการเปลี่ยนแปลง: REQUEST_ACCESSIBILITY_BUTTON_CHANGE
รหัสการเปลี่ยนแปลง: 136293963
วิธีเปิด/ปิด
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAMEadb shell am compat disable (136293963|REQUEST_ACCESSIBILITY_BUTTON_CHANGE) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปิด/ปิดการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอป
ตั้งแต่ Android 11 เป็นต้นไป บริการการช่วยเหลือพิเศษของคุณจะประกาศรันไทม์ไม่ได้ว่าบริการดังกล่าวมีความเชื่อมโยงกับปุ่มการช่วยเหลือพิเศษของระบบ หากคุณ
ผนวก AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON เข้ากับพร็อพเพอร์ตี้
flags ของออบเจ็กต์ AccessibilityServiceInfo เฟรมเวิร์กจะไม่
ส่งเหตุการณ์การเรียกกลับของปุ่มการช่วยเหลือพิเศษไปยังบริการของคุณ
หากต้องการรับเหตุการณ์การเรียกกลับของการช่วยเหลือพิเศษในบริการการช่วยเหลือพิเศษ ให้ใช้ไฟล์ข้อมูลเมตาบริการการช่วยเหลือพิเศษเพื่อประกาศความเชื่อมโยงของบริการกับปุ่มการช่วยเหลือพิเศษ ใส่ค่า flagRequestAccessibilityButton ใน
คำจำกัดความของ
accessibilityFlags
แอตทริบิวต์ ตำแหน่งทั่วไปสำหรับไฟล์ข้อมูลเมตาบริการการช่วยเหลือพิเศษคือ res/raw/accessibilityservice.xml
กล้อง
การทำงานของ Intent สื่อต้องใช้กล้องเริ่มต้นของระบบ
ตั้งแต่ Android 11 เป็นต้นไป เฉพาะแอปกล้องของระบบที่ติดตั้งไว้ล่วงหน้าเท่านั้นที่จะตอบสนองต่อการทำงานของ Intent ต่อไปนี้ได้
android.media.action.VIDEO_CAPTUREandroid.media.action.IMAGE_CAPTUREandroid.media.action.IMAGE_CAPTURE_SECURE
หากมีแอปกล้องของระบบที่ติดตั้งไว้ล่วงหน้ามากกว่า 1 แอป ระบบจะแสดงกล่องโต้ตอบเพื่อให้ผู้ใช้เลือกแอป หากต้องการให้แอปใช้แอปกล้องของบุคคลที่สามที่เฉพาะเจาะจงเพื่อถ่ายภาพหรือวิดีโอในนามของแอป คุณสามารถทำให้ Intent เหล่านี้ชัดเจนได้โดยการตั้งค่าชื่อแพ็กเกจหรือคอมโพเนนต์สำหรับ Intent
การแพ็กเกจและการติดตั้งแอป
ไฟล์ทรัพยากรที่บีบอัด
รายละเอียดการเปลี่ยนแปลง
ชื่อการเปลี่ยนแปลง: RESOURCES_ARSC_COMPRESSED
รหัสการเปลี่ยนแปลง: 132742131
วิธีเปิด/ปิด
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAMEadb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปิด/ปิดการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอป
แอปที่กำหนดเป้าหมายเป็น Android 11 (ระดับ API 30) ขึ้นไปจะติดตั้งไม่ได้หากมีไฟล์ resources.arsc ที่บีบอัด หรือหากไฟล์นี้ไม่ได้จัดแนวตามขอบเขต 4 ไบต์ ระบบจะแมปไฟล์นี้กับหน่วยความจำไม่ได้หากมีเงื่อนไขใดเงื่อนไขหนึ่งต่อไปนี้ ตารางทรัพยากรที่แมปกับหน่วยความจำไม่ได้จะต้องอ่านลงในบัฟเฟอร์ใน RAM ซึ่งจะทำให้ระบบมีหน่วยความจำไม่เพียงพอโดยไม่จำเป็นและทำให้ RAM ในอุปกรณ์มีการใช้งานเพิ่มขึ้นอย่างมาก
หากก่อนหน้านี้คุณใช้ไฟล์ที่บีบอัด resources.arsc ให้ลองใช้กลยุทธ์อื่นแทน เช่น การลดขนาดทรัพยากรของแอป หรือใช้วิธีอื่นๆ ในการลดขนาด ทำให้สับสน และเพิ่มประสิทธิภาพแอป
ตอนนี้ต้องใช้ APK Signature Scheme v2 แล้ว
แอปที่กำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ซึ่งปัจจุบันมีการลงชื่อโดยใช้ APK Signature Scheme v1 เท่านั้น ตอนนี้ต้องลงชื่อโดยใช้ APK Signature Scheme v2 ขึ้นไปด้วย ผู้ใช้จะติดตั้งหรืออัปเดตแอปที่ลงชื่อด้วย APK Signature Scheme v1 เท่านั้นในอุปกรณ์ที่ใช้ Android 11 ไม่ได้
หากต้องการยืนยันว่าแอปของคุณลงชื่อด้วย APK Signature Scheme v2 ขึ้นไป
คุณสามารถใช้ Android Studio
หรือเครื่องมือ apksigner ในบรรทัดคำสั่ง
Firebase
Firebase JobDispatcher และ GCMNetworkManager
หากแอปกำหนดเป้าหมายเป็นระดับ API 30 ขึ้นไป ระบบจะปิดใช้การเรียก API Firebase JobDispatcher และ GcmNetworkManager ในอุปกรณ์ที่ใช้ Android 6.0 (ระดับ API 23) ขึ้นไป ดูข้อมูลการย้ายข้อมูลได้ที่ การย้ายข้อมูลจาก Firebase JobDispatcher ไปยัง WorkManager และ การย้ายข้อมูลจาก GCMNetworkManager ไปยัง WorkManager
การจดจำคำพูด
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
การเปลี่ยนแปลงการเรียกกลับสำหรับ OnSharedPreferenceChangeListener
รายละเอียดการเปลี่ยนแปลง
ชื่อการเปลี่ยนแปลง: CALLBACK_ON_CLEAR_CHANGE
รหัสการเปลี่ยนแปลง: 119147584
วิธีเปิด/ปิด
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAMEadb shell am compat disable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปิด/ปิดการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอป
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 11 (ระดับ API 30) เมื่อใดก็ตามที่มีการเรียก
Editor.clear
ระบบจะเรียกกลับไปยัง
OnSharedPreferenceChangeListener.onSharedPreferenceChanged
ด้วยคีย์ null
ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK
Android 11 มีรายการอินเทอร์เฟซที่ไม่ใช่ SDK ที่จำกัดซึ่งอัปเดตแล้ว โดยอิงตามการทำงานร่วมกันกับนักพัฒนาแอป Android และการทดสอบภายในล่าสุด เราจะตรวจสอบว่ามีทางเลือกอื่นที่เผยแพร่ต่อสาธารณะพร้อมใช้งานก่อนที่จะจำกัดอินเทอร์เฟซที่ไม่ใช่ SDK ทุกครั้งที่ทำได้
หากแอปของคุณไม่ได้กำหนดเป้าหมายเป็น Android 11 การเปลี่ยนแปลงบางอย่างเหล่านี้อาจไม่ส่งผลต่อคุณในทันที อย่างไรก็ตาม แม้ว่าปัจจุบันคุณจะใช้ อินเทอร์เฟซที่ไม่ใช่ SDK บางรายการได้ (ขึ้นอยู่กับระดับ API เป้าหมายของแอป) แต่การใช้เมธอดหรือฟิลด์ที่ไม่ใช่ SDK ใดๆ ก็มีความเสี่ยงสูงที่จะทำให้แอป ขัดข้องเสมอ
หากต้องการดูว่าแอปใช้อินเทอร์เฟซที่ไม่ใช่ SDK อยู่หรือเปล่า คุณสามารถทดสอบแอปดูได้ หากแอปของคุณใช้อินเทอร์เฟซที่ไม่ใช่ SDK คุณควรเริ่มวางแผนย้ายไปใช้ทางเลือกอื่นที่เป็น SDK อย่างไรก็ตาม เราเข้าใจว่าแอปบางแอปมี Use Case ที่ถูกต้องสำหรับการใช้อินเทอร์เฟซที่ไม่ใช่ SDK หากไม่พบวิธีอื่นแทนการใช้อินเทอร์เฟซที่ไม่ใช่ SDK สำหรับฟีเจอร์ในแอป คุณควรขอ API สาธารณะใหม่
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงใน Android รุ่นนี้ได้ที่ การอัปเดต ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK ใน Android 11 ดูข้อมูลเพิ่มเติมเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK โดยทั่วไปได้ที่ ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK อินเทอร์เฟซ