แพลตฟอร์ม 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
Starting from Android 14, the Android Bluetooth stack more strictly adheres to
Version 5.2 of the Bluetooth Core Specification and requests
the BLE ATT MTU to 517 bytes when the first GATT client requests an MTU using
the BluetoothGatt#requestMtu(int) API, and disregards all subsequent MTU
requests on that ACL connection.
To address this change and make your app more robust, consider the following options:
- Your peripheral device should respond to the Android device's MTU request
with a reasonable value that can be accommodated by the peripheral. The
final negotiated value will be a minimum of the Android requested value and
the remote provided value (for example,
min(517, remoteMtu))- Implementing this fix could require a firmware update for peripheral
- Alternatively, limit your GATT characteristic writes based on the minimum
between the known supported value of your peripheral and the received MTU
change
- A reminder that you should reduce 5 bytes from the supported size for the headers
- For example:
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() ใหม่ในอุปกรณ์ที่เข้ากันได้ เพื่อให้อุปกรณ์ต่างๆ ทำงานร่วมกันได้อย่างสอดคล้องกันมากขึ้น
ระบบบังคับใช้การใช้ทรัพยากรของแอปที่แคชไว้
By design, an app's process is in a cached state when it's moved to the
background and no other app process components are running. Such an app process
is subject to being killed due to system memory pressure. Any work that
Activity instances perform after the onStop() method has been called and
returned, while in this state, is unreliable and strongly discouraged.
Android 14 introduces consistency and enforcement to this design. Shortly after an app process enters a cached state, background work is disallowed, until a process component re-enters an active state of the lifecycle.
Apps that use typical framework-supported lifecycle APIs – such as
services, JobScheduler, and Jetpack WorkManager – shouldn't be
impacted by these changes.
ประสบการณ์ของผู้ใช้
การเปลี่ยนแปลงวิธีที่ผู้ใช้ได้รับประสบการณ์การแจ้งเตือนที่ปิดไม่ได้
If your app shows non-dismissable foreground notifications to users, Android 14 has changed the behavior to allow users to dismiss such notifications.
This change applies to apps that prevent users from dismissing foreground
notifications by setting Notification.FLAG_ONGOING_EVENT through
Notification.Builder#setOngoing(true) or
NotificationCompat.Builder#setOngoing(true). The behavior of
FLAG_ONGOING_EVENT has changed to make such notifications actually
dismissable by the user.
These kinds of notifications are still non-dismissable in the following conditions:
- When the phone is locked
- If the user selects a Clear all notification action (which helps with accidental dismissals)
Also, this new behavior doesn't apply to notifications in the following use cases:
CallStylenotifications- Device policy controller (DPC) and supporting packages for enterprise
- Media notifications
- The default Search Selector package
ข้อมูลความปลอดภัยของข้อมูลจะมองเห็นได้ชัดเจนยิ่งขึ้น
Android 14 จะเพิ่มจำนวนตำแหน่งที่ระบบแสดงข้อมูลที่คุณประกาศไว้ในแบบฟอร์ม Play Console เพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้ ปัจจุบันผู้ใช้ดูข้อมูลนี้ได้ในส่วนความปลอดภัยของข้อมูลในข้อมูลผลิตภัณฑ์ของแอปใน Google Play
เราขอแนะนำให้คุณอ่านนโยบายการแชร์ข้อมูลตำแหน่งของแอปและใช้เวลาสักครู่เพื่อทำการอัปเดตที่เกี่ยวข้องในส่วนความปลอดภัยของข้อมูล Google Play ของแอป
ดูข้อมูลเพิ่มเติมในคำแนะนำเกี่ยวกับวิธีทำให้ข้อมูลความปลอดภัยของข้อมูลปรากฏขึ้นอย่างชัดเจนมากขึ้นใน Android 14
การช่วยเหลือพิเศษ
การปรับขนาดแบบอักษรที่ไม่ใช่แบบเชิงเส้นเป็น 200%
ตั้งแต่ Android 14 เป็นต้นไป ระบบจะรองรับการปรับขนาดแบบอักษรได้สูงสุด 200% เพื่อให้ผู้ใช้มีตัวเลือกการช่วยเหลือพิเศษเพิ่มเติม
หากคุณใช้หน่วยพิกเซลที่รองรับการปรับขนาด (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 กรองระดับการมองเห็นแพ็กเกจเพื่อวัตถุประสงค์ด้านความเป็นส่วนตัว