行為變更:所有應用程式

Android 15 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion 為何,當應用程式在 Android 15 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。

另請務必查看僅對指定 Android 15 為目標版本的應用程式造成影響的行為變更

核心功能

Android 15 修改或擴充了 Android 系統的各種核心功能。

套件停止狀態的變更

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.

支援 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 won't work on 16 KB devices 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

Devices configured with 16 KB page sizes use slightly more memory on average, but also gain various performance improvements for both the system and apps:

  • Lower app launch times while the system is under memory pressure: 3.16% lower on average, with more significant improvements (up to 30%) for some apps that we tested
  • Reduced power draw during app launch: 4.56% reduction on average
  • Faster camera launch: 4.48% faster hot starts on average, and 6.60% faster cold starts on average
  • Improved system boot time: improved by 8% (approximately 950 milliseconds) on average

These improvements are based on our initial testing, and results on actual devices will likely differ. We'll provide additional analysis of potential gains for apps as we continue our testing.

Check if your app is impacted

If your app uses any native code, then you should rebuild your app with support for 16 KB devices. If you are unsure if your app uses native code, you can use the APK Analyzer to identify whether any native code is present and then check the alignment of ELF segments for any shared libraries that you find. Android Studio also provides features that help you to automatically detect alignment issues.

If your app only uses code written in the Java programming language or in Kotlin, including all libraries or SDKs, then your app already supports 16 KB devices. Nevertheless, we recommend that you test your app in a 16 KB environment to verify that there are no unexpected regressions in app behavior.

部分應用程式必須進行變更,才能支援私人空間

私人空間是 Android 15 的新功能,可讓使用者在裝置上建立獨立空間,在額外的驗證機制下,隱藏敏感應用程式,防止他人查看。由於私人空間中的應用程式可見度受限,某些類型的應用程式需要採取額外步驟,才能查看及與使用者私人空間中的應用程式互動。

所有應用程式

由於私人空間中的應用程式會保存在獨立的使用者資料夾中 (類似工作資料夾),因此應用程式不應假設任何未位於主要資料夾中的應用程式副本,都位於工作資料夾中。如果您的應用程式包含與工作資料夾應用程式相關的邏輯,且會做出這項假設,您就需要調整這項邏輯。

醫療應用程式

使用者鎖定私人空間後,私人空間中的所有應用程式都會停止,這些應用程式無法執行前景或背景活動,包括顯示通知。這項行為可能會嚴重影響安裝在私人空間中的醫療應用程式使用方式和功能。

私人空間設定體驗會警告使用者,私人空間不適用於需要執行重要前景或背景活動的應用程式,例如顯示醫療應用程式通知。不過,應用程式無法判斷是否在私人空間中使用,因此無法針對這種情況向使用者顯示警告。

基於這些原因,如果您開發醫療應用程式,請查看這項功能可能對應用程式造成的影響,並採取適當行動,例如告知使用者不要在私人空間安裝應用程式,以免中斷重要應用程式功能。

啟動器應用程式

如果您要開發啟動器應用程式,則必須先執行下列操作,才能顯示私人空間中的應用程式:

  1. 您的應用程式必須指派為裝置的預設啟動器應用程式,也就是擁有 ROLE_HOME 角色。
  2. 應用程式必須在應用程式的資訊清單檔案中宣告 ACCESS_HIDDEN_PROFILES 一般權限。

宣告 ACCESS_HIDDEN_PROFILES 權限的啟動器應用程式必須處理下列私人空間用途:

  1. 您的應用程式必須有獨立的啟動器容器,用於安裝在私人空間中的應用程式。使用 getLauncherUserInfo() 方法,判斷要處理哪種類型的使用者設定檔。
  2. 使用者必須能夠隱藏及顯示私人空間容器。
  3. 使用者必須能夠鎖定及解鎖私人空間容器。使用 requestQuietModeEnabled() 方法鎖定 (傳遞 true) 或解鎖 (傳遞 false) 私人空間。
  4. 在鎖定狀態下,私人空間容器中的應用程式不得顯示或透過搜尋等機制發現。應用程式應為 ACTION_PROFILE_AVAILABLEACTION_PROFILE_UNAVAILABLE 廣播訊息註冊接收器,並在私人空間容器的鎖定或解鎖狀態變更時更新應用程式中的 UI。這兩種廣播都包含 EXTRA_USER,可讓應用程式參照私人設定檔使用者。

    您也可以使用 isQuietModeEnabled() 方法,檢查私人空間設定檔是否已鎖定。

應用程式商店應用程式

