แพลตฟอร์ม Android 14 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ
การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปทั้งหมดเมื่อทำงานบน Android 14 ไม่ว่าจะtargetSdkVersion
คุณควรทดสอบแอปแล้วแก้ไขตามที่จำเป็นเพื่อรองรับฟีเจอร์เหล่านี้อย่างเหมาะสม หากมี
โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่ส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android 14 เท่านั้นด้วย
ฟังก์ชันหลัก
ระบบจะปฏิเสธการตั้งปลุกในเวลาที่แน่นอนโดยค่าเริ่มต้น
Exact alarms are meant for user-intentioned notifications, or for actions that
need to happen at a precise time. Starting in Android 14, the
SCHEDULE_EXACT_ALARM
permission is no longer being pre-granted to most newly installed apps
targeting Android 13 and higher—the permission is denied by default.
Learn more about the changes to the permission for scheduling exact alarms.
ระบบจะจัดคิวการออกอากาศที่ลงทะเบียนตามบริบทขณะแคชแอป
在 Android 14 中,当应用处于缓存状态时,系统可以将上下文注册的广播放入队列中。这与 Android 12(API 级别 31)为异步 binder 事务引入的队列行为类似。在清单中声明的广播不会加入队列,并且应用会从缓存状态中移除以进行广播传递。
当应用离开缓存状态(例如返回前台)时,系统会传递所有已加入队列的广播。某些广播的多个实例 可能会合并为一个广播。取决于其他因素,如系统 运行状况,则可能会从缓存状态中移除应用,以及之前排队 广播。
แอปจะหยุดเฉพาะกระบวนการเบื้องหลังของตนเองได้
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()
ใหม่ในอุปกรณ์ที่เข้ากันได้ เพื่อให้อุปกรณ์ต่างๆ ทำงานร่วมกันได้อย่างสอดคล้องกันมากขึ้น
ระบบบังคับใช้การใช้ทรัพยากรของแอปที่แคชไว้
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.
ประสบการณ์ของผู้ใช้
การเปลี่ยนแปลงประสบการณ์ของผู้ใช้เกี่ยวกับการแจ้งเตือนที่ปิดไม่ได้
หากแอปแสดงการแจ้งเตือนที่ไม่สามารถปิดได้ในเบื้องหน้าต่อผู้ใช้ 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%
Starting in Android 14, the system supports font scaling up to 200%, providing low-vision users with additional accessibility options that align with Web Content Accessibility Guidelines (WCAG).
If you already use scaled pixels (sp) units to define text sizing, then this change probably won't have a high impact on your app. However, you should perform UI testing with the maximum font size enabled (200%) to ensure that your app can accommodate larger font sizes without impacting usability.
ความปลอดภัย
ระดับ 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 กรองระดับการมองเห็นแพ็กเกจเพื่อวัตถุประสงค์ด้านความเป็นส่วนตัว