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_NAME
adb shell am compat disable (135754954|NATIVE_HEAP_POINTER_TAGGING) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการสลับการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอปของคุณ
ตอนนี้พอยน์เตอร์ฮีปมีแท็กที่ไม่ใช่ 0 ในไบต์ที่สำคัญที่สุด (MSB) ตอนนี้แอปพลิเคชันที่ใช้พอยน์เตอร์อย่างไม่ถูกต้อง รวมถึงแอปพลิเคชันที่แก้ไข MSB อาจขัดข้องหรือพบปัญหาอื่นๆ การเปลี่ยนแปลงนี้จำเป็นต่อการรองรับ ฮาร์ดแวร์ในอนาคตที่เปิดใช้ ARM Memory Tagging Extension (MTE) ดูข้อมูลเพิ่มเติมได้ที่ เคอร์เซอร์ที่ติดแท็ก
หากต้องการปิดใช้ฟีเจอร์นี้ โปรดดูallowNativeHeapPointerTagging
เอกสารประกอบเกี่ยวกับไฟล์ Manifest
การอัปเดตข้อความแจ้ง
ระบบจะบล็อกข้อความแจ้งที่กำหนดเองจากเบื้องหลัง
ระบบจะบล็อกข้อความป๊อปอัปที่มีมุมมองที่กำหนดเองหากแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปส่งข้อความป๊อปอัปเหล่านั้นจากเบื้องหลัง ทั้งนี้เพื่อรักษาความปลอดภัยและมอบประสบการณ์การใช้งานที่ดีแก่ผู้ใช้
โปรดทราบว่าระบบยังคงอนุญาตให้ใช้ข้อความ Toast
ซึ่งเป็นข้อความ Toast ที่สร้างขึ้นโดยใช้
Toast.makeText()
ที่
ไม่ได้เรียกใช้ setView()
หากแอปพยายามโพสต์ข้อความ Toast ที่มีมุมมองที่กำหนดเองจากเบื้องหลัง ระบบจะไม่แสดงข้อความแก่ผู้ใช้ แต่ระบบจะ บันทึกข้อความต่อไปนี้ใน Logcat แทน
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
การเรียกกลับของข้อความโทสต์
หากต้องการรับการแจ้งเตือนเมื่อข้อความป๊อปอัป (ข้อความหรือข้อความที่กำหนดเอง) ปรากฏขึ้นหรือหายไป
ให้ใช้เมธอด
addCallback()
ซึ่งเพิ่มเข้ามาใน Android 11
การเปลี่ยนแปลง API ข้อความ Toast
แอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปจะเห็นผลข้างเคียงต่อไปนี้ สำหรับข้อความ Toast
- เมธอด
getView()
จะแสดงผลnull
- ค่าที่ส่งคืนของเมธอดต่อไปนี้ไม่แสดงค่าจริง ดังนั้นคุณไม่ควรใช้ค่าเหล่านี้ในแอป
- วิธีการต่อไปนี้ไม่มีผลใดๆ ดังนั้นแอปของคุณจึงไม่ควรใช้วิธีการเหล่านี้
การเชื่อมต่อ
สิทธิ์อ่านฐานข้อมูล APN แบบจำกัด
เปลี่ยนรายละเอียด
เปลี่ยนชื่อ: APN_READING_PERMISSION_CHANGE_ID
รหัสการเปลี่ยนแปลง: 124107808
วิธีสลับ
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
adb shell am compat disable (124107808|APN_READING_PERMISSION_CHANGE_ID) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการสลับการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอปของคุณ
ตอนนี้แอปที่กำหนดเป้าหมายเป็น Android 11 ต้องมีสิทธิ์
Manifest.permission.WRITE_APN_SETTINGS
ที่มีสิทธิ์เพื่ออ่านหรือเข้าถึงฐานข้อมูล APN ของผู้ให้บริการ Telephony
การพยายามเข้าถึงฐานข้อมูล 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_NAME
adb 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
กล้อง
การดำเนินการตามความตั้งใจของสื่อต้องใช้กล้องเริ่มต้นของระบบ
ตั้งแต่ Android 11 เป็นต้นไป เฉพาะแอปกล้องถ่ายรูประบบที่ติดตั้งไว้ล่วงหน้าเท่านั้นที่ ตอบสนองต่อการทำงานของ Intent ต่อไปนี้ได้
android.media.action.VIDEO_CAPTURE
android.media.action.IMAGE_CAPTURE
android.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_NAME
adb shell am compat disable (132742131|RESOURCES_ARSC_COMPRESSED) PACKAGE_NAME
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการสลับการเปลี่ยนแปลงได้ที่ ทดสอบและแก้ไขข้อบกพร่องของการเปลี่ยนแปลงลักษณะการทำงานของแพลตฟอร์มใน แอปของคุณ
แอปที่กำหนดเป้าหมายเป็น Android 11 (API ระดับ 30) ขึ้นไปจะติดตั้งไม่ได้หากมีไฟล์ compressed 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
การจดจำคำพูด
เนื่องจากการเปลี่ยนแปลงระดับการเข้าถึง
แพ็กเกจ แอปที่กำหนดเป้าหมายเป็น
Android 11 และโต้ตอบกับบริการจดจำเสียงต้อง
เพิ่มองค์ประกอบ <queries>
ต่อไปนี้ลงในไฟล์ Manifest
<queries> <intent> <action android:name="android.speech.RecognitionService" /> </intent> </queries>
การเปลี่ยนแปลง Callback สำหรับ OnSharedPreferenceChangeListener
เปลี่ยนรายละเอียด
เปลี่ยนชื่อ: CALLBACK_ON_CLEAR_CHANGE
รหัสการเปลี่ยนแปลง: 119147584
วิธีสลับ
ขณะทดสอบความเข้ากันได้ของแอปกับ Android 11 คุณสามารถเปิดหรือปิดการเปลี่ยนแปลงนี้ได้ โดยใช้คำสั่ง ADB ต่อไปนี้
adb shell am compat enable (119147584|CALLBACK_ON_CLEAR_CHANGE) PACKAGE_NAME
adb 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