私人空間包含「安裝應用程式」按鈕,可啟動隱含意圖,將應用程式安裝至使用者的私人空間。為了讓應用程式接收這項隱含意圖,請在應用程式資訊清單檔案中宣告 <intent-filter>,並使用 CATEGORY_APP_MARKET<category>

移除以 PNG 為基礎的表情符號字型

The legacy, PNG-based emoji font file (NotoColorEmojiLegacy.ttf) has been removed, leaving just the vector-based file. Beginning with Android 13 (API level 33), the emoji font file used by the system emoji renderer changed from a PNG-based file to a vector based file. The system retained the legacy font file in Android 13 and 14 for compatibility reasons, so that apps with their own font renderers could continue to use the legacy font file until they were able to upgrade.

To check if your app is affected, search your app's code for references to the NotoColorEmojiLegacy.ttf file.

You can choose to adapt your app in a number of ways:

  • Use platform APIs for text rendering. You can render text to a bitmap-backed Canvas and use that to get a raw image if necessary.
  • Add COLRv1 font support to your app. The FreeType open source library supports COLRv1 in version 2.13.0 and higher.
  • As a last resort, you can bundle the legacy emoji font file (NotoColorEmoji.ttf) into your APK, although in that case your app will be missing the latest emoji updates. For more information, see the Noto Emoji GitHub project page.

目標 SDK 最低版本從 23 提高至 24

Android 15 builds on the the changes that were made in Android 14 and extends this security further. In Android 15, apps with a targetSdkVersion lower than 24 can't be installed. Requiring apps to meet modern API levels helps to ensure better security and privacy.

Malware often targets lower API levels in order to bypass security and privacy protections that have been introduced in higher 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 15 change makes it harder for malware to avoid security and privacy improvements. Attempting to install an app targeting a lower API level results in an installation failure, with a message like the following one appearing in Logcat:

INSTALL_FAILED_DEPRECATED_SDK_VERSION: App package must target at least SDK version 24, but found 7

On devices upgrading to Android 15, any apps with a targetSdkVersion lower than 24 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

安全性和隱私權

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.

相機和媒體

Android 15 對所有應用程式的相機和媒體行為進行下列變更。

如果達到資源限制,直接和卸載音訊播放作業會使先前開啟的直接或卸載音軌失效

Before Android 15, if an app requested direct or offload audio playback while another app was playing audio and the resource limits were reached, the app would fail to open a new AudioTrack.

Beginning with Android 15, when an app requests direct or offload playback and the resource limits are reached, the system invalidates any currently open AudioTrack objects which prevent fulfilling the new track request.

(Direct and offload audio tracks are typically opened for playback of compressed audio formats. Common use-cases for playing direct audio include streaming encoded audio over HDMI to a TV. Offload tracks are typically used to play compressed audio on a mobile device with hardware DSP acceleration.)

使用者體驗和系統 UI

Android 15 包含一些變更,旨在打造更一致、直覺的使用者體驗。

為已選擇加入的應用程式啟用預測返回動畫

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.

使用者強制停止應用程式時,小工具會停用

如果使用者在搭載 Android 15 的裝置上強制停止應用程式,系統會暫時停用所有應用程式小工具。小工具會顯示為灰色,使用者無法與其互動。這是因為從 Android 15 開始,系統會在應用程式強制停止時取消所有應用程式的待處理意圖。

系統會在使用者下次啟動應用程式時,重新啟用這些小工具。

詳情請參閱「套件停止狀態的變更」。

媒體投影狀態列晶片會提醒使用者分享螢幕畫面、投放及錄製畫面

螢幕投影漏洞會洩漏使用者的私人資料,例如財務資訊,因為使用者不會察覺自己的裝置螢幕正在分享。

如果應用程式在搭載 Android 15 QPR1 以上版本的裝置上執行,狀態列的方塊會以大而醒目的方式,提醒使用者任何進行中的螢幕投影作業。使用者可以輕觸方塊,停止分享、投放或錄製螢幕畫面。此外,裝置螢幕鎖定時,螢幕投放功能也會自動停止。

用於螢幕分享、投放和錄製的狀態列方塊。

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.

背景網路存取權限制

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.

淘汰項目

每次發布新版本時,特定 Android API 可能會過時,或需要重構,才能提供更優質的開發人員體驗或支援新的平台功能。在這種情況下,我們會正式淘汰舊版 API,並引導開發人員改用其他 API。

淘汰表示我們已終止對 API 的官方支援,但開發人員仍可繼續使用。如要進一步瞭解 Android 這個版本的重要淘汰項目,請參閱淘汰項目頁面