行為變更:所有應用程式

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 的系統映像檔)。

優點和效能提升

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

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

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

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

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

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

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

私人空間是 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 為基礎的表情符號字型

我们移除了基于 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 级别有助于确保更好的安全性和 保护隐私。

恶意软件通常会以较低的 API 级别为目标平台,以绕过安全和隐私 更高的 Android 版本中引入的保护机制。例如,有些恶意软件应用使用 targetSdkVersion 22,以避免受到 Android 6.0 Marshmallow(API 级别 23)在 2015 年引入的运行时权限模型的约束。这项 Android 15 变更使恶意软件更难以规避安全和隐私权方面的改进限制。尝试安装以较低 API 级别为目标平台的应用将导致安装失败,并且 Logcat 中会显示如下所示的消息:

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

在升级到 Android 15 的设备上,targetSdkVersion 级别较低的任何应用 安装在 Google Play 上

如果您需要测试以旧版 API 级别为目标平台的应用,请使用以下 ADB 命令:

adb install --bypass-low-target-sdk-block FILENAME.apk

安全性和隱私權

Android 15 引入了强大的措施来防范动态密码 (OTP) 欺诈并保护用户的敏感内容,重点是增强通知监听器服务和屏幕共享保护措施。主要增强功能包括从可供不可信应用访问的通知中隐去 OTP、在屏幕共享期间隐藏通知,以及在发布 OTP 时保护应用 activity。这些变更旨在保护用户的敏感内容,使其免受未经授权的操作者的侵害。

开发者需要注意以下事项,以确保其应用与 Android 15 中的变更兼容:

动态密码隐去

Android 会阻止实现 NotificationListenerService 的不受信任应用读取已检测到 OTP 的通知中的未隐去的内容。配套设备管理器关联等受信任应用不受这些限制。

屏幕共享保护

  • 在屏幕共享会话期间,系统会隐藏通知内容,以保护用户的隐私。如果应用实现了 setPublicVersion(),Android 会显示通知的公开版本,该版本在不安全情境中用作替换通知。否则,系统会隐去通知内容,不提供任何其他背景信息。
  • 系统会向远程观看者隐藏密码输入等敏感内容,以防止泄露用户的敏感信息。
  • 如果在屏幕共享期间检测到动态密码,系统会隐藏在该时间段内发布通知的应用的活动。应用内容在启动时会向远程查看器隐藏。
  • 除了 Android 自动识别敏感字段之外,开发者还可以使用 setContentSensitivity 手动将应用的部分标记为敏感,在屏幕共享期间,这些敏感字段会对远程观看者隐藏。
  • 开发者可以选择切换开发者选项下的停用屏幕共享防护选项,以便出于演示或测试目的豁免屏幕共享防护。默认的系统屏幕录制工具不受这些更改的影响,因为录制内容会保留在设备上。

相機和媒體

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

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

在 Android 15 之前,如果某个应用在另一个应用播放音频且达到资源限制时请求直接或分流音频播放,该应用将无法打开新的 AudioTrack

从 Android 15 开始,当应用请求直接播放或分流播放且达到资源限制时,系统会使任何当前打开的 AudioTrack 对象失效,以防止执行新轨道请求。

(直接音轨和分流音轨通常会打开,以播放压缩音频格式。播放直接音频的常见用例包括通过 HDMI 将编码的音频流式传输到电视。分流轨道通常用于在具有硬件 DSP 加速的移动设备上播放压缩音频。)

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

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

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

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

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

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

如果用户在搭载 Android 15 的设备上强制停止应用,系统会暂时停用该应用的所有微件。这些 widget 会灰显,用户无法与其互动。这是因为,从 Android 15 开始,当系统强制停止应用时,会取消应用的所有待处理 intent。

系统会在用户下次启动应用时重新启用这些微件。

如需了解详情,请参阅对软件包停止状态的更改

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

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

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

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

检查您的应用是否受到影响

默认情况下,您的应用会包含状态栏条状标签,并会在锁定屏幕激活时自动暂停屏幕投影。

如需详细了解如何针对这些用例测试应用,请参阅状态栏条状标签和自动停止

淘汰項目

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

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