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

แพลตฟอร์ม Android 11 มีการเปลี่ยนแปลงลักษณะการทํางานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทํางานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทํางานบน Android 11 โดยไม่คำนึงถึง targetSdkVersion คุณควร ทดสอบแอปแล้วแก้ไขตามต้องการเพื่อรองรับแอปเหล่านี้ได้อย่างถูกต้อง ในจุดที่เหมาะสม

โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กําหนดเป้าหมายเป็น Android 11 เท่านั้นด้วย

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

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

  • สิทธิ์แบบครั้งเดียว: ให้ตัวเลือกแก่ผู้ใช้ในการให้สิทธิ์เข้าถึงตำแหน่ง ไมโครโฟน และกล้องชั่วคราวเพิ่มเติม
  • ระดับการเข้าถึงกล่องโต้ตอบสิทธิ์: การปฏิเสธสิทธิ์ซ้ำๆ หมายถึง "ไม่ต้องถามอีก"
  • การตรวจสอบการเข้าถึงข้อมูล: รับข้อมูลเชิงลึกเกี่ยวกับตําแหน่งที่แอปเข้าถึงข้อมูลส่วนตัว ทั้งที่อยู่ในโค้ดของแอปเองและในโค้ดของไลบรารีที่เกี่ยวข้อง
  • สิทธิ์ของหน้าต่างการแจ้งเตือนของระบบ: แอปบางคลาสจะได้รับสิทธิ์ SYSTEM_ALERT_WINDOW โดยอัตโนมัติเมื่อมีการขอ นอกจากนี้ Intent ที่มีACTION_MANAGE_OVERLAY_PERMISSION การดำเนินการของ Intent จะนําผู้ใช้ไปยังหน้าจอในการตั้งค่าระบบเสมอ
  • ตัวระบุซิมถาวร: ใน Android 11 ขึ้นไป ระบบจะจำกัดสิทธิ์เข้าถึง ICCID ที่รีเซ็ตไม่ได้ผ่านเมธอด getIccId() เมธอดจะแสดงสตริงว่างที่ไม่เป็นค่าว่าง หากต้องการระบุซิมที่ติดตั้งในอุปกรณ์อย่างเจาะจง ให้ใช้วิธี getSubscriptionId() แทน รหัสการสมัครใช้บริการจะให้ค่าดัชนี (เริ่มต้นที่ 1) สําหรับการระบุ SIM ที่ติดตั้งอย่างเจาะจง ซึ่งรวมถึง SIM จริงและอิเล็กทรอนิกส์ ค่าของตัวระบุนี้จะคงที่สำหรับซิมที่ระบุ เว้นแต่จะรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น

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

การแจ้งเตือนความเสี่ยงต่อการติดเชื้อ

Android 11 อัปเดตแพลตฟอร์มโดยคำนึงถึงระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ ตอนนี้ผู้ใช้สามารถเรียกใช้แอปการแจ้งเตือนความเสี่ยงต่อการติดเชื้อใน Android 11 ได้โดยไม่ต้องเปิดการตั้งค่าตำแหน่งของอุปกรณ์ กรณีนี้เป็นข้อยกเว้นสำหรับระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อเท่านั้น เนื่องจากได้รับการออกแบบมาในลักษณะที่แอปที่กำลังใช้ไม่สามารถระบุตำแหน่งของอุปกรณ์ผ่านการสแกนหาบลูทูธ

ระบบจะยังคงห้ามไม่ให้แอปอื่นๆ ทั้งหมดทำการสแกนบลูทูธเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ เว้นแต่จะเปิดการตั้งค่าตำแหน่งของอุปกรณ์ไว้และผู้ใช้ให้สิทธิ์เข้าถึงตำแหน่งแก่แอปนั้น อ่านข้อมูลเพิ่มเติมได้ที่โพสต์ข้อมูลอัปเดตเกี่ยวกับการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ

ความปลอดภัย

ซ็อกเก็ต SSL ใช้เครื่องมือ Conscrypt SSL เป็นค่าเริ่มต้น

การใช้งาน SSLSocket เริ่มต้นของ Android อิงตาม Conscrypt ตั้งแต่ Android 11 การใช้งานดังกล่าวสร้างขึ้นภายในโดยอิงตาม SSLEngine ของ Conscrypt

Scudo Hardened Allocator

