Thay đổi về hành vi: tất cả ứng dụng

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

Trước đây, Android chỉ hỗ trợ kích thước trang bộ nhớ 4 KB, vốn có tối ưu hoá hiệu suất bộ nhớ hệ thống cho tổng dung lượng bộ nhớ trung bình Các thiết bị Android thường có. Kể từ Android 15, AOSP hỗ trợ các thiết bị được định cấu hình để sử dụng kích thước trang là 16 KB (16 KB thiết bị). Nếu ứng dụng của bạn dùng thư viện NDK, hãy trực tiếp hoặc gián tiếp thông qua SDK, thì bạn sẽ phải tạo lại ứng dụng để hoạt động trên các thiết bị 16 KB này.

Khi nhà sản xuất thiết bị tiếp tục tạo ra các thiết bị có số lượng lớn bộ nhớ vật lý (RAM), nhiều thiết bị trong số này sẽ sử dụng 16 KB (và lớn hơn) để tối ưu hoá hiệu suất của thiết bị. Đang thêm khả năng hỗ trợ các thiết bị có kích thước trang 16 KB cho phép ứng dụng của bạn chạy trên trên thiết bị và giúp ứng dụng của bạn hưởng lợi từ hiệu suất tương ứng. các điểm cải tiến khác. Nếu không biên dịch lại, các ứng dụng có thể không hoạt động trên các thiết bị 16 KB khi chúng được sản xuất trong các bản phát hành Android sau này.

Để giúp bạn tăng cường hỗ trợ cho ứng dụng của mình, chúng tôi đã cung cấp hướng dẫn về cách kiểm tra nếu ứng dụng của bạn bị ảnh hưởng thì làm cách nào để xây dựng lại ứng dụng (nếu có) và cách kiểm thử ứng dụng trong môi trường 16 KB bằng trình mô phỏng (bao gồm cả Android 15) hình ảnh hệ thống cho Trình mô phỏng Android).

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:

  1. Your app must be assigned as the default launcher app for the device—that is, possessing the ROLE_HOME role.
  2. 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:

  1. 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.
  2. The user must be able to hide and show the private space container.
  3. The user must be able to lock and unlock the private space container. Use the requestQuietModeEnabled() method to lock (by passing true) or unlock (by passing false) the private space.
  4. 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 and ACTION_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 include EXTRA_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 cũ, dựa trên PNG (NotoColorEmojiLegacy.ttf) đã bị xoá, chỉ còn 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 của 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 giữ lại 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 các tệp tham chiếu đến tệp NotoColorEmojiLegacy.ttf trong mã của ứng dụng.

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 thành một Canvas được hỗ trợ bitmap và sử dụng văn bản đó để 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. Thư viện nguồn mở FreeType hỗ trợ COLRv1 ở phiên bản 2.13.0 trở lên.
  • Trong trường hợp cuối cùng, 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, 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. Để biết thêm thông tin, hãy xem trang dự án GitHub của biểu tượng cảm xúc 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 tải xuống âm thanh 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 trực tiếp hoặc phát âm thanh 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 phát trực tiếp hoặc phát tải xuống và đạt đến giới hạn tài nguyên, hệ thống sẽ vô hiệu hoá mọi đối tượng AudioTrack đang mở để ngăn việc thực hiện yêu cầu bản nhạc mới.

(Các kênh âm thanh trực tiếp và tải xuống thường được mở để phát các định dạng âm thanh nén. Các trường hợp sử dụng phổ biến để phát âm thanh trực tiếp bao gồm truyền trực tuyến âm thanh đã mã hoá qua HDMI đến TV. Các bản nhạc tải xuống thường được 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 của 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

Beginning in Android 15, the developer option for predictive back animations has been removed. System animations such as back-to-home, cross-task, and cross-activity now appear for apps that have opted in to the predictive back gesture either entirely or at an activity level. If your app is affected, take the following actions:

  • Ensure that your app has been properly migrated to use the predictive back gesture.
  • Ensure that your fragment transitions work with predictive back navigation.
  • Migrate away from animation and framework transitions and use animator and androidx transitions instead.
  • Migrate away from back stacks that FragmentManager doesn't know about. Use back stacks managed by FragmentManager or by the Navigation component instead.

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.

For apps running on devices with Android 15 QPR1 or higher, a status bar chip that is large and prominent alerts users to any in‑progress screen projection. Users can tap the chip to stop their screen from being shared, cast, or recorded. Also, screen projection automatically stops when the device screen is locked.

Khối thanh trạng thái để chia sẻ màn hình, truyền và ghi.

Check if your app is impacted

By default, your app includes the status bar chip and automatically suspends screen projection when the lock screen activates.

To learn more about how to test your app for these use cases, see Status bar chip and auto stop.

Hạn chế quyền truy cập mạng ở chế độ nền

In Android 15, apps that start a network request outside of a valid process lifecycle receive an exception. Typically, an UnknownHostException or other socket-related IOException. Network requests that happen outside of a valid lifecycle are usually due to apps unknowingly continuing a network request even after the app is no longer active.

To mitigate this exception, ensure your network requests are lifecycle aware and cancelled upon leaving a valid process lifecycle by using lifecycle aware components. If it is important that the network request should happen even when the user leaves the application, consider scheduling the network request using WorkManager or continue a user visible task using Foreground Service.

Ngừng sử dụng

Với mỗi bản phát hành, một số API Android cụ thể có thể trở nên lỗi thời 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ẽ tiếp tục đượ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.