การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น 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 อาจขัดข้องหรือพบปัญหาอื่นๆ การเปลี่ยนแปลงนี้จําเป็นเพื่อรองรับฮาร์ดแวร์ในอนาคตที่เปิดใช้ 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 ต่อไปนี้ได้

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