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
การอัปเดตข้อความ Toast
ระบบบล็อกข้อความ Toast ที่กำหนดเองจากเบื้องหลัง
เพื่อความปลอดภัยและเพื่อรักษาประสบการณ์ที่ดีของผู้ใช้ ระบบจะบล็อกข้อความโทสต์ที่มีมุมมองที่กำหนดเองหากแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปส่งข้อความโทสต์เหล่านั้นจากเบื้องหลัง โปรดทราบว่าระบบยังคงอนุญาตให้ใช้ข้อความ Toast ซึ่งเป็นข้อความ Toast ที่สร้างขึ้นโดยใช้ Toast.makeText() ที่ไม่เรียกใช้ setView()
หากแอปพยายามโพสต์ข้อความโทสต์ที่มีมุมมองที่กำหนดเองจากเบื้องหลัง ระบบจะไม่แสดงข้อความต่อผู้ใช้ แต่ระบบจะบันทึกข้อความต่อไปนี้ใน logcat แทน
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
Callback ของข้อความ Toast
หากต้องการรับการแจ้งเตือนเมื่อข้อความสั้น (ข้อความหรือข้อความที่กำหนดเอง) ปรากฏขึ้นหรือหายไป ให้ใช้เมธอด addCallback() ซึ่งเพิ่มเข้ามาใน Android 11
การเปลี่ยนแปลง API ของข้อความ Toast
แอปที่กำหนดเป้าหมายเป็น 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 เฟรมเวิร์กจะไม่ส่งเหตุการณ์ Callback ของปุ่มการช่วยเหลือพิเศษไปยังบริการของคุณ
หากต้องการรับเหตุการณ์ Callback ของการช่วยเหลือพิเศษในบริการการช่วยเหลือพิเศษ ให้ใช้ไฟล์ข้อมูลเมตาของบริการการช่วยเหลือพิเศษเพื่อประกาศการเชื่อมโยงของบริการกับปุ่มการช่วยเหลือพิเศษ ใส่ค่า flagRequestAccessibilityButton ในคำจำกัดความของแอตทริบิวต์ accessibilityFlags ตำแหน่งทั่วไปสำหรับไฟล์ข้อมูลเมตาของบริการการช่วยเหลือพิเศษคือ res/raw/accessibilityservice.xml
กล้อง
การดำเนินการตามความตั้งใจของสื่อต้องใช้กล้องเริ่มต้นของระบบ
ตั้งแต่ 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 ขึ้นไป ระบบจะปิดใช้การเรียก Firebase JobDispatcher และ GcmNetworkManager API ในอุปกรณ์ที่ใช้ 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_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