แพลตฟอร์ม Android 11 มีการเปลี่ยนแปลงลักษณะการทํางานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทํางานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทํางานบน Android 11 โดยไม่คำนึงถึง targetSdkVersion
คุณควรทดสอบแอปแล้วแก้ไขตามความจำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสม หากมี
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กําหนดเป้าหมายเป็น Android 11 เท่านั้นด้วย
ความเป็นส่วนตัว
Android 11 มีการเปิดตัวการเปลี่ยนแปลงและข้อจำกัดเพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ซึ่งรวมถึงการเปลี่ยนแปลงต่อไปนี้
- สิทธิ์แบบครั้งเดียว: ให้ตัวเลือกแก่ผู้ใช้ในการให้สิทธิ์เข้าถึงตำแหน่ง ไมโครโฟน และกล้องชั่วคราวเพิ่มเติม
- ระดับการมองเห็นกล่องโต้ตอบสิทธิ์: การปฏิเสธสิทธิ์ซ้ำๆ หมายความว่า "ไม่ต้องถามอีก"
- การตรวจสอบการเข้าถึงข้อมูล: รับข้อมูลเชิงลึกเกี่ยวกับตําแหน่งที่แอปเข้าถึงข้อมูลส่วนตัว ทั้งที่อยู่ในโค้ดของแอปเองและในโค้ดของไลบรารีที่เกี่ยวข้อง
- สิทธิ์ของหน้าต่างการแจ้งเตือนของระบบ: แอปบางคลาสจะได้รับสิทธิ์
SYSTEM_ALERT_WINDOW
โดยอัตโนมัติเมื่อมีการขอ นอกจากนี้ Intent ที่มีACTION_MANAGE_OVERLAY_PERMISSION
การดำเนินการของ Intent จะนําผู้ใช้ไปยังหน้าจอในการตั้งค่าระบบเสมอ - ตัวระบุ SIM ถาวร: ระบบจะจำกัดการเข้าถึง ICCID ที่รีเซ็ตไม่ได้ผ่านวิธี
getIccId()
ใน Android 11 ขึ้นไป เมธอดจะแสดงผลสตริงว่างที่ไม่ใช่ค่า Null หากต้องการระบุซิมที่ติดตั้งในอุปกรณ์อย่างเจาะจง ให้ใช้วิธีgetSubscriptionId()
แทน รหัสการสมัครใช้บริการจะให้ค่าดัชนี (เริ่มต้นที่ 1) สําหรับการระบุ SIM ที่ติดตั้งอย่างเจาะจง ซึ่งรวมถึง SIM จริงและอิเล็กทรอนิกส์ ค่าของตัวระบุนี้จะคงที่สำหรับ SIM หนึ่งๆ เว้นแต่จะมีการรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว
การแจ้งเตือนความเสี่ยงต่อการติดเชื้อ
Android 11 อัปเดตแพลตฟอร์มโดยคำนึงถึงระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ ตอนนี้ผู้ใช้สามารถเรียกใช้แอปการแจ้งเตือนความเสี่ยงต่อการติดเชื้อใน Android 11 ได้โดยไม่ต้องเปิดการตั้งค่าตำแหน่งของอุปกรณ์ ข้อยกเว้นนี้ใช้กับระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อเท่านั้น เนื่องจากระบบนี้ได้รับการออกแบบมาเพื่อให้แอปที่ใช้ระบบดังกล่าวไม่สามารถอนุมานตำแหน่งของอุปกรณ์ผ่านการสแกนบลูทูธ
แอปอื่นๆ ทั้งหมดยังคงไม่ได้รับอนุญาตให้ทำการสแกนบลูทูธเพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ เว้นแต่การตั้งค่าตำแหน่งของอุปกรณ์จะเปิดอยู่และผู้ใช้ได้ให้สิทธิ์เข้าถึงตำแหน่งแก่แอปแล้ว อ่านข้อมูลเพิ่มเติมได้ที่โพสต์ข้อมูลอัปเดตเกี่ยวกับการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ
ความปลอดภัย
ซ็อกเก็ต SSL ใช้เครื่องมือ SSL ของ Conscrypt โดยค่าเริ่มต้น
การใช้งาน SSLSocket
เริ่มต้นของ Android อิงตาม Conscrypt
ตั้งแต่ Android 11 การใช้งานดังกล่าวสร้างขึ้นภายในโดยอิงตาม SSLEngine
ของ Conscrypt
Scudo Hardened Allocator
Android 11 ใช้ตัวจัดสรรที่เพิ่มความแข็งแกร่งของ Scudo ภายในเพื่อจัดสรรกอง heap 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 รองรับการแก้ไขข้อบกพร่องสำหรับแอปเพื่อระบุการเรียกใช้ JobScheduler
API ที่อาจเกิดขึ้นซึ่งเกินขีดจำกัดอัตราบางอย่าง
นักพัฒนาแอปสามารถใช้เครื่องมือนี้เพื่อระบุปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้น สําหรับแอปที่มีdebuggable
แอตทริบิวต์ไฟล์ Manifest ตั้งค่าเป็น "จริง" การเรียกใช้ JobScheduler
API เกินขีดจํากัดอัตราจะแสดงผลเป็น RESULT_FAILURE
ขีดจํากัดที่ตั้งไว้จะไม่ส่งผลกระทบต่อ Use Case ที่ถูกต้อง
ตัวกรองตัวบอกไฟล์ (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 อื่น อย่างไรก็ตาม เราเข้าใจว่าแอปบางแอปมี Use Case ที่ถูกต้องในการใช้อินเทอร์เฟซที่ไม่ใช่ 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 โดยการตั้งค่า Flag ของ 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", ...)