您上傳的APK需要符合Google Play的目標(biāo)API級(jí)別要求。新應(yīng)用和應(yīng)用更新(Wear OS除外)必須以Android 10(API級(jí)別29)或更高版本為目標(biāo)平臺(tái)。
自2021年8月起,新應(yīng)用需要:
使用Android App Bundle格式發(fā)布。
使用Play Asset Delivery或Play Feature Delivery提交下載大小超過(guò)150MB的資產(chǎn)或功能。對(duì)于新應(yīng)用,擴(kuò)展文件(OBB)將不再受支持。
以API級(jí)別30(Android 11)或更高版本為目標(biāo)平臺(tái),并針對(duì)行為變更進(jìn)行調(diào)整。
從2021年11月開始,應(yīng)用更新必須以API級(jí)別30或更高版本為目標(biāo)平臺(tái),并針對(duì)Android 11中的行為變更進(jìn)行調(diào)整。未收到更新的現(xiàn)有應(yīng)用不會(huì)受到影響,用戶可以繼續(xù)從Play商店下載。
改用Android App Bundle發(fā)布方式也會(huì)影響使用舊版免安裝應(yīng)用ZIP格式的免安裝體驗(yàn)。自2021年8月起,如果開發(fā)者要發(fā)布新的免安裝應(yīng)用或更新現(xiàn)有免安裝應(yīng)用,必須發(fā)布支持免安裝體驗(yàn)的App Bundle。
為何要以較新的SDK為目標(biāo)平臺(tái)?
每個(gè)新的Android版本都會(huì)發(fā)生變更,帶來(lái)安全性和性能方面的重大改進(jìn),并提升Android的整體用戶體驗(yàn)。部分變更只會(huì)影響通過(guò)targetSdkVersion清單屬性(也稱為目標(biāo)API級(jí)別)明確聲明支持這些變更的應(yīng)用。
將您的應(yīng)用配置為使用新近的API級(jí)別可確保用戶享受這些改進(jìn)帶來(lái)的好處,同時(shí)您的應(yīng)用仍然可以在較低版本的Android上運(yùn)行。支持最新的API級(jí)別還有助于讓您的應(yīng)用利用平臺(tái)的最新功能,為用戶提供愉悅的體驗(yàn)。此外,從Android 10(API級(jí)別29)開始,如果應(yīng)用的目標(biāo)平臺(tái)為Android 5.1(API級(jí)別22)或更低版本,則用戶首次啟動(dòng)應(yīng)用時(shí)會(huì)看到警告。
本文重點(diǎn)介紹了有關(guān)更新目標(biāo)API級(jí)別的重要須知,以便您滿足Google Play的要求。
注意:如果您的Gradle文件包含清單條目,您可以按照配置您的build中的說(shuō)明,確認(rèn)或更改應(yīng)用的Gradle文件中當(dāng)前的targetSdkVersion值。或者,您也可以按照<uses-sdk>清單元素文檔中的說(shuō)明,使用清單文件中的android:targetSdkVersion屬性。
從Android 10(API級(jí)別29)遷移到Android 11(API級(jí)別30)
隱私權(quán)
強(qiáng)制執(zhí)行分區(qū)存儲(chǔ):應(yīng)用應(yīng)使用分區(qū)存儲(chǔ)模式,將特定于應(yīng)用的文件、媒體文件以及其他類型的文件保存到專用位置,并通過(guò)這些位置訪問這些文件。
自動(dòng)重置權(quán)限:如果用戶幾個(gè)月未與應(yīng)用互動(dòng),系統(tǒng)會(huì)自動(dòng)重置應(yīng)用的敏感權(quán)限。此設(shè)置不會(huì)影響大多數(shù)應(yīng)用。如果您的應(yīng)用主要在后臺(tái)運(yùn)行,無(wú)需用戶與之互動(dòng),您可以考慮請(qǐng)求用戶停用自動(dòng)重置功能。
后臺(tái)位置信息訪問權(quán)限:針對(duì)前臺(tái)位置信息獲取權(quán)限和后臺(tái)位置信息獲取權(quán)限,應(yīng)用必須分開進(jìn)行請(qǐng)求。用戶只能在應(yīng)用設(shè)置中授予后臺(tái)位置信息獲取權(quán)限,而不是通過(guò)運(yùn)行時(shí)權(quán)限對(duì)話框授予該權(quán)限。
軟件包可見性:當(dāng)應(yīng)用查詢?cè)O(shè)備上已安裝應(yīng)用和服務(wù)的列表時(shí),系統(tǒng)會(huì)過(guò)濾返回的列表。
如果您使用文字轉(zhuǎn)語(yǔ)音或語(yǔ)音識(shí)別服務(wù),則需在清單文件中為這些服務(wù)添加<queries>元素。
安全性
壓縮的resource.arsc文件不再受支持。
現(xiàn)在需要使用APK簽名方案v2。為實(shí)現(xiàn)向后兼容性,開發(fā)者還應(yīng)繼續(xù)使用APK簽名方案v1簽名。
限制非SDK接口。對(duì)于以API級(jí)別30為目標(biāo)平臺(tái)的應(yīng)用,建議不要使用非SDK接口,因?yàn)槠渲幸恍┙涌诂F(xiàn)已被屏蔽。如需查看已屏蔽的非SDK接口的完整列表,請(qǐng)參閱目前在Android 11中被屏蔽的非SDK接口。
如需查看Android 11(API級(jí)別30)所推出變更的詳盡列表,請(qǐng)參閱行為變更頁(yè)面。
從低于Android 10(API級(jí)別29)的版本遷移
翻新您的應(yīng)用
更新應(yīng)用的目標(biāo)API級(jí)別時(shí),不妨考慮采用最新的平臺(tái)功能翻新應(yīng)用,為用戶提供愉悅的體驗(yàn)。
考慮使用Beta版CameraX充分發(fā)揮相機(jī)功能。
使用Jetpack組件可以幫助您遵循最佳做法、省去編寫樣板代碼的工作并簡(jiǎn)化復(fù)雜任務(wù),以便集中精力編寫重要的代碼。
使用Kotlin,通過(guò)更少的代碼更快地編寫出更優(yōu)秀的應(yīng)用。
確保您遵循隱私保護(hù)要求和最佳做法。
為您的應(yīng)用添加深色主題支持。
為您的應(yīng)用添加手勢(shì)導(dǎo)航支持。
將您的應(yīng)用從Google Cloud Messaging(GCM)遷移至最新版Firebase Cloud Messaging。
利用高級(jí)窗口管理。
支持更大的寬高比(大于16:9),以便利用硬件方面的最新發(fā)展成果。請(qǐng)確保您的應(yīng)用可調(diào)整大小以填充可用的屏幕空間。只在萬(wàn)不得已時(shí)聲明最大寬高比。如需詳細(xì)了解最大寬高比,請(qǐng)參閱聲明受限屏幕支持。
添加多窗口支持,以幫助應(yīng)用提高工作效率以及管理多個(gè)顯示器。
如果出色的最小化應(yīng)用體驗(yàn)?zāi)軌蛱嵘脩趔w驗(yàn),則添加對(duì)畫中畫功能的支持。
針對(duì)配備劉海屏的設(shè)備進(jìn)行優(yōu)化。
請(qǐng)勿假定狀態(tài)欄高度,而應(yīng)使用WindowInsets和View.OnApplyWindowInsetsListener。如需了解這樣做的原因,請(qǐng)觀看此視頻。
請(qǐng)勿假定應(yīng)用會(huì)占滿整個(gè)窗口,而應(yīng)使用View.getLocationInWindow()來(lái)確認(rèn)它的位置,切勿使用View.getLocationOnScreen()。
處理MotionEvent時(shí),請(qǐng)使用MotionEvent.getX()和MotionEvent.getY()(而非MotionEvent.getRawX()和MotionEvent.getRawY())。
檢查及更新您的SDK和庫(kù)
請(qǐng)確保您的第三方SDK依賴項(xiàng)支持API 29:部分SDK提供商會(huì)在清單中發(fā)布這項(xiàng)信息;而對(duì)于其他SDK提供商,則需要再進(jìn)行調(diào)查。如果您使用的SDK不支持API 29,請(qǐng)與SDK提供商合作,優(yōu)先解決該問題。
另請(qǐng)注意,您的應(yīng)用或游戲的targetSdkVersion可能會(huì)限制對(duì)私有Android平臺(tái)庫(kù)的訪問;如需了解詳情,請(qǐng)參閱NDK應(yīng)用鏈接至平臺(tái)庫(kù)。
您還應(yīng)確認(rèn)正在使用的Android支持庫(kù)版本中存在哪些限制。與以往一樣,您必須確保Android支持庫(kù)的主要版本與您的應(yīng)用的compileSdkVersion兼容。
我們建議您選擇不高于支持庫(kù)主要版本的targetSdkVersion。您最好更新至最新的兼容支持庫(kù),以便利用最新的兼容性功能和問題修復(fù)程序。
測(cè)試您的應(yīng)用
適當(dāng)更新應(yīng)用的API級(jí)別和功能后,您應(yīng)測(cè)試部分核心用例。下面僅列舉部分建議,旨在引導(dǎo)您進(jìn)行測(cè)試。我們建議您針對(duì)以下方面進(jìn)行測(cè)試:
您的應(yīng)用已編譯為API 29,且沒有出現(xiàn)錯(cuò)誤或警告。
您的應(yīng)用對(duì)用戶拒絕權(quán)限請(qǐng)求的情況已有應(yīng)對(duì)策略,且會(huì)提示用戶授予權(quán)限。測(cè)試方法如下:
轉(zhuǎn)到應(yīng)用的“應(yīng)用信息”屏幕,然后停用所有權(quán)限。
打開應(yīng)用,確保不會(huì)出現(xiàn)崩潰問題。
執(zhí)行核心用例測(cè)試,并確保系統(tǒng)會(huì)再次提示用戶授予所需權(quán)限。
低電耗模式可呈現(xiàn)預(yù)期效果,且不會(huì)出現(xiàn)錯(cuò)誤。
使用adb,讓測(cè)試設(shè)備在您的應(yīng)用正在運(yùn)行時(shí)進(jìn)入低電耗模式。
測(cè)試所有會(huì)觸發(fā)Firebase云消息傳遞消息的用例。
測(cè)試所有使用鬧鐘或作業(yè)的用例。
消除后臺(tái)服務(wù)的所有依賴項(xiàng)。
將您的應(yīng)用設(shè)為應(yīng)用待機(jī)模式
測(cè)試所有會(huì)觸發(fā)Firebase云消息傳遞消息的用例。
測(cè)試所有使用鬧鐘的用例。
處理拍攝的新照片/視頻
確認(rèn)您的應(yīng)用能正確處理受限的ACTION_NEW_PICTURE和ACTION_NEW_VIDEO廣播(即移動(dòng)至JobScheduler作業(yè))。
確保所有依賴于此類事件的重大用例都能正常運(yùn)行。
處理將文件共享給其他應(yīng)用的操作
測(cè)試所有將文件數(shù)據(jù)共享給任何其他應(yīng)用(甚至是同一開發(fā)者推出的其他應(yīng)用)的用例
測(cè)試內(nèi)容是否在其他應(yīng)用中可見而不會(huì)觸發(fā)崩潰。