Nền tảng Android 15 có các thay đổi về hành vi có thể ảnh hưởng đến ứng dụng của bạn. Những thay đổi về hành vi sau đây áp dụng cho tất cả ứng dụng chạy trên Android 15, bất kể targetSdkVersion
. Bạn nên kiểm thử ứng dụng rồi sửa đổi để hỗ trợ những thay đổi này cho phù hợp (nếu cần).
Ngoài ra, hãy nhớ tham khảo danh sách thay đổi về hành vi chỉ ảnh hưởng đến những ứng dụng nhắm đến Android 15.
Chức năng cốt lõi
Android 15 sửa đổi hoặc mở rộng nhiều chức năng cốt lõi của hệ thống Android.
Thay đổi trạng thái gói đã dừng
The intention of the package FLAG_STOPPED
state (which users
can engage in AOSP builds by long-pressing an app icon and selecting "Force
Stop") has always been to keep apps in this state until the user explicitly
removes the app from this state by directly launching the app or indirectly
interacting with the app (through the sharesheet or a widget, selecting the app
as live wallpaper, etc.). In Android 15, we've updated the behavior of the
system to be aligned with this intended behavior. Apps should only be removed
from the stopped state through direct or indirect user action.
To support the intended behavior, in addition to the existing restrictions, the
system also cancels all pending intents when the app enters the
stopped state on a device running Android 15. When the user's actions remove the
app from the stopped state, the ACTION_BOOT_COMPLETED
broadcast is delivered to the app providing an opportunity to re-register any
pending intents.
You can call the new
ApplicationStartInfo.wasForceStopped()
method to confirm whether the app was put into the stopped state.
Hỗ trợ kích thước trang 16 KB
Historically, Android has only supported 4 KB memory page sizes, which has optimized system memory performance for the average amount of total memory that Android devices have typically had. Beginning with Android 15, AOSP supports devices that are configured to use a page size of 16 KB (16 KB devices). If your app uses any NDK libraries, either directly or indirectly through an SDK, then you will need to rebuild your app for it to work on these 16 KB devices.
As device manufacturers continue to build devices with larger amounts of physical memory (RAM), many of these devices will adopt 16 KB (and eventually greater) page sizes to optimize the device's performance. Adding support for 16 KB page size devices enables your app to run on these devices and helps your app benefit from the associated performance improvements. Without recompiling, apps might not work on 16 KB devices when they are productionized in future Android releases.
To help you add support for your app, we've provided guidance on how to check if your app is impacted, how to rebuild your app (if applicable), and how to test your app in a 16 KB environment using emulators (including Android 15 system images for the Android Emulator).
Benefits and performance gains
Các thiết bị được định cấu hình với kích thước trang 16 KB sử dụng nhiều bộ nhớ hơn một chút trung bình, nhưng cũng có nhiều điểm cải tiến về hiệu suất cho cả hệ thống và ứng dụng:
- Giảm thời gian khởi chạy ứng dụng khi hệ thống chịu áp lực về bộ nhớ: Trung bình thấp hơn 3,16%, với mức cải thiện đáng kể hơn (lên đến 30%) đối với một số ứng dụng mà chúng tôi đã thử nghiệm
- Giảm mức tiêu thụ điện năng trong quá trình khởi chạy ứng dụng: trung bình giảm 4,56%
- Khởi động máy ảnh nhanh hơn: trung bình khởi động nóng nhanh hơn 4,48% và khởi động nguội nhanh hơn 6,60%
- Cải thiện thời gian khởi động hệ thống: trung bình cải thiện 8% (khoảng 950 mili giây)
Những cải tiến này dựa trên thử nghiệm ban đầu của chúng tôi và kết quả trên các thiết bị thực tế có thể sẽ khác. Chúng tôi sẽ phân tích thêm về những lợi ích có thể xảy ra đối với ứng dụng trong quá trình kiểm thử.
Check if your app is impacted
Nếu ứng dụng sử dụng bất kỳ mã gốc nào, thì bạn nên tạo lại ứng dụng để hỗ trợ các thiết bị 16 KB. Nếu không chắc chắn rằng ứng dụng của mình có sử dụng mã gốc hay không, bạn có thể sử dụng Công cụ phân tích APK để xác định xem có mã gốc nào hay không, sau đó kiểm tra việc căn chỉnh các phân đoạn ELF cho mọi thư viện dùng chung mà bạn tìm thấy.
Nếu ứng dụng chỉ sử dụng mã viết bằng ngôn ngữ lập trình Java hoặc Kotlin, bao gồm tất cả các thư viện hoặc SDK, thì ứng dụng đã hỗ trợ thiết bị 16 KB. Tuy nhiên, bạn nên kiểm thử ứng dụng trong môi trường 16 KB để xác minh rằng không có sự hồi quy không mong muốn nào trong hành vi của ứng dụng.
Những thay đổi bắt buộc đối với một số ứng dụng để hỗ trợ không gian riêng tư
Private space is a new feature in Android 15 that lets users create a separate space on their device where they can keep sensitive apps away from prying eyes, under an additional layer of authentication. Because apps in the private space have restricted visibility, some types of apps need to take additional steps to be able to see and interact with apps in a user's private space.
All apps
Because apps in the private space are kept in a separate user profile, similar to work profiles, apps shouldn't assume that any installed copies of their app that aren't in the main profile are in the work profile. If your app has logic related to work profile apps that make this assumption, you'll need to adjust this logic.
Medical apps
When a user locks the private space, all apps in the private space are stopped, and those apps can't perform foreground or background activities, including showing notifications. This behavior might critically impact the use and function of medical apps installed in the private space.
The private space setup experience warns users that the private space is not suitable for apps that need to perform critical foreground or background activities, such as showing notifications from medical apps. However, apps can't determine whether or not they're being used in the private space, so they can't show a warning to the user for this case.
For these reasons, if you develop a medical app, review how this feature might impact your app and take appropriate actions—such as informing your users not to install your app in the private space—to avoid disrupting critical app capabilities.
Launcher apps
If you develop a launcher app, you must do the following before apps in the private space will be visible:
- Your app must be assigned as the default launcher app for the device—that
is, possessing the
ROLE_HOME
role. - Your app must declare the
ACCESS_HIDDEN_PROFILES
normal permission in your app's manifest file.
Launcher apps that declare the ACCESS_HIDDEN_PROFILES
permission must handle
the following private space use cases:
- Your app must have a separate launcher container for apps installed in the
private space. Use the
getLauncherUserInfo()
method to determine which type of user profile is being handled. - The user must be able to hide and show the private space container.
- The user must be able to lock and unlock the private space container. Use
the
requestQuietModeEnabled()
method to lock (by passingtrue
) or unlock (by passingfalse
) the private space. While locked, no apps in the private space container should be visible or discoverable through mechanisms such as search. Your app should register a receiver for the
ACTION_PROFILE_AVAILABLE
andACTION_PROFILE_UNAVAILABLE
broadcasts and update the UI in your app when the locked or unlocked state of the private space container changes. Both of these broadcasts includeEXTRA_USER
, which your app can use to refer to the private profile user.You can also use the
isQuietModeEnabled()
method to check whether the private space profile is locked or not.
App store apps
The private space includes an "Install Apps" button that launches an implicit
intent to install apps into the user's private space. In order for your app to
receive this implicit intent, declare an <intent-filter>
in your app's manifest file with a <category>
of
CATEGORY_APP_MARKET
.
Xoá phông chữ biểu tượng cảm xúc dựa trên PNG
Tệp phông chữ biểu tượng cảm xúc dựa trên PNG cũ (NotoColorEmojiLegacy.ttf
) đã được
đã bị xoá mà chỉ để lại tệp dựa trên vectơ. Kể từ Android 13 (API)
cấp 33), tệp phông chữ biểu tượng cảm xúc mà trình kết xuất biểu tượng cảm xúc hệ thống sử dụng đã thay đổi từ
tệp dựa trên PNG thành tệp dựa trên vectơ. Hệ thống đã duy trì
tệp phông chữ cũ trong Android 13 và 14 vì lý do tương thích, để
các ứng dụng có trình kết xuất phông chữ riêng có thể tiếp tục sử dụng tệp phông chữ cũ
cho đến khi có thể nâng cấp.
Để kiểm tra xem ứng dụng của bạn có bị ảnh hưởng hay không, hãy tìm kiếm mã của ứng dụng để tham chiếu đến
Tệp NotoColorEmojiLegacy.ttf
.
Bạn có thể chọn điều chỉnh ứng dụng theo một số cách:
- Sử dụng API nền tảng để hiển thị văn bản. Bạn có thể kết xuất văn bản dưới dạng bitmap
Canvas
rồi sử dụng hình ảnh đó để lấy hình ảnh thô nếu cần. - Thêm tính năng hỗ trợ phông chữ COLRv1 vào ứng dụng của bạn. Thư viện nguồn mở FreeType hỗ trợ COLRv1 trong phiên bản 2.13.0 và cao hơn.
- Khi không còn cách nào khác, bạn có thể gói tệp phông chữ biểu tượng cảm xúc cũ
(
NotoColorEmoji.ttf
) vào APK của bạn, mặc dù trong trường hợp đó, ứng dụng của bạn sẽ thiếu các bản cập nhật biểu tượng cảm xúc mới nhất. Cho để biết thêm thông tin, hãy xem dự án GitHub về Emoji Noto .
Tăng phiên bản SDK mục tiêu tối thiểu từ 23 lên 24
Android 15 được xây dựng dựa trên
những thay đổi đã được thực hiện trong Android 14 và mở rộng
tăng cường bảo mật. Trong Android 15, ứng dụng có
Không thể cài đặt targetSdkVersion
thấp hơn 24.
Việc yêu cầu các ứng dụng đáp ứng các cấp độ API hiện đại giúp đảm bảo tính bảo mật và
quyền riêng tư.
Phần mềm độc hại thường nhắm đến các cấp độ API thấp hơn để né tránh tính bảo mật và quyền riêng tư
được giới thiệu trong các phiên bản Android cao hơn. Ví dụ: một số ứng dụng độc hại sử dụng targetSdkVersion
22 để tránh phải tuân theo mô hình quản lý quyền khi bắt đầu chạy ra mắt năm 2015 trên Android 6.0 Marshmallow (API cấp 23). Thay đổi này của Android 15 khiến phần mềm độc hại khó tránh được bảo mật hơn
và quyền riêng tư. Đang cố cài đặt một ứng dụng nhắm đến API thấp hơn
cấp độ dẫn đến lỗi cài đặt, với một thông báo như sau
xuất hiện trong Logcat:
INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7
Trên các thiết bị nâng cấp lên Android 15, mọi ứng dụng có targetSdkVersion
thấp hơn
vẫn còn cài đặt hơn 24.
Nếu cần kiểm thử một ứng dụng nhắm đến cấp độ API cũ hơn, hãy dùng lệnh ADB sau đây:
adb install --bypass-low-target-sdk-block FILENAME.apk
Bảo mật và quyền riêng tư
Android 15 introduces robust measures to combat one-time passcode (OTP) fraud and to protect the user's sensitive content, focusing on hardening the Notification Listener Service and screenshare protections. Key enhancements include redacting OTPs from notifications accessible to untrusted apps, hiding notifications during screenshare, and securing app activities when OTPs are posted. These changes aim to keep the user's sensitive content safe from unauthorized actors.
Developers need to be aware of the following to ensure their apps are compatible with the changes in Android 15:
OTP Redaction
Android will stop untrusted apps that implement a
NotificationListenerService
from reading unredacted content
from notifications where an OTP has been detected. Trusted apps such as
companion device manager associations are exempt from these restrictions.
Screenshare Protection
- Notification content is hidden during screen sharing sessions to preserve
the user's privacy. If the app implements
setPublicVersion()
, Android shows the public version of the notification which serves as a replacement notification in insecure contexts. Otherwise, the notification content is redacted without any further context. - Sensitive content like password input is hidden from remote viewers to prevent revealing the user's sensitive information.
- Activities from apps that post notifications during screenshare where an OTP has been detected will be hidden. App content is hidden from the remote viewer when launched.
- Beyond Android's automatic identification of sensitive fields, developers
can manually mark parts of their app as sensitive using
setContentSensitivity
, which is hidden from remote viewers during screenshare. - Developers can choose to toggle the Disable screen share protections option under Developer Options to be exempted from the screenshare protections for demo or testing purposes. The default system screen recorder is exempted from these changes, since the recordings remain on-device.
Máy ảnh và nội dung nghe nhìn
Android 15 thực hiện những thay đổi sau đây đối với hành vi của máy ảnh và nội dung nghe nhìn cho tất cả ứng dụng.
Tính năng phát trực tiếp và phát âm thanh khi tải xuống sẽ vô hiệu hoá các bản âm thanh trực tiếp hoặc bản âm thanh tải xuống đã mở trước đó khi đạt đến giới hạn tài nguyên
Trước Android 15, nếu một ứng dụng yêu cầu phát âm thanh trực tiếp hoặc giảm tải trong khi một ứng dụng khác đang phát âm thanh và đã đạt đến giới hạn tài nguyên, thì ứng dụng đó sẽ không mở được AudioTrack
mới.
Kể từ Android 15, khi một ứng dụng yêu cầu chế độ phát trực tiếp hoặc giảm tải và đạt đến giới hạn về tài nguyên, hệ thống sẽ vô hiệu hoá mọi đối tượng AudioTrack
đang mở do đó ngăn cản việc thực hiện yêu cầu theo dõi mới.
(Các bản âm thanh trực tiếp và giảm tải thường được mở để phát các định dạng âm thanh nén. Một số trường hợp sử dụng phổ biến để phát âm thanh trực tiếp: phát trực tuyến âm thanh được mã hoá qua HDMI đến TV. Các bản nhạc không tải thường dùng để phát âm thanh nén trên thiết bị di động có tính năng tăng tốc DSP phần cứng.)
Trải nghiệm người dùng và giao diện người dùng hệ thống
Android 15 có một số thay đổi nhằm tạo ra trải nghiệm người dùng nhất quán và trực quan hơn.
Bật ảnh động xem trước thao tác quay lại cho các ứng dụng đã chọn sử dụng
Kể từ Android 15, tuỳ chọn dành cho nhà phát triển đối với ảnh động xem trước thao tác quay lại đã bị xoá. Giờ đây, ảnh động hệ thống như quay lại màn hình chính, nhiều tác vụ và trên nhiều hoạt động sẽ xuất hiện cho các ứng dụng đã chọn sử dụng tính năng xem trước thao tác quay lại hoàn toàn hoặc ở cấp hoạt động. Nếu ứng dụng của bạn bị ảnh hưởng, hãy làm những việc sau:
- Đảm bảo rằng ứng dụng của bạn đã được di chuyển đúng cách để sử dụng cử chỉ xem trước thao tác quay lại.
- Đảm bảo rằng các hiệu ứng chuyển đổi mảnh hoạt động với tính năng điều hướng xem trước thao tác quay lại.
- Di chuyển khỏi các hiệu ứng chuyển động và khung, đồng thời sử dụng các hiệu ứng chuyển đổi ảnh động và androidx.
- Di chuyển khỏi các ngăn xếp lui mà
FragmentManager
không biết. Thay vào đó, hãy sử dụng các ngăn xếp lui doFragmentManager
quản lý hoặc bằng thành phần Điều hướng.
Tiện ích bị tắt khi người dùng buộc dừng một ứng dụng
If a user force-stops an app on a device running Android 15, the system temporarily disables all the app's widgets. The widgets are grayed out, and the user cannot interact with them. This is because beginning with Android 15, the system cancels all an app's pending intents when the app is force-stopped.
The system re-enables those widgets the next time the user launches the app.
For more information, see Changes to package stopped state.
Khối thanh trạng thái chiếu nội dung nghe nhìn cảnh báo người dùng về việc chia sẻ màn hình, truyền và ghi
Screen projection exploits expose private user data such as financial information because users don't realize their device screen is being shared. Android has until now shown screen cast and screen record icons on the status bar, but the icons are small and often overlooked. Also, stopping screen sharing or recording is cumbersome because controls are in Quick Settings.
Android 15 introduces a new status bar chip that is large and prominent, which should alert users to any in-progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded.
To provide an intuitive user experience, screen projection now automatically stops when the device screen is locked.
Benefits and performance gains
The new media projection status bar chip enhances the user experience as follows:
- Alerts users to in-progress screen sharing, casting, or recording
- Enable users to terminate screen projection by tapping the chip
Automatic suspension of screen projection when the device screen is locked ensures user privacy.
Check if your app is impacted
By default, your app includes the new status bar chip and automatically suspends
screen projection when the lock screen activates. Test your app by implementing
the
onStop()
method of the
MediaProjection.Callback
.
Verify that your app responds appropriately when the screen projection stops as
a result of the user tapping the status bar chip or when the lock screen
activates.
Ngừng sử dụng
Với mỗi bản phát hành, một số API Android cụ thể có thể không còn được dùng nữa hoặc cần được tái cấu trúc để mang lại trải nghiệm tốt hơn cho nhà phát triển hoặc hỗ trợ các tính năng mới của nền tảng. Trong những trường hợp này, chúng tôi chính thức ngừng sử dụng các API lỗi thời và hướng dẫn nhà phát triển sử dụng các API thay thế.
Ngừng hoạt động có nghĩa là chúng tôi đã chấm dứt việc hỗ trợ chính thức cho các API này, nhưng các API này sẽ vẫn được cung cấp cho nhà phát triển. Để tìm hiểu thêm về các tính năng đáng chú ý đã ngừng hoạt động trong bản phát hành Android này, hãy xem trang về các tính năng ngừng hoạt động.