行為變更:所有應用程式

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

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

核心功能

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

變更為套件已停止狀態

套件 FLAG_STOPPED 狀態的意圖 (使用者可以透過長按應用程式圖示並選取「強制停止」來啟用 AOSP 版本) 一向是讓應用程式維持在這個狀態,直到使用者透過直接啟動應用程式或間接與應用程式互動 (透過分享畫面或小工具,將應用程式選做動態桌布等) 明確將應用程式移除為止。在 Android 15 中,我們已更新系統行為,以符合這項預期行為。應用程式應僅透過直接或間接的使用者操作,從停止狀態移除。

為了支援預期的行為,除了現有的限制之外,當應用程式在執行 Android 15 的裝置上進入已停止狀態時,系統也會取消所有待處理意圖。當使用者的動作將應用程式從已停止狀態移除時,系統會將 ACTION_BOOT_COMPLETED 廣播傳送至應用程式,讓應用程式有機會重新註冊任何待處理的意圖。

您可以呼叫新的 ApplicationStartInfo.wasForceStopped() 方法,確認應用程式是否已進入停止狀態。

支援 16 KB 頁面大小

以往 Android 僅支援 4 KB 的記憶體頁面大小, 最佳化系統記憶體效能 通常 Android 裝置都有這樣的功能。從 Android 15 開始,Android 開放原始碼計畫會支援 已設定頁面大小為 16 KB (16 KB) 的裝置 裝置)。如果應用程式直接使用任何 NDK 程式庫 或者間接透過 SDK 來重建應用程式, 支援這些 16 KB 裝置

隨著裝置製造商持續開發數量更多 實體記憶體 (RAM),這類裝置中有許多 16 KB ( ,以便最佳化裝置效能。正在新增 網頁大小支援 16 KB 頁面大小的裝置,可讓您的應用程式在這些裝置上執行 ,有助應用程式享有相關效能 如未重新編譯,應用程式可能無法在 16 KB 裝置上運作 。

為協助您為應用程式添加支援服務,我們提供了指南說明 如果您的應用程式受到影響,您可以瞭解如何 重新建構應用程式 (如適用),以及如何在 使用模擬器的 16 KB 環境 (包括 Android 15) Android Emulator 的系統映像檔)。

Benefits and performance gains

以 16 KB 頁面大小設定的裝置平均會耗用較多記憶體,但系統和應用程式也能獲得各種效能改善:

  • 系統面臨記憶體壓力時,應用程式啟動時間越短:平均低 3.16%,部分受測的應用程式還大幅改善 (最多提升 30%)
  • 應用程式啟動期間的耗電量降幅:平均減少 4.56%
  • 相機啟動速度更快:熱啟動速度平均快了 4.48%,冷啟動速度平均快了 6.60%
  • 縮短系統啟動時間:縮短 8% (平均約 950 毫秒)

這些改善項目是根據初步測試結果而來,實際裝置上的結果可能會有所不同。我們會在持續測試的過程中,針對應用程式可能獲得的效益提供額外分析。

Check if your app is impacted

如果應用程式使用任何原生程式碼,則應重新建構應用程式,以支援 16 KB 裝置。如果您不確定應用程式是否使用原生程式碼,可以使用 APK 分析工具來判斷是否存在原生程式碼,然後檢查所找到的任何共用程式庫的 ELF 區段是否對齊

如果應用程式只使用以 Java 程式設計語言或 Kotlin 編寫的程式碼 (包括所有程式庫或 SDK),則應用程式已可支援 16 KB 裝置。不過,我們建議您在 16 KB 環境中測試應用程式,確認應用程式行為不會出現任何意外的回歸現象。

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

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.

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

我们移除了基于 PNG 的旧版表情符号字体文件 (NotoColorEmojiLegacy.ttf),只保留了基于矢量的文件。从 Android 13(API 级别 33)开始,系统表情符号渲染程序使用的表情符号字体文件已从基于 PNG 的文件更改为基于矢量的文件。出于兼容性原因,系统在 Android 13 和 14 中保留了旧版字体文件,以便具有自己的字体渲染程序的应用在能够升级之前继续使用旧版字体文件。

如需检查您的应用是否受到影响,请在应用的代码中搜索对 NotoColorEmojiLegacy.ttf 文件的引用。

