滿足 Google Play 目標 API 等級 (targetSdkLevel) 的要求

Android_開發者發表於2019-03-04

滿足 Google Play 目標 API 等級 (targetSdkLevel) 的要求

從 2018 年 8 月起,所有向 Google Play 提交的新應用都必須針對 Android 8.0 (API 等級 26) 開發。2018 年 11 月起,所有 Google Play 的現有應用更新同樣必須針對 Android 8.0。

Android 每次版本更新都會作出變更,顯著提升應用安全性以及效能並改善整體使用者體驗。其中部分變更僅適用於那些通過 manifest 檔案中的 targetSdkVersion 屬性 (即目標 API 等級) 明確指出支援新版 API 行為的應用。

請將您的應用目標 API 等級設定為最新版本並確保使用者能夠享用這些改進專案,同時允許應用在低版本 Android 仍舊可以執行。適配新目標等級後,應用可以利用 Android 平臺最新功能 (latest features) 給使用者創造更美好的體驗。

本文重點說明了開發者在更新目標 API 中應該注意的幾個事項,從而滿足 Google Play 的要求。在進行下一步前,請根據您的 app 現有 API 等級閱覽:

  • 早於 Android 5.0 (API 等級 21)

  • 早於 Android 6.0 (API 等級 23)

  • 早於 Android 7.0 (API 等級 24)

  • 早於 Android 8.0 (API 等級 26)

注意:如果您的 gradle 檔案包含 manifest 條目,您可確認或者更改檔案中 targetSdkVersion 的當下值,詳情請閱覽如何配置您的構建》(Configure Your Build)。或者說,您也可以使用 manifest 檔案中的 android:targetSdkVersion 配置項,具體操作請閱覽 <uses-sdk> manifest 屬性的相關文件。


早於 Android 5.0 (API 等級 21)

請根據 API 版本閱覽相應的《行為變更》頁面,確保您的應用能夠順利應對各個版本釋出:

  • Android 5.0 (API 等級 21)

  • Android 4.4 (API 等級 19)

  • Android 4.1 x (API 等級 16)


早於 Android 6.0 (API 等級 23)

下文列舉內容適用於針對 Android 6.0 或更高版本平臺開發的應用:

  • 在執行時請求許可權

- 危險許可權只可以在執行時被授予。應用的 UI 流必須提供相應可供性向使用者請求這些許可權;

- 但凡可能,您的應用要準備好應對許可權請求被拒的情況。譬如說,如果某個使用者拒絕您的應用訪問裝置 GPS,應用須通過其它方法繼續執行。

要了解 Android 6.0 (API 等級 23) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文件。


早於Android 7.0 (API 等級 24)

下文列舉內容適用於針對 Android 7.0 或更高版本平臺開發的應用:

  • Doze 以及應用待機模式:

請根據《Doze 以及應用待機模式優化》一文中的相關描述設計您的 app,文章涵蓋適用幾個 Android 版本的逐步變更。

當裝置進入 Doze 或者待機模式時,會產生下述系統行為:

- 網路訪問限制;

- 推遲應用的 alarms、syncs 和 jobs;

- GPS 以及 Wi-Fi 掃描限制;

- 普通優先順序 Firebase Cloud Messaging 訊息限制;

  • 許可權變更

- 系統將限制訪問應用私有目錄;

- 在應用外公開 file://URI會導致 FileUriExposedException。開發者可以使用 FileProvider 在應用間進行檔案共享;

  • 系統阻止應用連結非 NDK 庫。

要了解 Android 7.0 (API 等級 24) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文件。


早於 Android 8.0 (API 等級 26)

下文列舉內容適用於針對 Android 8.0 或更高版本平臺開發的應用:

  • 後臺執行限制 (Background Execution Limits)

- 若您的應用不執行在前臺,系統將會限制服務:

·· 當應用試圖呼叫 startService() startService 又被禁止時,startService() 會丟擲異常;

·· startForegroundService() 應用必須使用 startForeground()和 startForegroundService() 函式啟動前臺服務;

·· 請前往 Android 8.0 (API 等級 26) 《行為變更》頁面,仔細閱讀關於 JobScheduler API 的變更;

·· Firebase Cloud Messaging 要求 10.2.1 或更高版本的 Google Play 服務 SDK;

·· Firebase Cloud Messaging documentation 在使用 Firebase Cloud Messaging 時,訊息投遞受限於後臺執行限制。若訊息接收需要必要後臺工作,如後臺資料同步,您的應用須要通過 Firebase Job Dispatcher 或者 JobIntentService 排程任務。詳情請閱覽《Firebase Cloud Messaging 文件》

- 隱式廣播限制:

·· 系統會限制隱式廣播。有關處理後臺事件詳情,請閱讀JobSechduler API 文件;

·· 後臺位置限制;

·· 後臺執行的應用訪問位置資料受限;