Android 11 ใช้ Scudo Hardened Allocator ภายในเพื่อจัดสรรพื้นที่เก็บข้อมูลกอง Scudo สามารถตรวจจับและบรรเทาการละเมิดความปลอดภัยของหน่วยความจำบางประเภท หากคุณเห็นข้อขัดข้องเกี่ยวกับ Scudo (เช่น Scudo ERROR:) ในรายงานข้อขัดข้องของระบบ โปรดดูเอกสารประกอบการแก้ปัญหา Scudo

สถิติการใช้งานแอป

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

  • ผู้ใช้ปลดล็อกอุปกรณ์เป็นครั้งแรกหลังจากระบบเริ่มต้น
  • ผู้ใช้เปลี่ยนไปใช้บัญชีของตนเองในอุปกรณ์

หากแอปของคุณเชื่อมโยงกับอินสแตนซ์ของ UsageStatsManager อยู่แล้ว ให้ตรวจสอบว่าคุณเรียกใช้เมธอดในออบเจ็กต์นี้หลังจากที่ผู้ใช้ปลดล็อกอุปกรณ์แล้ว ไม่เช่นนั้น API จะแสดงผลค่า Null หรือค่าว่าง

การรองรับโปรแกรมจำลองสำหรับ 5G

Android 11 เพิ่ม 5G API เพื่อให้แอปของคุณเพิ่มฟีเจอร์ล้ำสมัยได้ หากต้องการทดสอบฟีเจอร์ขณะเพิ่ม คุณสามารถใช้ความสามารถใหม่ๆ ของโปรแกรมจำลอง Android SDK ฟังก์ชันการทำงานใหม่นี้เพิ่มเข้ามาในโปรแกรมจำลองเวอร์ชัน 30.0.22 การเลือกการตั้งค่าเครือข่าย 5G จะเป็นการตั้งค่า TelephonyDisplayInfo เป็น OVERRIDE_NETWORK_TYPE_NR_NSA แก้ไขแบนด์วิดท์โดยประมาณ และให้คุณกำหนดการวัดปริมาณอินเทอร์เน็ตเพื่อยืนยันว่าแอปตอบสนองต่อการเปลี่ยนแปลงสถานะ NET_CAPABILITY_TEMPORARILY_NOT_METERED ได้อย่างเหมาะสม

ประสิทธิภาพและการแก้ไขข้อบกพร่อง

การแก้ไขข้อจำกัดการเรียก API ของ JobScheduler

Android 11 รองรับการแก้ไขข้อบกพร่องของแอปเพื่อระบุการเรียกใช้ API ของ JobScheduler ที่อาจเกินขีดจำกัดอัตราบางอย่าง นักพัฒนาแอปสามารถใช้เครื่องมือนี้เพื่อระบุปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้น สําหรับแอปที่มีdebuggableแอตทริบิวต์ไฟล์ Manifest ตั้งค่าเป็น "จริง" การเรียกใช้ JobScheduler API เกินขีดจํากัดอัตราจะแสดงผลเป็น RESULT_FAILURE ขีดจํากัดที่ตั้งไว้จะไม่ส่งผลกระทบต่อ Use Case ที่ถูกต้อง

File Descriptor sanitizer (Fdsan)

Android 10 เปิดตัว fdsan (น้ำยาล้างข้อบ่งชี้ไฟล์) fdsan ตรวจจับการจัดการการเป็นเจ้าของตัวระบุไฟล์ที่ไม่ถูกต้อง เช่น ใช้หลังจากปิดแล้วและการปิด 2 ครั้ง โหมดเริ่มต้นของ fdsan กำลังมีการเปลี่ยนแปลงใน Android 11 ตอนนี้ fdsan จะหยุดดำเนินการเมื่อตรวจพบข้อผิดพลาด โดยก่อนหน้านี้จะบันทึกคำเตือนและดำเนินการต่อ หากคุณเห็นข้อขัดข้องเนื่องจาก fdsan ในแอปพลิเคชันของคุณ โปรดดูที่ fdsan documentation

ข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ SDK

Android 11 มีรายการอินเทอร์เฟซที่ไม่ใช่ SDK ซึ่งถูกจำกัดซึ่งอัปเดตแล้ว โดยอิงตามการทำงานร่วมกันกับนักพัฒนาแอป Android และการทดสอบภายในครั้งล่าสุด เราจะตรวจสอบว่ามีทางเลือกสาธารณะให้ใช้งานก่อนที่จะจำกัดอินเทอร์เฟซที่ไม่ใช่ SDK ทุกครั้งที่ทำได้

