แพลตฟอร์ม Android 11 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อทำงานใน Android 11 โดยไม่คำนึงถึง targetSdkVersion คุณควรทดสอบแอปแล้วแก้ไขตามความจำเป็นเพื่อรองรับสิ่งเหล่านี้อย่างเหมาะสม (หากมี)
อย่าลืมตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 11 เท่านั้นด้วย
ความเป็นส่วนตัว
Android 11 มีการเปลี่ยนแปลงและข้อจำกัดเพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้ ซึ่งรวมถึงสิ่งต่อไปนี้
- สิทธิ์ครั้งเดียว: ให้ผู้ใช้มีตัวเลือกในการให้สิทธิ์เข้าถึงตำแหน่ง ไมโครโฟน และกล้องแบบชั่วคราวมากขึ้น
- ระดับการเข้าถึงของกล่องโต้ตอบสิทธิ์: การปฏิเสธสิทธิ์ซ้ำๆ หมายถึง "ไม่ต้องถามอีก"
- การตรวจสอบการเข้าถึงข้อมูล: รับข้อมูลเชิงลึกเกี่ยวกับตำแหน่งที่แอปเข้าถึงข้อมูลส่วนตัว ทั้งในโค้ดของแอปเองและในโค้ดของไลบรารีที่เกี่ยวข้อง
- สิทธิ์หน้าต่างการแจ้งเตือนของระบบ: แอปบางคลาสจะได้รับสิทธิ์
SYSTEM_ALERT_WINDOWโดยอัตโนมัติเมื่อส่งคำขอ นอกจากนี้ Intent ที่มีการดำเนินการ IntentACTION_MANAGE_OVERLAY_PERMISSIONจะนำผู้ใช้ไปยังหน้าจอในการตั้งค่าระบบเสมอ - ตัวระบุซิมแบบถาวร:
ใน Android 11 ขึ้นไป ระบบจะจำกัดการเข้าถึง ICCID ที่รีเซ็ตไม่ได้ผ่านเมธอด
getIccId()เมธอดจะแสดงผลสตริงว่างที่ไม่ใช่ Null หากต้องการระบุซิมที่ติดตั้งในอุปกรณ์โดยไม่ซ้ำกัน ให้ใช้เมธอดgetSubscriptionId()แทน รหัสการสมัครใช้บริการจะให้ค่าดัชนี (เริ่มต้นที่ 1) เพื่อระบุซิมที่ติดตั้งไว้อย่างไม่ซ้ำกัน ซึ่งรวมถึงซิมจริงและซิมอิเล็กทรอนิกส์ ค่าของตัวระบุนี้จะคงที่สำหรับซิมหนึ่งๆ เว้นแต่จะมีการรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว
การแจ้งเตือนความเสี่ยงต่อการติดเชื้อ
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 อย่างเหมาะสม

ประสิทธิภาพและการแก้ไขข้อบกพร่อง
การแก้ไขข้อจำกัดการเรียก JobScheduler API
Android 11 มีการรองรับการแก้ไขข้อบกพร่องสำหรับแอปเพื่อระบุการเรียกใช้ JobScheduler API ที่อาจเกินขีดจำกัดอัตราคำขอบางอย่าง
นักพัฒนาแอปสามารถใช้เครื่องมือนี้เพื่อระบุปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้น สำหรับแอปที่มีการตั้งค่าแอตทริบิวต์ไฟล์ Manifest debuggable เป็น "จริง" การเรียกใช้ API JobScheduler ที่เกินขีดจำกัดอัตราคำขอจะแสดงผล RESULT_FAILURE
เรากำหนดขีดจำกัดไว้เพื่อไม่ให้กรณีการใช้งานที่ถูกต้องตามกฎหมายได้รับผลกระทบ
เครื่องมือตรวจสอบตัวบอกไฟล์ (fdsan)
Android 10 เปิดตัว fdsan (เครื่องมือทำความสะอาดตัวบอกไฟล์)
fdsan ตรวจพบการจัดการการเป็นเจ้าของตัวบอกไฟล์ที่ไม่ถูกต้อง เช่น การใช้หลังปิดและการปิดซ้ำ โหมดเริ่มต้นสำหรับ 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 โดยตั้งค่าแฟล็ก Intent ต่อไปนี้อย่างน้อย 1 รายการ
FLAG_GRANT_READ_URI_PERMISSION
และ
FLAG_GRANT_WRITE_URI_PERMISSION
ด้วยวิธีนี้ หากแอปอื่นกำหนดเป้าหมายเป็น Android 11 แอปจะยังคงเข้าถึง URI เนื้อหาได้ แอปของคุณต้องมีแฟล็ก Intent แม้ว่า URI เนื้อหาจะเชื่อมโยงกับ Content Provider ที่แอปของคุณไม่ได้เป็นเจ้าของก็ตาม
หากแอปของคุณเป็นเจ้าของ Content Provider ที่เชื่อมโยงกับ URI เนื้อหา ให้ตรวจสอบว่าไม่มีการส่งออก Content Provider เราขอแนะนำแนวทางปฏิบัติแนะนำด้านความปลอดภัยนี้อยู่แล้ว
กำลังโหลดคลัง
กำลังโหลดไลบรารีทั่วไปของ ICU ด้วย Absolute Path
แอปที่กำหนดเป้าหมายเป็น API 28 และต่ำกว่าไม่สามารถใช้ dlopen(3) เพื่อโหลด libicuuc ด้วย Absolute Path "/system/lib/libicuuc.so" สำหรับแอปเหล่านั้น dlopen("/system/lib/libicuuc.so", ...) จะแสดงผลเป็นแฮนเดิล Null
แต่หากต้องการโหลดไลบรารี โปรดใช้ชื่อไลบรารีเป็นชื่อไฟล์ เช่น dlopen("libicuuc.so", ...)