การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น 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

ดูข้อมูลเพิ่มเติมเกี่ยวกับเฟรมเวิร์กความเข้ากันได้และการเปลี่ยนแปลงในการเปิด/ปิดได้ที่ทดสอบและแก้ไขข้อบกพร่องการเปลี่ยนแปลงลักษณะการทํางานของแพลตฟอร์มในแอป

ตอนนี้เคอร์เซอร์ฮีปมีแท็กที่ไม่ใช่ศูนย์ในไบต์ที่สำคัญที่สุด (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 ต่อไปนี้ได้

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