แพลตฟอร์ม Android 11 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลกับแอปทั้งหมดเมื่อแอปทำงานบน Android 11 โดยไม่คำนึงถึง targetSdkVersion
คุณควร
ทดสอบแอป แล้วแก้ไขตามที่จำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสมในกรณีที่
เกี่ยวข้อง
อย่าลืมตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 11 เท่านั้นด้วย
ความเป็นส่วนตัว
Android 11 มีการเปลี่ยนแปลงและข้อจำกัดเพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ซึ่งรวมถึงสิ่งต่อไปนี้
- สิทธิ์ครั้งเดียว: ให้ตัวเลือกแก่ผู้ใช้ ในการให้สิทธิ์เข้าถึงตำแหน่ง ไมโครโฟน และกล้อง แบบชั่วคราวเพิ่มเติม
- กล่องโต้ตอบสิทธิ์ ระดับการมองเห็น: การปฏิเสธสิทธิ์ ซ้ำๆ หมายความว่า "ไม่ต้องถามอีก"
- การตรวจสอบการเข้าถึงข้อมูล: รับข้อมูลเชิงลึกเกี่ยวกับตำแหน่งที่แอปเข้าถึงข้อมูลส่วนตัว ทั้งในโค้ดของแอปเองและในโค้ดของไลบรารีที่ขึ้นต่อกัน
- หน้าต่างการแจ้งเตือนของระบบ
สิทธิ์: แอปบางประเภทจะได้รับสิทธิ์
SYSTEM_ALERT_WINDOW
โดยอัตโนมัติเมื่อมีการขอ นอกจากนี้ ความตั้งใจที่มีACTION_MANAGE_OVERLAY_PERMISSION
การดำเนินการตามความตั้งใจจะนำผู้ใช้ไปยังหน้าจอในการตั้งค่าระบบเสมอ - ตัวระบุ SIM ถาวร:
ใน Android 11 ขึ้นไป ระบบจะจำกัดการเข้าถึง ICCID ที่รีเซ็ตไม่ได้ผ่านเมธอด
getIccId()
เมธอดจะแสดงผลสตริงว่างที่ไม่ใช่ค่า Null หากต้องการระบุซิมที่ติดตั้งในอุปกรณ์อย่างไม่ซ้ำกัน ให้ใช้เมธอดgetSubscriptionId()
แทน รหัสการสมัครใช้บริการจะระบุค่าดัชนี (เริ่มต้นที่ 1) สำหรับ การระบุซิมที่ติดตั้งอย่างไม่ซ้ำกัน ซึ่งรวมถึงซิมจริงและซิมอิเล็กทรอนิกส์ ค่าของตัวระบุนี้จะมีความเสถียรสำหรับซิมที่กำหนด เว้นแต่จะมีการรีเซ็ต อุปกรณ์เป็นค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมได้ที่หน้าความเป็นส่วนตัว
การแจ้งเตือนความเสี่ยงต่อการติดเชื้อ
Android 11 อัปเดตแพลตฟอร์มโดยคำนึงถึงระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ ตอนนี้ผู้ใช้สามารถเรียกใช้แอปการแจ้งเตือนความเสี่ยงต่อการติดเชื้อใน Android 11 ได้โดยไม่ต้อง เปิดการตั้งค่าตำแหน่งของอุปกรณ์ นี่เป็นข้อยกเว้นสำหรับ ระบบการแจ้งเตือนความเสี่ยงต่อการติดเชื้อเท่านั้น เนื่องจากระบบได้รับการออกแบบในลักษณะที่ แอปที่ใช้ระบบนี้จะไม่สามารถอนุมานตำแหน่งของอุปกรณ์ผ่านการสแกนหาอุปกรณ์บลูทูธ
เพื่อปกป้องความเป็นส่วนตัวของผู้ใช้ แอปอื่นๆ ทั้งหมดยังคงถูกห้ามไม่ให้ทำการ สแกนบลูทูธ เว้นแต่จะเปิดการตั้งค่าตำแหน่งของอุปกรณ์และผู้ใช้ได้ ให้สิทธิ์เข้าถึงตำแหน่งแก่แอป อ่านข้อมูลเพิ่มเติมได้ในโพสต์ข้อมูลอัปเดตเกี่ยวกับการแจ้งเตือนความเสี่ยงต่อการติดเชื้อ
ความปลอดภัย
ซ็อกเก็ต SSL ใช้เครื่องมือ SSL ของ Conscrypt โดยค่าเริ่มต้น
การติดตั้งใช้งาน SSLSocket
เริ่มต้นของ Android อิงตาม Conscrypt
ตั้งแต่ Android 11 การใช้งานดังกล่าวได้รับการสร้างขึ้นภายใน
โดยอิงตาม SSLEngine
ของ Conscrypt
ตัวจัดสรรที่เสริมความแข็งแกร่งของ Scudo
Android 11 ใช้
ตัวจัดสรรที่เสริมความแข็งแกร่งของ Scudo
ภายในเพื่อให้บริการการจัดสรรฮีป 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
เรากำหนดขีดจำกัดเพื่อให้กรณีการใช้งานที่ถูกต้องตามกฎหมายไม่ได้รับผลกระทบ
เครื่องฆ่าเชื้อตัวบอกไฟล์ (fdsan)
Android 10 ได้เปิดตัว fdsan
(ตัวทำความสะอาดตัวบอกไฟล์)
fdsan
ตรวจพบการจัดการความเป็นเจ้าของตัวอธิบายไฟล์อย่างไม่เหมาะสม เช่น
use-after-close และ double-close โหมดเริ่มต้นสำหรับ 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 ก็จะยังเข้าถึง Content
URI ได้ แอปของคุณต้องมีค่าสถานะ Intent แม้ว่า URI ของเนื้อหาจะ
เชื่อมโยงกับผู้ให้บริการเนื้อหาที่แอปของคุณไม่ได้เป็นเจ้าของก็ตาม
หากแอปของคุณเป็นเจ้าของ Content Provider ที่เชื่อมโยงกับ URI ของเนื้อหา ให้ตรวจสอบว่าContent Provider ไม่ได้ ส่งออก เราขอแนะนำแนวทางปฏิบัติแนะนำด้านความปลอดภัยนี้อยู่แล้ว
กำลังโหลดคลัง
กำลังโหลดไลบรารีทั่วไปของ ICU ด้วยเส้นทางแบบสัมบูรณ์
แอปที่กำหนดเป้าหมายเป็น API 28 และต่ำกว่าจะใช้ dlopen(3)
เพื่อโหลด libicuuc
ด้วยเส้นทางแบบสัมบูรณ์ "/system/lib/libicuuc.so" ไม่ได้ สำหรับแอปเหล่านั้น dlopen("/system/lib/libicuuc.so", ...)
จะแสดงผลเป็นแฮนเดิลที่ไม่มีค่า
แต่หากต้องการโหลดไลบรารี โปรดใช้ชื่อไลบรารีเป็นชื่อไฟล์ เช่น dlopen("libicuuc.so", ...)