แพลตฟอร์ม Android 14 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทำงานบน Android 14 ไม่ว่าจะtargetSdkVersion
คุณควรทดสอบแอปแล้วแก้ไขตามความจำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสม หากมี
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กําหนดเป้าหมายเป็น Android 14 เท่านั้นด้วย
ฟังก์ชันหลัก
ระบบจะปฏิเสธการตั้งเวลาปลุกในเวลาที่แน่นอนโดยค่าเริ่มต้น
การปลุกในเวลาที่แน่นอนมีไว้สำหรับการแจ้งเตือนที่ผู้ใช้ตั้งใจให้แสดง หรือสําหรับการดําเนินการที่จำเป็นต้องเกิดขึ้นในเวลาที่แน่นอน ตั้งแต่ Android 14 เป็นต้นไป ระบบจะไม่ให้สิทธิ์ SCHEDULE_EXACT_ALARM
ล่วงหน้าแก่แอปที่ติดตั้งใหม่ส่วนใหญ่ซึ่งกำหนดเป้าหมายเป็น Android 13 ขึ้นไปอีกต่อไป โดยระบบจะปฏิเสธสิทธิ์ดังกล่าวโดยค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงสิทธิ์ในการตั้งเวลาการปลุกที่แน่นอน
ระบบจะจัดคิวการออกอากาศที่ลงทะเบียนตามบริบทขณะแคชแอป
ใน Android 14 ระบบจะดำเนินการต่อไปนี้ได้ วางการออกอากาศที่ลงทะเบียนตามบริบทไว้ในคิวขณะที่แอป อยู่ในสถานะแคช ส่วนนี้คล้ายกับการจัดคิว ลักษณะการทำงานที่ Android 12 (API ระดับ 31) นำมาใช้กับ Binder ที่ไม่พร้อมกัน ธุรกรรม การออกอากาศที่ประกาศในไฟล์ Manifest ไม่ได้อยู่ในคิวและจะนำแอปออก จากสถานะแคชสำหรับส่งการออกอากาศ
เมื่อแอปออกจากสถานะที่แคชไว้ เช่น การกลับไปยังเบื้องหน้า ระบบจะส่งการออกอากาศที่อยู่ในคิว การออกอากาศบางรายการแต่ละครั้ง อาจรวมกันเป็นการออกอากาศเดียว ขึ้นอยู่กับปัจจัยอื่นๆ เช่น ระบบ ประสิทธิภาพการทำงาน แอปอาจถูกนำออกจากสถานะแคชและแอปทั้งหมดที่อยู่ในคิวก่อนหน้านี้ ส่งการบรอดแคสต์ข้อความแล้ว
แอปจะหยุดเฉพาะกระบวนการเบื้องหลังของตนเองได้
ตั้งแต่ Android 14 เมื่อแอปเรียกใช้ killBackgroundProcesses()
API จะยุติเฉพาะกระบวนการเบื้องหลังของแอปของคุณเองเท่านั้น
หากคุณส่งชื่อแพ็กเกจของแอปอื่น เมธอดนี้จะไม่มีผลกับกระบวนการเบื้องหลังของแอปนั้น และข้อความต่อไปนี้จะปรากฏใน Logcat
Invalid packageName: com.example.anotherapp
แอปของคุณไม่ควรใช้ killBackgroundProcesses()
API หรือพยายามที่จะส่งผลต่อวงจรกระบวนการของแอปอื่นๆ แม้ว่าจะใช้ในระบบปฏิบัติการเวอร์ชันเก่าก็ตาม
Android ออกแบบมาให้เก็บแอปที่แคชไว้ไว้ในเบื้องหลังและปิดแอปเหล่านั้นโดยอัตโนมัติเมื่อระบบต้องการหน่วยความจำ หากแอปของคุณปิดแอปอื่นๆ โดยไม่จำเป็น อาจทำให้ประสิทธิภาพของระบบลดลงและทำให้แบตเตอรี่หมดเร็วขึ้นเนื่องจากต้องรีสตาร์ทแอปเหล่านั้นอย่างเต็มรูปแบบในภายหลัง ซึ่งต้องใช้ทรัพยากรมากกว่าการกลับมาทำงานของแอปที่แคชไว้อยู่แล้ว
ระบบตั้งค่า MTU เป็น 517 สำหรับไคลเอ็นต์ GATT แรกที่ขอ MTU
ตั้งแต่ Android 14 เป็นต้นไป สแต็กบลูทูธของ Android จะปฏิบัติตามข้อกำหนดหลักของบลูทูธเวอร์ชัน 5.2 อย่างเคร่งครัดมากขึ้นและขอ MTU ของ BLE ATT เป็น 517 ไบต์เมื่อไคลเอ็นต์ GATT ตัวแรกขอ MTU โดยใช้ BluetoothGatt#requestMtu(int)
API และจะไม่สนใจคำขอ MTU ทั้งหมดในการเชื่อมต่อ ACL นั้น
หากต้องการรับมือกับการเปลี่ยนแปลงนี้และทำให้แอปมีประสิทธิภาพมากขึ้น ให้พิจารณาตัวเลือกต่อไปนี้
- อุปกรณ์ต่อพ่วงควรตอบสนองคำขอ MTU ของอุปกรณ์ Android ด้วยค่าที่เหมาะสมที่อุปกรณ์ต่อพ่วงรองรับ ค่าสุดท้ายที่ตกลงกันจะเป็นค่าต่ำสุดของค่าที่ Android ขอและค่าที่อุปกรณ์ระยะไกลระบุ (เช่น
min(517, remoteMtu)
)- การใช้การแก้ไขนี้อาจต้องมีการอัปเดตเฟิร์มแวร์ของอุปกรณ์ต่อพ่วง
- หรือจะจำกัดการเขียนลักษณะ GATT ตามค่าต่ำสุดระหว่างค่าที่รองรับซึ่งทราบของอุปกรณ์ต่อพ่วงกับการเปลี่ยนแปลง MTU ที่รับก็ได้
- โปรดทราบว่าคุณควรลดขนาดส่วนหัวลง 5 ไบต์จากขนาดที่รองรับ
- ตัวอย่างเช่น
arrayMaxLength = min(SUPPORTED_MTU, GATT_MAX_ATTR_LEN(517)) - 5
เหตุผลใหม่ที่แอปอาจถูกจัดให้อยู่ในที่เก็บข้อมูลสแตนด์บายที่ถูกจำกัด
Android 14 เพิ่มเหตุผลใหม่ที่แอปอาจถูกนำไปไว้ในที่เก็บข้อมูลสแตนด์บายที่ถูกจำกัด
งานของแอปทริกเกอร์ข้อผิดพลาด ANR หลายครั้งเนื่องจากหมดเวลาของเมธอด onStartJob
, onStopJob
หรือ onBind
(ดูJobScheduler เสริมการทำงานแบบคอลแบ็กและเครือข่ายสำหรับการเปลี่ยนแปลงใน onStartJob
และ onStopJob
)
หากต้องการติดตามว่าแอปเข้าสู่ที่เก็บข้อมูลสแตนด์บายที่จํากัดหรือไม่ เราขอแนะนําให้บันทึกด้วย API UsageStatsManager.getAppStandbyBucket()
เมื่อเรียกใช้งาน หรือ UsageStatsManager.queryEventsForSelf()
เมื่อเริ่มต้นแอป
mlock จํากัดไว้ที่ 64 KB
ใน Android 14 (API ระดับ 34) ขึ้นไป แพลตฟอร์มจะลดหน่วยความจําสูงสุดที่ล็อกได้โดยใช้ mlock()
เหลือ 64 KB ต่อกระบวนการ ในเวอร์ชันก่อนหน้านี้ ขีดจำกัดคือ 64 MB ต่อกระบวนการ ข้อจำกัดนี้จะช่วยจัดการหน่วยความจำในแอปและระบบได้ดียิ่งขึ้น Android 14 เพิ่มการทดสอบ CTS ใหม่สำหรับขีดจำกัด mlock()
ใหม่ในอุปกรณ์ที่เข้ากันได้ เพื่อให้อุปกรณ์ต่างๆ ทำงานร่วมกันได้อย่างสอดคล้องกันมากขึ้น
ระบบบังคับใช้การใช้ทรัพยากรของแอปที่แคชไว้
ตามการออกแบบ กระบวนการของแอปจะอยู่ในสถานะแคชเมื่อย้ายไปยังเบื้องหลังและไม่มีคอมโพเนนต์กระบวนการแอปอื่นๆ ทำงานอยู่ กระบวนการของแอปดังกล่าวอาจถูกหยุดเนื่องจากหน่วยความจําของระบบมีไม่เพียงพอ งานใดก็ตามที่อินสแตนซ์ Activity
ดำเนินการหลังจากเรียกใช้และได้ผลลัพธ์จากเมธอด onStop()
ขณะอยู่ในสถานะนี้จะไม่เสถียรและไม่แนะนำอย่างยิ่ง
Android 14 เปิดตัวการออกแบบนี้อย่างสม่ำเสมอและบังคับใช้ หลังจากกระบวนการของแอปเข้าสู่สถานะแคชไม่นาน ระบบจะไม่อนุญาตให้ทำงานในเบื้องหลังจนกว่าคอมโพเนนต์กระบวนการจะเข้าสู่สถานะ "ทำงานอยู่" ของวงจรอีกครั้ง
แอปที่ใช้ API วงจรชีวิตของเฟรมเวิร์กทั่วไป เช่น services, JobScheduler
และ Jetpack WorkManager ไม่ควรได้รับผลกระทบจากการเปลี่ยนแปลงเหล่านี้
ประสบการณ์ของผู้ใช้
การเปลี่ยนแปลงประสบการณ์ของผู้ใช้เกี่ยวกับการแจ้งเตือนที่ปิดไม่ได้
หากแอปแสดงการแจ้งเตือนที่ไม่สามารถปิดได้ในเบื้องหน้าต่อผู้ใช้ Android 14 ได้เปลี่ยนแปลงลักษณะการทํางานเพื่อให้ผู้ใช้ปิดการแจ้งเตือนดังกล่าวได้
การเปลี่ยนแปลงนี้มีผลกับแอปที่ป้องกันไม่ให้ผู้ใช้ปิดการแจ้งเตือนที่แสดงอยู่เบื้องหน้าโดยการตั้งค่า Notification.FLAG_ONGOING_EVENT
ผ่าน Notification.Builder#setOngoing(true)
หรือ NotificationCompat.Builder#setOngoing(true)
ลักษณะการทำงานของ
FLAG_ONGOING_EVENT
ได้ทำการเปลี่ยนแปลงเพื่อแสดงการแจ้งเตือนดังกล่าวจริงๆ
โดยผู้ใช้ปิดได้
คุณจะยังคงปิดการแจ้งเตือนประเภทนี้ไม่ได้ในกรณีต่อไปนี้ เงื่อนไข:
- เมื่อโทรศัพท์ล็อกอยู่
- หากผู้ใช้เลือกการดำเนินการแจ้งเตือนล้างทั้งหมด (ซึ่งช่วย การปิดโดยไม่ตั้งใจ)
นอกจากนี้ ลักษณะการทำงานแบบใหม่นี้จะไม่มีผลกับการแจ้งเตือนใน กรณีการใช้งานต่อไปนี้
- การแจ้งเตือน
CallStyle
รายการ - เครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) และแพ็กเกจสนับสนุนสำหรับองค์กร
- การแจ้งเตือนสื่อ
- แพ็กเกจตัวเลือกการค้นหาเริ่มต้น
ข้อมูลความปลอดภัยของข้อมูลปรากฏให้เห็นมากขึ้น
Android 14 จะเพิ่มจำนวนตำแหน่งที่ระบบแสดงข้อมูลที่คุณประกาศไว้ในแบบฟอร์ม Play Console เพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ปัจจุบันผู้ใช้ดูข้อมูลนี้ได้ในส่วนความปลอดภัยของข้อมูลในข้อมูลผลิตภัณฑ์ของแอปใน Google Play
เราขอแนะนำให้คุณอ่านนโยบายการแชร์ข้อมูลตำแหน่งของแอปและใช้เวลาสักครู่เพื่อทำการอัปเดตที่เกี่ยวข้องในส่วนความปลอดภัยของข้อมูล Google Play ของแอป
ดูข้อมูลเพิ่มเติมในคำแนะนำเกี่ยวกับวิธีทำให้ข้อมูลความปลอดภัยของข้อมูลปรากฏขึ้นอย่างชัดเจนมากขึ้นใน Android 14
การช่วยเหลือพิเศษ
การปรับขนาดแบบอักษรที่ไม่ใช่แบบเชิงเส้นเป็น 200%
ตั้งแต่ Android 14 เป็นต้นไป ระบบจะรองรับการปรับขนาดแบบอักษรได้สูงสุด 200% ซึ่งจะช่วยให้ผู้ใช้ที่มีสายตาเลือนรางมีตัวเลือกการช่วยเหลือพิเศษเพิ่มเติมที่สอดคล้องกับหลักเกณฑ์การช่วยเหลือพิเศษสำหรับเนื้อหาบนเว็บ (WCAG)
หากคุณใช้หน่วยพิกเซลที่ปรับขนาดได้ (sp) เพื่อกำหนดขนาดข้อความอยู่แล้ว การเปลี่ยนแปลงนี้อาจไม่ส่งผลมากนักต่อแอป อย่างไรก็ตาม คุณควรทำการทดสอบ UI โดยเปิดใช้ขนาดแบบอักษรสูงสุด (200%) เพื่อให้แน่ใจว่าแอปรองรับขนาดแบบอักษรที่ใหญ่ขึ้นโดยไม่ส่งผลกระทบต่อความสามารถในการใช้งาน
ความปลอดภัย
ระดับ API เป้าหมายที่ติดตั้งได้ขั้นต่ำ
ตั้งแต่ Android 14 เป็นต้นไป แอปที่มี targetSdkVersion
ต่ำกว่า 23 จะติดตั้งไม่ได้ การกำหนดให้แอปต้องใช้ระดับ API เป้าหมายขั้นต่ำเหล่านี้
ช่วยเพิ่มความปลอดภัยและความเป็นส่วนตัวให้ผู้ใช้
มัลแวร์มักกำหนดเป้าหมายเป็น API ระดับเก่าเพื่อหลีกเลี่ยงความปลอดภัยและความเป็นส่วนตัว
ที่เกิดขึ้นใน Android เวอร์ชันใหม่ ตัวอย่างเช่น
แอปมัลแวร์บางแอปใช้ targetSdkVersion
เป็น 22 เพื่อหลีกเลี่ยง
Android 6.0 Marshmallow (API) เปิดตัวโมเดลสิทธิ์รันไทม์ในปี 2015
ระดับ 23) การเปลี่ยนแปลงนี้ใน Android 14 ทำให้มัลแวร์หลบเลี่ยงการปรับปรุงด้านความปลอดภัยและความเป็นส่วนตัวได้ยากขึ้น
การพยายามติดตั้งแอปที่กำหนดเป้าหมายเป็น API ระดับต่ำกว่าจะทำให้การติดตั้งไม่สำเร็จ โดยมีข้อความต่อไปนี้ปรากฏใน Logcat
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
ในอุปกรณ์ที่อัปเกรดเป็น Android 14 แอปที่มี targetSdkVersion
ต่ำกว่า
มากกว่า 23 รายการจะยังคงติดตั้งต่อไป
หากต้องการทดสอบแอปที่กำหนดเป้าหมายเป็น API ระดับเก่า ให้ใช้คำสั่ง ADB ต่อไปนี้
adb install --bypass-low-target-sdk-block FILENAME.apk
ชื่อแพ็กเกจของเจ้าของสื่ออาจถูกปกปิด
ที่จัดเก็บสื่อรองรับการค้นหาคอลัมน์ OWNER_PACKAGE_NAME
ซึ่งบ่งชี้แอปที่จัดเก็บไฟล์สื่อหนึ่งๆ ตั้งแต่ Android 14 เป็นต้นไป ระบบจะปกปิดค่านี้ เว้นแต่ว่าเงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะเป็นจริง
- แอปที่จัดเก็บไฟล์สื่อจะมีชื่อแพ็กเกจที่แสดงต่อแอปอื่นๆ เสมอ
แอปที่ค้นหาที่เก็บสื่อจะขอสิทธิ์
QUERY_ALL_PACKAGES
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Android กรองระดับการมองเห็นแพ็กเกจเพื่อวัตถุประสงค์ด้านความเป็นส่วนตัว