Android 15 平台包含可能對應用程式造成影響的行為變更。無論 targetSdkVersion
為何,當應用程式在 Android 15 上執行時,下列行為變更將會套用至所有應用程式。您應測試應用程式,並視需要修改,以便在適當情況下支援新版本功能。
另請務必查看僅對指定 Android 15 為目標版本的應用程式造成影響的行為變更清單。
核心功能
Android 15 會修改或擴充 Android 系統的各種核心功能。
變更套件停止狀態
软件包 FLAG_STOPPED
状态(用户可以通过长按应用图标并选择“强行停止”来参与 AOSP build)一直是为了让应用保持此状态,直到用户通过直接启动应用或间接与应用互动(通过 Sharesheet 或 widget、选择应用作为动态壁纸等)将应用从此状态明确移除。在 Android 15 中,我们将更新系统的行为,以符合这一预期行为。只能通过用户直接或间接操作将应用从停止状态中移除。
为了支持预期行为,除了现有限制之外,当应用在搭载 Android 15 的设备上进入停止状态时,系统还会取消所有待处理 intent。当用户的操作将应用从停止状态中移除时,系统会向应用传递 ACTION_BOOT_COMPLETED
广播,让用户有机会重新注册任何待处理的 intent。
您可以调用新的 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 環境中測試應用程式,確認應用程式行為不會出現任何意外的回歸現象。
部分應用程式必須進行必要變更,才能支援私人空間
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
.
已移除以 PNG 為基礎的表情符號字型
舊版的 PNG 表情符號字型檔案 (NotoColorEmojiLegacy.ttf
) 是
移除,僅保留向量檔案。從 Android 13 (API) 開始
第 33 級),系統表情符號轉譯器使用的表情符號字型檔案,從
PNG 檔案轉換為向量檔案系統保留
基於相容性因素,Android 13 和 Android 14 的舊版字型檔案
具有專屬字型轉譯器的應用程式,可繼續使用舊版字型檔案
直到能夠升級為止
如要確認應用程式是否受到影響,請搜尋應用程式的程式碼,尋找與
NotoColorEmojiLegacy.ttf
檔案。
您可以選擇透過下列幾種方式調整應用程式:
- 使用平台 API 轉譯文字。您可以將文字轉譯成支援點陣圖的
Canvas
,並視需求使用該物件取得原始圖片。 - 在應用程式中新增 COLRv1 字型支援。FreeType 開放原始碼程式庫 支援 COLRv1 (2.13.0 版)。 更高。
- 萬不得已時,你可以將舊版表情符號字型檔案封裝
將 (
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 推出了可有效防範一次性密碼 (OTP) 詐欺行為的強大措施,並保護使用者的敏感內容,重點是強化通知事件監聽器服務和螢幕分享保護機制。主要強化功能包括從可供不受信任的應用程式存取的通知中遮蓋 OTP、在螢幕分享期間隱藏通知,以及在發布 OTP 時保護應用程式活動。這些異動旨在保護使用者的機密內容,避免遭到未經授權的人士存取。
開發人員需要注意下列事項,確保應用程式與 Android 15 的變更相容:
動態密碼遮蓋
Android 會停止未受信任的應用程式,避免其在偵測到 OTP 時,從通知中讀取未經遮蓋的內容。NotificationListenerService
信任的應用程式 (例如隨附裝置管理員關聯) 不受這些限制。
螢幕分享保護功能
- 為保護使用者隱私,系統會在螢幕分享工作階段中隱藏通知內容。如果應用程式實作
setPublicVersion()
,Android 會顯示通知的公開版本,這可在非安全環境中做為替換通知。否則,通知內容會遭到遮蓋,且不會提供任何其他背景資訊。 - 遠端觀眾無法看到密碼輸入內容等機密內容,以免洩漏使用者的機密資訊。
- 在偵測到 OTP 的螢幕分享期間,系統會隱藏發布通知的應用程式活動。應用程式內容在啟動時會隱藏在遠端檢視器中。
- 除了 Android 自動辨識敏感欄位之外,開發人員也可以使用
setContentSensitivity
手動將應用程式的部分內容標示為敏感內容,這樣在螢幕分享期間,遠端觀眾就不會看到這些內容。 - 開發人員可以選擇切換「開發人員選項」下方的「停用螢幕畫面分享防護」選項,為示範或測試目的,免除螢幕畫面分享防護。預設的系統螢幕錄影工具不受這些變更影響,因為錄影內容會保留在裝置上。
相機和媒體
Android 15 會對所有應用程式的相機和媒體行為進行以下變更。
當達到資源限制時,直接和卸載音訊播放功能會使先前開啟的直接或卸載音訊曲目失效
在 Android 15 之前,如果應用程式在其他應用程式播放音訊時要求直接或卸載音訊播放,且達到資源限制,應用程式將無法開啟新的 AudioTrack
。
自 Android 15 起,當應用程式要求直接或卸載播放,且達到資源限制時,系統會撤銷所有目前開啟的 AudioTrack
物件,使其無法執行新測試群組要求。
(直接和卸載的音軌通常會在壓縮音訊格式播放時開啟。直接播放音訊的常見用途包括透過 HDMI 將編碼音訊串流至電視。卸載軌通常用於在具有硬體 DSP 加速功能的行動裝置上播放壓縮音訊)。
使用者體驗和系統使用者介面
Android 15 包含一些變更,旨在打造更一致、直覺的使用者體驗。
為已選擇加入的應用程式啟用預測返回動畫
從 Android 15 開始,我們移除了預測返回動畫的開發人員選項。如果應用程式已選擇啟用預測返回手勢,不論是完全或活動層級,系統現在都會顯示系統動畫,例如返回主畫面、跨工作和跨活動。如果您的應用程式受到影響,請採取下列行動:
- 請確認應用程式已正確遷移,可使用預測返回手勢。
- 請確保片段轉場能與預測返回導覽功能搭配運作。
- 捨棄動畫和架構轉換,並改用動畫和 Androidx 轉場效果。
- 捨棄
FragmentManager
不知道的返回堆疊。請改用由FragmentManager
或 Navigation 元件管理的返回堆疊。
使用者強制停止應用程式時,小工具會停用
如果使用者在搭載 Android 15 的裝置上強制停止應用程式,系統會暫時停用所有應用程式小工具。小工具會顯示為灰色,使用者無法操作。這是因為從 Android 15 開始,系統會在應用程式強制停止時,取消應用程式的所有待處理意圖。
系統會在使用者下次啟動應用程式時,重新啟用這些小工具。
詳情請參閱「套件已停止狀態的變更」。
媒體投放狀態列方塊會提醒使用者分享螢幕畫面、投放內容和錄製畫面
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.
淘汰項目
每次發布時,特定 Android API 都可能會淘汰,或需要重構,以提供更優質的開發人員體驗,或支援新的平台功能。在這種情況下,我們會正式淘汰過時的 API,並引導開發人員改用其他 API。
淘汰是指我們已終止對 API 的官方支援,但開發人員仍可繼續使用這些 API。如要進一步瞭解此 Android 版本中的重要淘汰項目,請參閱淘汰項目頁面。