满足 Google Play 目标 API 等级 (targetSdkLevel) 的要求
從 2018 年 8 月起,所有向 Google Play 提交的新應(yīng)用都必須針對 Android 8.0 (API 等級 26) 開發(fā)。2018 年 11 月起,所有 Google Play 的現(xiàn)有應(yīng)用更新同樣必須針對 Android 8.0。
Android 每次版本更新都會作出變更,顯著提升應(yīng)用安全性以及性能并改善整體用戶體驗。其中部分變更僅適用于那些通過 manifest 文件中的 targetSdkVersion 屬性 (即目標(biāo) API 等級) 明確指出支持新版 API 行為的應(yīng)用。
請將您的應(yīng)用目標(biāo) API 等級設(shè)置為最新版本并確保用戶能夠享用這些改進項目,同時允許應(yīng)用在低版本 Android 仍舊可以運行。適配新目標(biāo)等級后,應(yīng)用可以利用 Android 平臺最新功能 (latest features) 給用戶創(chuàng)造更美好的體驗。
本文重點說明了開發(fā)者在更新目標(biāo) API 中應(yīng)該注意的幾個事項,從而滿足 Google Play 的要求。在進行下一步前,請根據(jù)您的 app 現(xiàn)有 API 等級閱覽:
早于 Android 5.0 (API 等級 21)
早于 Android 6.0 (API 等級 23)
早于 Android 7.0 (API 等級 24)
早于 Android 8.0 (API 等級 26)
注意:如果您的 gradle 文件包含 manifest 條目,您可確認或者更改文件中 targetSdkVersion 的當(dāng)下值,詳情請閱覽《如何配置您的構(gòu)建》(Configure Your Build)。或者說,您也可以使用 manifest 文件中的 android:targetSdkVersion 配置項,具體操作請閱覽 <uses-sdk> manifest 屬性的相關(guān)文檔。
早于 Android 5.0 (API 等級 21)
請根據(jù) API 版本閱覽相應(yīng)的《行為變更》頁面,確保您的應(yīng)用能夠順利應(yīng)對各個版本發(fā)布:
Android 5.0 (API 等級 21)
Android 4.4 (API 等級 19)
Android 4.1 x (API 等級 16)
早于 Android 6.0 (API 等級 23)
下文列舉內(nèi)容適用于針對 Android 6.0 或更高版本平臺開發(fā)的應(yīng)用:
在運行時請求權(quán)限
- 危險權(quán)限只可以在運行時被授予。應(yīng)用的 UI 流必須提供相應(yīng)可供性向用戶請求這些權(quán)限;
- 但凡可能,您的應(yīng)用要準(zhǔn)備好應(yīng)對權(quán)限請求被拒的情況。譬如說,如果某個用戶拒絕您的應(yīng)用訪問設(shè)備 GPS,應(yīng)用須通過其它方法繼續(xù)運行。
要了解 Android 6.0 (API 等級 23) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文檔。
早于Android 7.0 (API 等級 24)
下文列舉內(nèi)容適用于針對 Android 7.0 或更高版本平臺開發(fā)的應(yīng)用:
Doze 以及應(yīng)用待機模式:
請根據(jù)《Doze 以及應(yīng)用待機模式優(yōu)化》一文中的相關(guān)描述設(shè)計您的 app,文章涵蓋適用幾個 Android 版本的逐步變更。
當(dāng)設(shè)備進入 Doze 或者待機模式時,會產(chǎn)生下述系統(tǒng)行為:
- 網(wǎng)絡(luò)訪問限制;
- 推遲應(yīng)用的 alarms、syncs 和 jobs;
- GPS 以及 Wi-Fi 掃描限制;
- 普通優(yōu)先級 Firebase Cloud Messaging 消息限制;
權(quán)限變更
- 系統(tǒng)將限制訪問應(yīng)用私有目錄;
- 在應(yīng)用外公開 file://URI會導(dǎo)致 FileUriExposedException。開發(fā)者可以使用 FileProvider 在應(yīng)用間進行文件共享;
系統(tǒng)阻止應(yīng)用鏈接非 NDK 庫。
要了解 Android 7.0 (API 等級 24) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文檔。
早于 Android 8.0 (API 等級 26)
下文列舉內(nèi)容適用于針對 Android 8.0 或更高版本平臺開發(fā)的應(yīng)用:
后臺執(zhí)行限制 (Background Execution Limits)
- 若您的應(yīng)用不運行在前臺,系統(tǒng)將會限制服務(wù):
·· 當(dāng)應(yīng)用試圖調(diào)用 startService() 而 startService 又被禁止時,startService() 會拋出異常;
·· startForegroundService() 應(yīng)用必須使用 startForeground()和 startForegroundService() 函數(shù)啟動前臺服務(wù);
·· 請前往 Android 8.0 (API 等級 26) 《行為變更》頁面,仔細閱讀關(guān)于 JobScheduler API 的變更;
·· Firebase Cloud Messaging 要求 10.2.1 或更高版本的 Google Play 服務(wù) SDK;
·· Firebase Cloud Messaging documentation 在使用 Firebase Cloud Messaging 時,消息投遞受限于后臺執(zhí)行限制。若消息接收需要必要后臺工作,如后臺數(shù)據(jù)同步,您的應(yīng)用須要通過 Firebase Job Dispatcher 或者 JobIntentService 調(diào)度任務(wù)。詳情請閱覽《Firebase Cloud Messaging 文檔》。
- 隱式廣播限制:
·· 系統(tǒng)會限制隱式廣播。有關(guān)處理后臺事件詳情,請閱讀JobSechduler API 文檔;
·· 后臺位置限制;
·· 后臺運行的應(yīng)用訪問位置數(shù)據(jù)受限;
支持 Google Play 服務(wù)的設(shè)備可以通過 fused location provider 定期獲取位置更新。
通知渠道
- 您應(yīng)該為每個渠道分別定義通知中斷設(shè)特性:
·· 您必須將通知分配到某一渠道 (channel),以便通知顯示;
·· 該版本 Android 平臺支持 NotificationCompat.Builder;
隱私
- ANDROID_ID 會根據(jù)每個應(yīng)用簽署密鑰確定作用域。
要了解 Android 8.0 (API 等級 26) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文檔。
查看更多指導(dǎo)文檔鏈接
現(xiàn)代化您的應(yīng)用
當(dāng)您在更新應(yīng)用目標(biāo) API 等級時,請考慮應(yīng)用平臺近期發(fā)布的新功能,讓您的應(yīng)用更為現(xiàn)代化并為用戶帶去更好的體驗。
請將您的 app 從 Google Cloud Messaging (GCM) 遷移至 Firebase Cloud Messaging 最新版本;
使用高級窗口管理:
- Declare Restricted Screen Support 支持更大寬屏比率 (大于 16:9),讓應(yīng)用能夠利用最新的硬件技術(shù)。確保您的應(yīng)用調(diào)整大小后能填充可用的屏幕空間。萬不得已情況下,可以聲明最大屏幕寬高比。更多有關(guān)最大屏幕寬高比信息,請閱覽《聲明受限屏幕支持》;
- multiple displays 添加多窗口支持,提升 app 效率并管理多屏幕適配;
- 如果最小化應(yīng)用能夠幫助您改善用戶體驗,您可添加畫中畫支持;
- 針對凹口屏幕設(shè)備的優(yōu)化:
·· 不要假定狀態(tài)欄高度,而是使用 WindowInsets 以及View.OnApplyWindowInsetsListener;
·· 不要假定應(yīng)用是全屏顯示的,而是通過調(diào)用View.getLocationInWindow() (注意:不是View.getLocationOnScreen()) 來確定應(yīng)用屏幕位置;
·· 在處理 MotionEvent 時,調(diào)用 MotionEvent.getX() 和MotionEvent.getY();而非 MotionEvent.getRawX() 或MotionEvent.getRawY();
使用現(xiàn)代攝像頭支持:
- 使用 Camera2 API 最大化攝像頭利用率;
- Pixel 2 devices 在 Pixel 2 設(shè)備上啟用 Pixel Visual Core 加速 HDR+ 處理。
檢查并更新您的 SDK 和庫
請確保您使用的三方 SDK 依賴項支持 API 26:部分 ADK 供應(yīng)商會在發(fā)布說明中寫明是否支持;其它供應(yīng)商則須要進一步調(diào)查。如果您使用的 SDK 不支持 API 26,請盡快與 SDK 供應(yīng)商合作解決該問題。
此外,請注意您的應(yīng)用或者游戲中的 targetSdkVersion 可能會限制訪問私有 Android 平臺庫,請閱覽《將 NDK 應(yīng)用鏈接至平臺庫》獲取進一步信息。
您還須要驗證您正在使用的 Android 支持庫可能存在的任何限制。和以往一樣,您必須確保應(yīng)用中的 compileSdkVersion 與 Android 支持庫主要版本能夠順利兼容。
我們推薦您選擇小于或等于 Support Library 主要版本的 targetSdkVersion ,并建議您升級到近期發(fā)布的兼容 Support Library,從而能夠使用到最新版本的兼容性特性和錯誤修正功能。
?查看更多指導(dǎo)文檔鏈接
測試您的應(yīng)用
在更新完應(yīng)用的 API 等級和功能后,您須要測試一些核心用例。下文列舉的幾條建議并沒有涵蓋所有情況,但希望能給您提供指導(dǎo)作用。我們建議進行以下幾個方面的測試:
測試應(yīng)用兼容 API 26, 不產(chǎn)生錯誤和警告;
您的應(yīng)用應(yīng)該有相應(yīng)策略來妥善應(yīng)對用戶拒絕訪問權(quán)限的情況,并提示用戶授予權(quán)限。為了達到該效果,您須要:
- 前往應(yīng)用的信息頁面,然后拒絕每個權(quán)限;
- 開啟應(yīng)用,確保沒有崩潰;
- 進行核心用例測試,并確保所有必須權(quán)限請求再被顯示;
妥善應(yīng)對 Doze 模式,達到預(yù)期效果且不導(dǎo)致錯誤:
- 在應(yīng)用運行時,使用 adb 讓您的測試設(shè)備進入 Doze 模式:
·· 測試任何觸發(fā) Firebase Cloud Messaging 消息的用例;
·· 測試任何需要使用鬧鐘或者任務(wù)用例;
·· 消除所有后臺服務(wù)依賴;
- 設(shè)置您的應(yīng)用進入待機模式:
·· 測試任何觸發(fā) Firebase Cloud Messaging 消息的用例;
·· 測試任何需要使用鬧鐘的用例;
處理新拍攝的照片以及視頻:
- 檢查您的應(yīng)用是否妥善處理 ACTION_NEW_PICTURE 以及 ACTION_NEW_VIDEO 廣播限制 (即移動至 JobScheduler 任務(wù));
- 確保任何依賴此類事件的重要用例都能順利運行;
應(yīng)用間分享文件:
- 請測試所有涉及到應(yīng)用間分享文件數(shù)據(jù)的案例 (即使是同一開發(fā)者開發(fā)的應(yīng)用);
- 請測試其它應(yīng)用是否能夠成功顯示內(nèi)容,而且不引發(fā)崩潰。
總結(jié)
以上是生活随笔為你收集整理的满足 Google Play 目标 API 等级 (targetSdkLevel) 的要求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux关于ftp权限问题
- 下一篇: 【FTP】详解