支援 Google Play 服務的裝置可以通過 fused location provider 定期獲取位置更新。

  • 通知渠道

- 您應該為每個渠道分別定義通知中斷設特性:

·· 您必須將通知分配到某一渠道 (channel),以便通知顯示;

·· 該版本 Android 平臺支援 NotificationCompat.Builder

  • 隱私

- ANDROID_ID 會根據每個應用簽署金鑰確定作用域。

要了解 Android 8.0 (API 等級 26) 的詳細變更,請閱覽該版本的《行為變更》(Behavior Changes) 文件。

檢視更多指導文件連結


現代化您的應用

當您在更新應用目標 API 等級時,請考慮應用平臺近期釋出的新功能,讓您的應用更為現代化併為使用者帶去更好的體驗。

  • 請將您的 app 從 Google Cloud Messaging (GCM) 遷移至 Firebase Cloud Messaging 最新版本;

  • 使用高階視窗管理:

- Declare Restricted Screen Support 支援更大寬屏比率 (大於 16:9),讓應用能夠利用最新的硬體技術。確保您的應用調整大小後能填充可用的螢幕空間。萬不得已情況下,可以宣告最大螢幕寬高比。更多有關最大螢幕寬高比資訊,請閱覽《宣告受限螢幕支援》

- multiple displays 新增多視窗支援,提升 app 效率並管理多螢幕適配;

- 如果最小化應用能夠幫助您改善使用者體驗,您可新增畫中畫支援;

- 針對凹口螢幕裝置的優化:

·· 不要假定狀態列高度,而是使用 WindowInsets 以及View.OnApplyWindowInsetsListener

·· 不要假定應用是全屏顯示的,而是通過呼叫View.getLocationInWindow() (注意:不是View.getLocationOnScreen()) 來確定應用螢幕位置;

·· 在處理 MotionEvent 時,呼叫 MotionEvent.getX() 和MotionEvent.getY();而非 MotionEvent.getRawX() MotionEvent.getRawY()

  • 使用現代攝像頭支援:

- 使用 Camera2 API 最大化攝像頭利用率;

- Pixel 2 devices 在 Pixel 2 裝置上啟用 Pixel Visual Core 加速 HDR+ 處理。

檢查並更新您的 SDK 和庫

請確保您使用的三方 SDK 依賴項支援 API 26:部分 ADK 供應商會在釋出說明中寫明是否支援;其它供應商則須要進一步調查。如果您使用的 SDK 不支援 API 26,請儘快與 SDK 供應商合作解決該問題。

此外,請注意您的應用或者遊戲中的 targetSdkVersion 可能會限制訪問私有 Android 平臺庫,請閱覽《將 NDK 應用連結至平臺庫》獲取進一步資訊。

您還須要驗證您正在使用的 Android 支援庫可能存在的任何限制。和以往一樣,您必須確保應用中的 compileSdkVersion 與 Android 支援庫主要版本能夠順利相容。

我們推薦您選擇小於或等於 Support Library 主要版本的 targetSdkVersion ,並建議您升級到近期釋出的相容 Support Library,從而能夠使用到最新版本的相容性特性和錯誤修正功能。

 檢視更多指導文件連結

測試您的應用

在更新完應用的 API 等級和功能後,您須要測試一些核心用例。下文列舉的幾條建議並沒有涵蓋所有情況,但希望能給您提供指導作用。我們建議進行以下幾個方面的測試:

  • 測試應用相容 API 26, 不產生錯誤和警告;

  • 您的應用應該有相應策略來妥善應對使用者拒絕訪問許可權的情況,並提示使用者授予許可權。為了達到該效果,您須要:

- 前往應用的資訊頁面,然後拒絕每個許可權;

- 開啟應用,確保沒有崩潰;

- 進行核心用例測試,並確保所有必須許可權請求再被顯示;

  • 妥善應對 Doze 模式,達到預期效果且不導致錯誤:

- 在應用執行時,使用 adb 讓您的測試裝置進入 Doze 模式:

·· 測試任何觸發 Firebase Cloud Messaging 訊息的用例;

·· 測試任何需要使用鬧鐘或者任務用例;

·· 消除所有後臺服務依賴;

- 設定您的應用進入待機模式:

·· 測試任何觸發 Firebase Cloud Messaging 訊息的用例;

·· 測試任何需要使用鬧鐘的用例;

  • 處理新拍攝的照片以及視訊:

- 檢查您的應用是否妥善處理 ACTION_NEW_PICTURE 以及 ACTION_NEW_VIDEO 廣播限制 (即移動至 JobScheduler 任務);

- 確保任何依賴此類事件的重要用例都能順利執行;

  • 應用間分享檔案:

- 請測試所有涉及到應用間分享檔案資料的案例 (即使是同一開發者開發的應用);

- 請測試其它應用是否能夠成功顯示內容,而且不引發崩潰。

滿足 Google Play 目標 API 等級 (targetSdkLevel) 的要求


相關文章