การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น Android 11

Android 11 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณเช่นเดียวกับรุ่นก่อนหน้า การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปที่กำหนดเป้าหมายเป็น Android 11 ขึ้นไปเท่านั้น หากแอปตั้งค่า targetSdkVersionเป็น 30 คุณควรแก้ไขแอปเพื่อ รองรับลักษณะการทำงานเหล่านี้อย่างเหมาะสม (หากมี)

อย่าลืมดูรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปทั้งหมด ที่ทำงานบน Android 11 ด้วย

ความเป็นส่วนตัว

Android 11 มีการเปลี่ยนแปลงและข้อจำกัดเพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้ ซึ่งรวมถึงสิ่งต่อไปนี้

ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว

ความปลอดภัย

การติดแท็กตัวชี้ฮีป

เปลี่ยนรายละเอียด

เปลี่ยนชื่อ: 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 ต่อไปนี้ได้

หากมีแอปกล้องของระบบที่ติดตั้งล่วงหน้ามากกว่า 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