หากแอปไม่ได้กำหนดเป้าหมายเป็น Android 11 การเปลี่ยนแปลงบางอย่างเหล่านี้อาจไม่ส่งผลต่อคุณในทันที อย่างไรก็ตาม แม้ว่าปัจจุบันคุณจะใช้อินเทอร์เฟซที่ไม่ใช่ SDK บางรายการได้ (ขึ้นอยู่กับระดับ API เป้าหมายของแอป) แต่การใช้เมธอดหรือฟิลด์ที่ไม่ใช่ SDK นั้นมักมีความเสี่ยงสูงที่จะทำให้แอปขัดข้อง

หากไม่แน่ใจว่าแอปใช้อินเทอร์เฟซที่ไม่ใช่ SDK หรือไม่ คุณสามารถทดสอบแอปเพื่อดูข้อมูลดังกล่าว หากแอปใช้อินเทอร์เฟซที่ไม่ใช่ SDK คุณควรเริ่มวางแผนการย้ายข้อมูลไปยัง SDK อื่น อย่างไรก็ตาม เราเข้าใจดีว่าบางแอปมี กรณีการใช้งานที่ถูกต้องสำหรับการใช้อินเทอร์เฟซที่ไม่ใช่ SDK หากไม่พบทางเลือกอื่นในการใช้อินเทอร์เฟซที่ไม่ใช่ SDK สำหรับฟีเจอร์ในแอป คุณควรขอ API สาธารณะใหม่

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงใน Android เวอร์ชันนี้ได้ที่การอัปเดตข้อจำกัดของอินเทอร์เฟซที่ไม่ใช่ SDK ใน Android 11 ดูข้อมูลเพิ่มเติมเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK โดยทั่วไปได้ที่ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK

นำไลบรารีที่ใช้ร่วมกันของ Maps v1 ออกแล้ว

ระบบได้นำคลังที่ใช้ร่วมกันของ Maps เวอร์ชัน 1 ออกอย่างสมบูรณ์แล้วใน Android 11 ก่อนหน้านี้เราได้เลิกใช้งานและหยุดให้บริการไลบรารีนี้สำหรับแอปใน Android 10 แล้ว แอปที่เคยใช้ไลบรารีที่แชร์นี้สำหรับอุปกรณ์ที่ใช้ Android 9 (API ระดับ 28) หรือต่ำกว่าควรใช้ Maps SDK สำหรับ Android แทน

การโต้ตอบกับแอปอื่นๆ

แชร์ URI ของเนื้อหา

หากแอปแชร์ URI เนื้อหากับแอปอื่น Intent นั้นต้องให้สิทธิ์เข้าถึง URI โดยตั้งค่าแฟล็ก Intent ต่อไปนี้อย่างน้อย 1 รายการ: FLAG_GRANT_READ_URI_PERMISSION และ FLAG_GRANT_WRITE_URI_PERMISSION วิธีนี้ช่วยให้แอปอื่นที่กําหนดเป้าหมายเป็น Android 11 จะยังเข้าถึง URI ของเนื้อหาได้ แอปของคุณต้องมี Flag ของ Intent แม้ว่า URI ของเนื้อหาจะเชื่อมโยงกับผู้ให้บริการเนื้อหาที่แอปของคุณไม่ได้เป็นเจ้าของก็ตาม

หากแอปของคุณเป็นเจ้าของผู้ให้บริการเนื้อหาที่เชื่อมโยงกับ URI เนื้อหา ให้ตรวจสอบว่าไม่ได้ส่งออกผู้ให้บริการเนื้อหา เราขอแนะนำให้ทำตามแนวทางปฏิบัติแนะนำด้านความปลอดภัยนี้อยู่แล้ว

กำลังโหลดคลัง

กำลังโหลดไลบรารีทั่วไปของ ICU ที่มีเส้นทางสัมบูรณ์

แอปที่กำหนดเป้าหมายเป็น API ระดับ 28 หรือต่ำกว่าจะใช้ dlopen(3) เพื่อโหลด libicuuc ที่มีเส้นทางสัมบูรณ์ "/system/lib/libicuuc.so" ไม่ได้ สำหรับแอปเหล่านั้น dlopen("/system/lib/libicuuc.so", ...) จะแสดงแฮนเดิล Null

แต่หากต้องการโหลดไลบรารี โปรดใช้ชื่อไลบรารีเป็นชื่อไฟล์ เช่น dlopen("libicuuc.so", ...)