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
ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปลี่ยนแปลงในการเปิด/ปิดได้ที่ทดสอบและแก้ไขข้อบกพร่องการเปลี่ยนแปลงลักษณะการทํางานของแพลตฟอร์มในแอป
ตอนนี้เคอร์เซอร์ฮีปมีแท็กที่ไม่ใช่ศูนย์ในไบต์ที่สำคัญที่สุด (MSB) แอปพลิเคชันที่ใช้พอยน์เตอร์อย่างไม่ถูกต้อง รวมถึงแอปพลิเคชันที่แก้ไข MSB อาจขัดข้องหรือพบปัญหาอื่นๆ การเปลี่ยนแปลงนี้จำเป็นต่อการรองรับฮาร์ดแวร์ในอนาคตที่เปิดใช้ส่วนขยายการติดแท็กหน่วยความจำของ ARM (MTE) ดูข้อมูลเพิ่มเติมได้ที่เคอร์เซอร์ที่ติดแท็ก
หากต้องการปิดใช้ฟีเจอร์นี้ โปรดดูเอกสารประกอบเกี่ยวกับไฟล์ 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