一、行為變更
所有應(yīng)用
1.前臺(tái)服務(wù) (FGS) 任務(wù)管理器
無(wú)論應(yīng)用采用何種目標(biāo) SDK 版本,Android 13(API 級(jí)別 33)都允許用戶從抽屜式通知欄中停止前臺(tái)服務(wù)。這項(xiàng)新功能稱為 FGS 任務(wù)管理器,它會(huì)顯示當(dāng)前正在運(yùn)行前臺(tái)服務(wù)的應(yīng)用列表。此列表的標(biāo)簽為使用中的應(yīng)用。每個(gè)應(yīng)用旁邊都有一個(gè)停止按鈕。
注意:當(dāng)用戶按您應(yīng)用旁邊的停止按鈕時(shí),系統(tǒng)會(huì)停止您的整個(gè)應(yīng)用,而不僅僅是正在運(yùn)行的前臺(tái)服務(wù)。
2.使用 JobScheduler 改進(jìn)預(yù)提取作業(yè)處理
利用 JobScheduler,應(yīng)用可使用 JobInfo.Builder.setPrefetch() 將特定作業(yè)標(biāo)記為“預(yù)提取”作業(yè),這意味著,理想情況下這些作業(yè)應(yīng)該在應(yīng)用下一次啟動(dòng)前提前一點(diǎn)運(yùn)行,以提升用戶體驗(yàn)。過(guò)去,JobScheduler 僅使用該信號(hào)讓預(yù)提取作業(yè)有機(jī)會(huì)使用免費(fèi)或多余的數(shù)據(jù)。
在 Android 13 中,系統(tǒng)現(xiàn)在會(huì)嘗試確定應(yīng)用下次啟動(dòng)的時(shí)間,并根據(jù)該估算值運(yùn)行預(yù)提取作業(yè)。應(yīng)用應(yīng)嘗試使用預(yù)提取作業(yè)來(lái)完成他們想要在下次應(yīng)用啟動(dòng)前完成的任何工作。
3.電池資源利用率
Android 13(API 級(jí)別 33)引入了電池資源利用率,它為系統(tǒng)提供了多種方法來(lái)更好地管理設(shè)備電池續(xù)航時(shí)間:
- 更新了有關(guān)系統(tǒng)何時(shí)將您的應(yīng)用放入“受限”應(yīng)用待機(jī)模式存儲(chǔ)分區(qū)的規(guī)則。
- 對(duì)于您的應(yīng)用在以下情況下可以執(zhí)行的操作制定了新限制:用戶因您應(yīng)用的后臺(tái)電池用量過(guò)高而將其置于“受限”狀態(tài)。
- 新增了系統(tǒng)通知,用于就長(zhǎng)時(shí)間運(yùn)行的前臺(tái)服務(wù)向用戶發(fā)出警告。
4.通知的運(yùn)行時(shí)權(quán)限
Android 13(API 級(jí)別 33)引入了新的運(yùn)行時(shí)通知權(quán)限:POST_NOTIFICATIONS。此更改有助于用戶專(zhuān)注于最重要的通知。
注意:與媒體會(huì)話以及自行管理通話的應(yīng)用相關(guān)的通知不受此行為變更的影響。
5.從剪貼板中隱藏敏感內(nèi)容
如果您的應(yīng)用允許用戶將敏感內(nèi)容(例如密碼或信用卡信息)復(fù)制到剪貼板,則必須在調(diào)用 ClipboardManager#setPrimaryClip() 之前向 ClipData 的 ClipDescription 添加一個(gè)標(biāo)志。添加此標(biāo)志可阻止敏感內(nèi)容出現(xiàn)在內(nèi)容預(yù)覽中。
如需標(biāo)記敏感內(nèi)容,請(qǐng)向 ClipDescription 添加一個(gè)布爾型 extra。無(wú)論應(yīng)用的目標(biāo) API 級(jí)別如何,所有應(yīng)用都應(yīng)這么做。
6.停止使用共享用戶 ID
如果您的應(yīng)用使用已廢棄的 android:sharedUserId 屬性,并且不再依賴于該屬性的功能,您可以將 android:sharedUserMaxSdkVersion 屬性設(shè)置為 32,這個(gè)新屬性會(huì)告知系統(tǒng),您的應(yīng)用不再依賴于共享用戶 ID。如果您的應(yīng)用聲明 android:sharedUserMaxSdkVersion 并且首次安裝在搭載 Android 13 或更高版本的設(shè)備上,則應(yīng)用的行為就像您從未定義過(guò) android:sharedUserId 一樣。更新后的應(yīng)用仍會(huì)使用現(xiàn)有的共享用戶 ID。
共享用戶 ID 會(huì)在軟件包管理器中導(dǎo)致具有不確定性的行為。您的應(yīng)用應(yīng)使用適當(dāng)?shù)耐ㄐ艡C(jī)制(例如服務(wù)和 content provider),在共享組件之間實(shí)現(xiàn)互操作性。
注意:如果您已在清單中定義了 android:sharedUserId 屬性,請(qǐng)不要將其移除。這樣做會(huì)導(dǎo)致應(yīng)用更新失敗。
以 Android 13 為目標(biāo)平臺(tái)的應(yīng)用
1.通知權(quán)限會(huì)影響前臺(tái)服務(wù)的顯示
如果用戶拒絕通知權(quán)限,他們?nèi)詴?huì)在前臺(tái)服務(wù) (FGS) 任務(wù)管理器中看到與這些前臺(tái)服務(wù)相關(guān)的通知,但不會(huì)在抽屜式通知欄中看到這些通知。
2.針對(duì)附近 Wi-Fi 設(shè)備的新運(yùn)行時(shí)權(quán)限
在以前的 Android 版本中,用戶需要向您的應(yīng)用授予 ACCESS_FINE_LOCATION 權(quán)限,應(yīng)用才能完成與熱點(diǎn)相關(guān)的多個(gè)常見(jiàn) Wi-Fi 用例、Wi-Fi 直連、Wi-Fi RTT 等。
由于用戶很難將位置信息權(quán)限與 Wi-Fi 功能相關(guān)聯(lián),因此 Android 13(API 級(jí)別 33)在 NEARBY_DEVICES 權(quán)限組中引入了新的運(yùn)行時(shí)權(quán)限,適用于管理設(shè)備與附近 Wi-Fi 接入點(diǎn)連接情況的應(yīng)用。此權(quán)限 (NEARBY_WIFI_DEVICES) 可滿足這些 Wi-Fi 用例。
只要您的應(yīng)用不會(huì)通過(guò) Wi-Fi API 推導(dǎo)物理位置,那么當(dāng)您以 Android 13 或更高版本為目標(biāo)平臺(tái)并使用 Wi-Fi API 時(shí),就可以請(qǐng)求 NEARBY_WIFI_DEVICES 而不是 ACCESS_FINE_LOCATION。
注意:僅當(dāng)您調(diào)用 Wi-Fi API 時(shí),此更改才會(huì)影響您的應(yīng)用。
3.細(xì)化的媒體權(quán)限
如果您的應(yīng)用以 Android 13 為目標(biāo)平臺(tái),您必須請(qǐng)求一個(gè)或多個(gè)新權(quán)限,而不是 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 權(quán)限。如果用戶之前向您的應(yīng)用授予了 READ_EXTERNAL_STORAGE 權(quán)限,系統(tǒng)會(huì)自動(dòng)向您的應(yīng)用授予每個(gè)新權(quán)限。
注意:如果您的應(yīng)用只需要訪問(wèn)圖片、照片和視頻,請(qǐng)考慮使用照片選擇器,而不是聲明 READ_MEDIA_IMAGES和 READ_MEDIA_VIDEO 權(quán)限。
注意:您無(wú)需再聲明 WRITE_EXTERNAL_STORAGE 權(quán)限。
4.在后臺(tái)使用身體傳感器需要新的權(quán)限
如果您的應(yīng)用以 Android 13 為目標(biāo)平臺(tái),并且在后臺(tái)運(yùn)行時(shí)需要訪問(wèn)身體傳感器信息,那么除了現(xiàn)有的 BODY_SENSORS 權(quán)限外,您還必須聲明新的 BODY_SENSORS_BACKGROUND 權(quán)限。
5.intent 過(guò)濾器會(huì)屏蔽不匹配的 intent
當(dāng)您的應(yīng)用向以 Android 13 或更高版本為目標(biāo)平臺(tái)的其他應(yīng)用的導(dǎo)出組件發(fā)送 intent 時(shí),僅當(dāng)該 intent 與接收應(yīng)用中的 < intent-filter > 元素匹配時(shí),系統(tǒng)才會(huì)傳送該 intent。不匹配的 intent 會(huì)被屏蔽。
二、新特性
1.更安全地導(dǎo)出上下文注冊(cè)的接收器
為了幫助提高運(yùn)行時(shí)接收器的安全性,Android 13 允許您指定您應(yīng)用中的特定廣播接收器是否應(yīng)被導(dǎo)出以及是否對(duì)設(shè)備上的其他應(yīng)用可見(jiàn)。如果導(dǎo)出廣播接收器,其他應(yīng)用將可以向您的應(yīng)用發(fā)送不受保護(hù)的廣播。此導(dǎo)出配置在以 Android 13 或更高版本為目標(biāo)平臺(tái)的應(yīng)用中可用,有助于防止一個(gè)主要的應(yīng)用漏洞來(lái)源。
在以前的 Android 版本中,設(shè)備上的任何應(yīng)用都可以向動(dòng)態(tài)注冊(cè)的接收器發(fā)送不受保護(hù)的廣播,除非該接收器受簽名權(quán)限的保護(hù)。
2.照片選擇器
Android 13(API 級(jí)別 33)提供了全新的照片選擇器體驗(yàn)。應(yīng)用啟動(dòng)照片選擇器時(shí),用戶可選擇與應(yīng)用分享特定圖片和視頻(如個(gè)人資料照片),而不是授予應(yīng)用查看整個(gè)媒體庫(kù)的權(quán)限。
照片選擇器可為用戶提供更好的隱私保護(hù),因?yàn)槟膽?yīng)用無(wú)需聲明任何運(yùn)行時(shí)權(quán)限。此外,照片選擇器還為應(yīng)用提供內(nèi)置標(biāo)準(zhǔn)化界面,從而打造更一致的用戶體驗(yàn)。
注意:現(xiàn)在,我們推薦使用照片選擇器來(lái)訪問(wèn)用戶的照片和視頻。
3.針對(duì)附近 Wi-Fi 設(shè)備的新運(yùn)行時(shí)權(quán)限
Android 13(API 級(jí)別 33)在 NEARBY_DEVICES 權(quán)限組中引入了一項(xiàng)新的運(yùn)行時(shí)權(quán)限,它適用于會(huì)管理設(shè)備與附近 Wi-Fi 接入點(diǎn)連接情況的應(yīng)用。這些應(yīng)用在調(diào)用多個(gè)不同的 Wi-Fi API 時(shí)必須聲明新的權(quán)限 NEARBY_WIFI_DEVICES。此外,只要應(yīng)用不會(huì)通過(guò) Wi-Fi API 推導(dǎo)物理位置,那么在以 Android 13 或更高版本為目標(biāo)平臺(tái)時(shí),就無(wú)需聲明 ACCESS_FINE_LOCATION 權(quán)限。
4.使用精確鬧鐘的新權(quán)限
如果您的應(yīng)用以 Android 13 為目標(biāo)平臺(tái),您可以使用自動(dòng)授予應(yīng)用的 USE_EXACT_ALARM 權(quán)限。不過(guò),您的應(yīng)用若要使用此權(quán)限,必須至少滿足以下條件之一:
- 您的應(yīng)用是鬧鐘應(yīng)用或計(jì)時(shí)器應(yīng)用。
- 您的應(yīng)用是日歷應(yīng)用,可顯示即將進(jìn)行的活動(dòng)的通知。
如果您的應(yīng)用設(shè)置了精確鬧鐘,但不符合前面列表中顯示的任一情況,請(qǐng)改為繼續(xù)聲明 SCHEDULE_EXACT_ALARM 權(quán)限,并為用戶拒絕授予您應(yīng)用相應(yīng)訪問(wèn)權(quán)限的情況做好準(zhǔn)備。
5.開(kāi)發(fā)者可降級(jí)權(quán)限
從 Android 13 開(kāi)始,應(yīng)用可以撤消先前由系統(tǒng)或用戶授予的運(yùn)行時(shí)權(quán)限。此 API 可讓您的應(yīng)用執(zhí)行增強(qiáng)隱私權(quán)的任務(wù),如下所示:
- 撤消未使用的權(quán)限。
- 遵循權(quán)限最佳做法,從而提高用戶信任度。您可能需要考慮向用戶顯示一個(gè)對(duì)話框,其中會(huì)顯示您主動(dòng)撤消的權(quán)限。
如需撤消特定運(yùn)行時(shí)權(quán)限,請(qǐng)將該權(quán)限的名稱傳入 revokeSelfPermissionOnKill()。如需同時(shí)撤消一組運(yùn)行時(shí)權(quán)限,請(qǐng)將這組權(quán)限的名稱傳入 revokeSelfPermissionsOnKill()。撤消是異步發(fā)生的,會(huì)終止與您應(yīng)用的 UID 相關(guān)聯(lián)的所有進(jìn)程。
6.APK 簽名方案 v3.1
Android 13 可支持 APK 簽名方案 v3.1,此方案在現(xiàn)有的 APK 簽名方案 v3 的基礎(chǔ)上進(jìn)行了改進(jìn),解決了 APK 簽名方案 v3 的一些已知問(wèn)題。具體而言,v3.1 簽名方案允許應(yīng)用在單個(gè) APK 中同時(shí)支持原始簽名者和輪替簽名者。此外,該方案還支持 SDK 版本定位功能,這會(huì)允許輪替定位到更高版本的平臺(tái)。
v3.1 簽名方案使用在 12L 或更低版本中無(wú)法識(shí)別的新分塊 ID。因此,平臺(tái)會(huì)應(yīng)用以下簽名者行為:
- 搭載 Android 13 的設(shè)備會(huì)使用 v3.1 分塊中的輪替簽名者。
- 搭載舊版 Android 的設(shè)備會(huì)忽略輪替簽名者,而使用 v3.0 分塊中的原始簽名者。
尚未輪替其簽名密鑰的應(yīng)用無(wú)需執(zhí)行任何其他操作。每當(dāng)這些應(yīng)用選擇輪替時(shí),系統(tǒng)都會(huì)默認(rèn)應(yīng)用新的 v3.1 簽名方案。