แพลตฟอร์ม Android 14 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทำงานใน Android 14 ไม่ว่าจะtargetSdkVersion
คุณควรทดสอบแอปแล้วแก้ไขตามความจำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสม หากมี
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android 14 เท่านั้นด้วย
ฟังก์ชันหลัก
ระบบจะปฏิเสธการตั้งเวลาการปลุกในเวลาที่แน่นอนโดยค่าเริ่มต้น
การปลุกในเวลาที่แน่นอนมีไว้สำหรับการแจ้งเตือนที่ผู้ใช้ตั้งใจให้แสดง หรือสําหรับการดําเนินการที่จำเป็นต้องเกิดขึ้นในเวลาที่แน่นอน ตั้งแต่ Android 14 เป็นต้นไป ระบบจะไม่ให้สิทธิ์ SCHEDULE_EXACT_ALARM
ล่วงหน้าแก่แอปที่ติดตั้งใหม่ส่วนใหญ่ซึ่งกำหนดเป้าหมายเป็น Android 13 ขึ้นไปอีกต่อไป โดยระบบจะปฏิเสธสิทธิ์ดังกล่าวโดยค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงสิทธิ์ในการตั้งเวลาการปลุกที่แน่นอน
ระบบจะจัดคิวการออกอากาศที่ลงทะเบียนตามบริบทขณะแคชแอป
ใน Android 14 ระบบจะดำเนินการต่อไปนี้ได้ วางการออกอากาศที่ลงทะเบียนตามบริบทไว้ในคิวขณะที่แอป อยู่ในสถานะแคช ส่วนนี้คล้ายกับการจัดคิว ลักษณะการทำงานที่ Android 12 (API ระดับ 31) นำมาใช้กับ Binder ที่ไม่พร้อมกัน ธุรกรรม การออกอากาศที่ประกาศในไฟล์ Manifest ไม่ได้อยู่ในคิวและจะนำแอปออก จากสถานะแคชสำหรับส่งการออกอากาศ
เมื่อแอปออกจากสถานะที่แคชไว้ เช่น การกลับไปยังเบื้องหน้า ระบบจะส่งการออกอากาศที่อยู่ในคิว การออกอากาศบางรายการแต่ละครั้ง อาจรวมกันเป็นการออกอากาศเดียว ขึ้นอยู่กับปัจจัยอื่นๆ เช่น ระบบ ประสิทธิภาพการทำงาน แอปอาจถูกนำออกจากสถานะแคชและแอปทั้งหมดที่อยู่ในคิวก่อนหน้านี้ ส่งการบรอดแคสต์ข้อความแล้ว
แอปจะหยุดเฉพาะกระบวนการเบื้องหลังของตนเองได้
Starting in Android 14, when your app calls killBackgroundProcesses()
,
the API can kill only the background processes of your own app.
If you pass in the package name of another app, this method has no effect on that app's background processes, and the following message appears in Logcat:
Invalid packageName: com.example.anotherapp
Your app shouldn't use the killBackgroundProcesses()
API or otherwise attempt
to influence the process lifecycle of other apps, even on older OS versions.
Android is designed to keep cached apps in the background and kill them
automatically when the system needs memory. If your app kills other apps
unnecessarily, it can reduce system performance and increase battery consumption
by requiring full restarts of those apps later, which takes significantly more
resources than resuming an existing cached app.
ระบบตั้งค่า 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 เป้าหมายที่ติดตั้งได้ขั้นต่ำ
Starting with Android 14, apps with a
targetSdkVersion
lower than 23
can't be installed. Requiring apps to meet these minimum target API level
requirements improves security and privacy for users.
Malware often targets older API levels in order to bypass security and privacy
protections that have been introduced in newer Android versions. For example,
some malware apps use a targetSdkVersion
of 22 to avoid being subjected to the
runtime permission model introduced in 2015 by Android 6.0 Marshmallow (API
level 23). This Android 14 change makes it harder for malware to avoid security
and privacy improvements.
Attempting to install an app targeting a lower API level will result in an
installation failure, with the following message appearing in Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 23, but found 7
On devices upgrading to Android 14, any apps with a targetSdkVersion
lower
than 23 will remain installed.
If you need to test an app targeting an older API level, use the following ADB command:
adb install --bypass-low-target-sdk-block FILENAME.apk
ชื่อแพ็กเกจของเจ้าของสื่ออาจถูกปกปิด
ที่จัดเก็บสื่อรองรับการค้นหาคอลัมน์ OWNER_PACKAGE_NAME
ซึ่งบ่งชี้แอปที่จัดเก็บไฟล์สื่อหนึ่งๆ ตั้งแต่ Android 14 เป็นต้นไป ระบบจะปกปิดค่านี้ เว้นแต่ว่าเงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะเป็นจริง
- แอปที่จัดเก็บไฟล์สื่อจะมีชื่อแพ็กเกจที่แสดงต่อแอปอื่นๆ เสมอ
แอปที่ค้นหาที่เก็บสื่อจะขอสิทธิ์
QUERY_ALL_PACKAGES
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่ Android กรองระดับการมองเห็นแพ็กเกจเพื่อวัตถุประสงค์ด้านความเป็นส่วนตัว