您可以通过多种方式自适应应用:

  • 使用平台 API 进行文本渲染。您可以将文本渲染到基于位图的 Canvas,并在必要时使用该 Canvas 获取原始图片。
  • 为您的应用添加 COLRv1 字体支持。FreeType 开源库在 2.13.0 版及更高版本中支持 COLRv1。
  • 作为最后的手段,您可以将旧版表情符号字体文件 (NotoColorEmoji.ttf) 捆绑到 APK 中,但在这种情况下,您的应用将缺少最新的表情符号更新。如需了解详情,请参阅 Noto Emoji GitHub 项目页面

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

Android 15 採用 Android 14 所做的變更,並將這項做法 在 Android 15 中, 24 以下版本的 targetSdkVersion 無法安裝。 要求應用程式符合現代 API 級別,有助於提供更完善的安全防護和 隱私權。

為了規避 Android 較新版本的安全性和隱私權保護措施,惡意軟體通常會鎖定較低的 API 級別。例如: 部分惡意軟體應用程式會使用 22 的 targetSdkVersion,以免受到 Android 6.0 Marshmallow (API) 在 2015 年推出的執行階段權限模型 第 23 級)。這項 Android 15 變更會讓惡意軟體更難躲過更嚴謹的安全性和隱私權措施。嘗試安裝以較低 API 為目標的應用程式 level 會導致安裝失敗,並顯示以下訊息: 出現在 Logcat 中:

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

在升級至 Android 15 的裝置上,targetSdkVersion 較低的所有應用程式 仍未解除安裝。

如要測試以舊版 API 級別為目標的應用程式,請使用下列 ADB 指令:

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 會對所有應用程式的相機和媒體行為進行以下變更。

當達到資源限制時,直接和卸載音訊播放功能會使先前開啟的直接或卸載音訊曲目失效

在 Android 15 之前,如果應用程式在其他應用程式播放音訊時要求直接或卸載音訊播放,且已達到資源限制,應用程式就會無法開啟新的 AudioTrack

自 Android 15 起,當應用程式要求直接或卸載播放功能,且已達到資源限制時,系統會使任何目前開啟的 AudioTrack 物件失效,以免無法滿足新曲目要求。

(直接和卸載音訊音軌通常會在播放壓縮音訊格式時開啟。直接播放音訊的常見用途包括透過 HDMI 將編碼音訊串流至電視。卸載音軌通常用於在行動裝置上播放經過壓縮的音訊,並使用硬體 DSP 加速功能。

使用者體驗和系統使用者介面

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

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

從 Android 15 開始,預測返回動畫的開發人員選項已遭移除。對於已全面或在活動層級啟用預測返回手勢功能的應用程式,現在會顯示返回首頁、跨工作和跨活動等系統動畫。如果您的應用程式受到影響,請採取下列行動:

  • 請確認應用程式已正確遷移,可使用預測返回手勢。
  • 確保片段轉場效果可與預測返回導覽功能搭配運作。
  • 請移除動畫和架構轉場效果,改用動畫器和 androidx 轉場效果。
  • FragmentManager 不瞭解的返回堆疊中移除。請改用由 FragmentManager 或 Navigation 元件管理的返回堆疊。

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

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.

媒體投放狀態列方塊會提醒使用者分享螢幕畫面、投放內容和錄製畫面

屏幕投影漏洞会泄露用户的私密数据(例如财务信息),因为用户不知道自己的设备屏幕正在共享。

对于搭载 Android 15 QPR1 或更高版本的设备上运行的应用,系统会在状态栏中显示一个醒目的大条状标签,以提醒用户正在进行的任何屏幕投影。用户可以点按该条状标签,停止共享、投放或录制其屏幕。此外,当设备屏幕锁定时,屏幕投影会自动停止。

Status bar chip for screen sharing, casting, and recording.

確認應用程式是否受到影響

根據預設,應用程式會包含狀態列方塊,並在螢幕鎖定畫面啟用時自動暫停投放螢幕畫面。

如要進一步瞭解如何針對這些用途測試應用程式,請參閱「狀態列方塊和自動停止」。

背景網路存取權限制

在 Android 15 中,如果應用程式在有效的程序生命週期之外啟動網路要求,就會收到例外狀況。通常是 UnknownHostException 或其他與 Socket 相關的 IOException。在有效生命週期以外發生的網路要求,通常是因為應用程式在不再處於活動狀態後,仍不知情地繼續網路要求。

為減少這種例外狀況,請使用生命週期感知元件,確保網路要求具備生命週期感知功能,並在離開有效程序生命週期時取消。如果您認為網路要求必須在使用者離開應用程式後繼續執行,建議您使用 WorkManager 排程網路要求,或是使用前景服務繼續執行使用者可見的工作。

淘汰項目

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

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