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 อาจขัดข้องหรือพบปัญหาอื่นๆ การเปลี่ยนแปลงนี้จําเป็นเพื่อรองรับฮาร์ดแวร์ในอนาคตที่เปิดใช้ Memory Tagging Extension (MTE) ของ ARM ดูข้อมูลเพิ่มเติมได้ที่เคอร์เซอร์ที่ติดแท็ก
หากต้องการปิดใช้ฟีเจอร์นี้ โปรดดูเอกสารประกอบเกี่ยวกับไฟล์ Manifest ของ allowNativeHeapPointerTagging
การอัปเดตข้อความแจ้ง
ระบบบล็อกข้อความแจ้งแบบกำหนดเองจากเบื้องหลัง
ระบบจะบล็อกข้อความแจ้งที่มีมุมมองที่กำหนดเองหากข้อความแจ้งเหล่านั้นส่งมาจากเบื้องหลังโดยแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไป เพื่อรักษาความปลอดภัยและมอบประสบการณ์การใช้งานที่ดีแก่ผู้ใช้ โปรดทราบว่าระบบยังคงอนุญาตให้แสดงข้อความ Toast ซึ่งเป็น Toast ที่สร้างขึ้นโดยใช้ Toast.makeText()
ที่ไม่ได้เรียกใช้ setView()
หากแอปพยายามโพสต์ข้อความ Toast ที่มีมุมมองที่กำหนดเองจากเบื้องหลัง ระบบจะไม่แสดงข้อความต่อผู้ใช้ แต่ระบบจะบันทึกข้อความต่อไปนี้ใน logcat
W/NotificationService: Blocking custom toast from package \ <package> due to package not in the foreground
การติดต่อกลับของข้อความ Toast
หากต้องการรับการแจ้งเตือนเมื่อข้อความแจ้ง (ข้อความหรือข้อความที่กำหนดเอง) ปรากฏขึ้นหรือหายไป ให้ใช้เมธอด addCallback()
ซึ่งเพิ่มเข้ามาใน Android 11
การเปลี่ยนแปลง Text Toast 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_NAME
adb 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_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
กล้อง
การดำเนินการตาม Intent ของสื่อต้องใช้กล้องเริ่มต้นของระบบ
ตั้งแต่ 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) ขึ้นไปจะติดตั้งไม่ได้หากมีไฟล์ 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 FirebaseJobDispatcher และ 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