您上傳的 APK 必須符合 Google Play 的目標 API 級別規定。
自 2024 年 8 月 31 日起:
- 新應用程式和應用程式更新必須指定 Android 14 (API 級別 34) 以上版本,才能提交至 Google Play;Wear OS 和 Android TV 應用程式除外,這類應用程式必須指定 Android 13 (API 級別 33) 以上版本。
- 現有應用程式必須指定 Android 13 (API 級別 33) 以上版本為目標,才能繼續提供給裝置 Android 作業系統高於應用程式目標 API 級別的新使用者。若應用程式指定 Android 12 (API 級別 31) 以下版本 (Wear OS 和 Android 11 (API 級別 29) 以下版本),就只能在 Android 作業系統與應用程式的目標 API 級別相同或更低的裝置上執行。
如果您需要更多時間更新應用程式,可以申請將期限延至 2024 年 11 月 1 日。今年稍晚,您就能在 Play 管理中心存取應用程式的期限展延表單。
以下是不適用這些規定的應用程式:
- 只有特定機構使用者能存取的永久性私人應用程式,僅限內部發行。
- 指定 Android Automotive OS 的應用程式,或封裝指定 Android Automotive OS 的 APK。
為何要指定較新的 SDK?
每個新的 Android 版本都會推出變更,可提升安全性與效能,並提升 Android 使用者體驗。部分變更僅適用於透過 targetSdkVersion
資訊清單屬性 (也稱為目標 API 級別) 明確宣告支援的應用程式。
當您設定讓應用程式支援最新的 API 級別,就能讓使用者享有這些改善內容,同時應用程式仍可在舊版 Android 上執行。指定最新的 API 級別也有助於應用程式利用平台的最新功能,讓使用者用得開心。此外,自 Android 10 (API 級別 29) 起,如果應用程式指定 Android 5.1 (API 級別 22) 以下版本,使用者在首次啟動應用程式時會看到警告訊息。
本文件特別介紹了一些重點,協助您更新目標 API 級別,以符合 Google Play 規定。請根據遷移目標版本,參閱下列各節的操作說明。
從 Android 12 以上版本 (API 級別 31) 遷移至較新版本
如要更新應用程式以指定較新版本的 Android,請遵循相關行為變更清單:
從 Android 11 (API 級別 30) 遷移至 Android 12 (API 級別 31)
安全性和權限
- 藍牙:您必須使用
BLUETOOTH_SCAN
、BLUETOOTH_ADVERTISE
或BLUETOOTH_CONNECT
權限,取代BLUETOOTH
和BLUETOOTH_ADMIN
權限的宣告。您不再需要為藍牙作業提出LOCATION
執行階段權限要求。 - 位置:使用者可以要求應用程式只擷取大概位置資訊。每次要求
ACCESS_FINE_LOCATION
時,都必須要求ACCESS_COARSE_LOCATION
權限。- 意圖篩選器:如果應用程式包含使用意圖篩選器的活動、服務或廣播接收器,您必須為這些元件明確宣告 android:exported 屬性。
- 休眠:如果應用程式有一段時間未使用,可能會進入休眠模式。在休眠模式下,系統會重設應用程式的執行階段權限和快取,因此您無法執行工作或快訊。您可以檢查應用程式的休眠狀態。
- 待處理意圖可變動性:您必須為應用程式所建立的每個 PendingIntent 物件指定可變動性。
使用者體驗
- 自訂通知:含有自訂內容檢視畫面的通知將不再使用整個通知區域,系統會改為套用標準範本。這個範本可確保自訂通知與所有狀態的其他通知都具有相同的裝飾。這個行為與
Notification.DecoratedCustomViewStyle
的行為幾乎相同。 - Android 應用程式連結驗證異動:使用 Android 應用程式連結驗證功能時,請確保意圖篩選器包含 BROWSABLE 類別,並支援 HTTPS 配置。
效能
前景服務啟動限制:如要指定 Android 12 以上版本,應用程式在背景執行時就無法啟動前景服務 (少數特殊情況除外)。如果應用程式嘗試在背景執行時啟動前景服務,就會發生例外狀況 (少數特殊情況除外)。
在應用程式於背景執行的情況下,建議您使用 WorkManager 安排及啟動加急作業。如要完成使用者要求且具時效性的動作,請在精確鬧鐘內啟動前景服務。
通知彈跳床限制:當使用者輕觸通知時,部分應用程式會啟動應用程式元件,啟動使用者查看並互動的活動。這個應用程式元件稱為通知彈跳床。
應用程式不得透過用做通知彈跳床的服務或廣播接收器啟動活動。使用者輕觸通知中的通知或動作按鈕後,您的應用程式就無法在服務或廣播接收器中呼叫
startActivity()
。
查看哪些變更會影響指定 Android 12 (API 級別 31) 為目標的應用程式。
從 Android 11 以下版本 (API 級別 30) 遷移
請選取您要從哪一個 Android 版本遷移:
移轉至 Android 5 (API 級別 21)
請依據版本查看下方對應的「行為變更」網頁,以確認您的應用程式已將這些版本推出的變更納入考量:
請按照下一節的說明繼續操作。
移轉至 Android 6 (API 級別 23)
以下注意事項適用於鎖定 Android 6.0 及更高版本平台的應用程式:
-
-
只能在執行階段中授予危險權限。您的 UI 操作流程必須提供授予這些權限的預設用途。
-
請盡可能讓應用程式準備好處理權限要求遭拒的情況。舉例來說,如果使用者拒絕存取裝置 GPS 的請求,請確保您的應用程式能以其他方式繼續執行。
-
如需 Android 6.0 (API 級別 23) 推出變更的詳盡清單,請參閱該平台版本的行為變更網頁。
請按照下一節的說明繼續操作。
移轉至 Android 7 (API 級別 24)
以下注意事項適用於鎖定 Android 7.0 及更高的平台版本的應用程式:
-
打盹和應用程式待命
請參閱「針對打盹和應用程式待命進行最佳化」一文 (其中包含在多個平台版本推出的漸進式變更內容),根據當中所述行為設計應用程式。
裝置處於打盹和應用程式待命模式時,系統的行為如下:
- 限制網路存取權
- 延後鬧鐘、同步處理作業及工作
- 限制 GPS 和 Wi-Fi 掃描
- 限制一般優先順序 Firebase 雲端通訊訊息。
-
權限變更
- 系統限制存取應用程式的不公開目錄。
-
在應用程式以外顯示
file://
URI 會觸發FileUriExposedException
。如果必須在在應用程式以外分享檔案,請執行FileProvider
-
系統禁止連結至非 NDK 程式庫。
如需 Android 7.0 (API 級別 24) 推出變更的詳盡清單,請參閱該平台版本的行為變更網頁。
請按照下一節的說明繼續操作。
移轉至 Android 8 (API 級別 26)
以下注意事項適用於鎖定 Android 8.0 及更高版本平台的應用程式:
-
背景執行限制
-
系統會對未在前景執行的應用程式限制其服務。
-
若
startService()
受到禁止,現在當應用程式嘗試叫用startService()
會產生例外狀況。 -
若要啟用前景服務,應用程式必須使用
startForeground()
和startForegroundService()
。 - 仔細檢查對 JobScheduler API 所做的變更,刊載於 Android 8.0 (API 級別 26) 行為變更頁面。
- Firebase 雲端通訊須使用 Google Play 服務 SDK 10.2.1 版或更高版本。
- 使用 Firebase 雲端訊息時,訊息的傳送會受限於背景執行的限制。如果需要在收到訊息後執行背景工作 (例如執行背景資料同步),應用程式應改用 Firebase Job Dispatcher 或 JobIntentService 安排工作執行時間。詳情請參閱Firebase 雲端訊息說明文件。
-
若
-
隱式廣播
-
使用隱式廣播時會受到限制。若要進一步瞭解和處理背景事件相關的資訊,請參閱
JobScheduler
API 的說明文件。
-
使用隱式廣播時會受到限制。若要進一步瞭解和處理背景事件相關的資訊,請參閱
-
背景位置資訊限制
-
在背景執行的應用程式在存取位置資料時會受到限制。
- 有 Google Play 服務的裝置請使用 整合式位置預測提供工具,定期取得位置更新資訊。
-
在背景執行的應用程式在存取位置資料時會受到限制。
-
系統會對未在前景執行的應用程式限制其服務。
-
通知管道
- 您應為每個管道定義通知中斷屬性。
- 您必須為管道指派通知,系統才會顯示通知。
-
這個平台版本支援
NotificationCompat.Builder
。
-
隱私權
- 每個應用程式簽署金鑰有其所屬的 ANDROID_ID。
如需 Android 8.0 (API 級別 26) 推出變更的詳盡清單,請參閱該平台版本的行為變更網頁。
從 Android 8 (API 26) 遷移至 Android 9 (API 28)
- 電源管理
-
前景服務權限
- 必須要求一般權限
FOREGROUND_SERVICE
(非執行階段權限)
- 必須要求一般權限
-
隱私設定變更
- 限制存取背景感應器
- 限制存取通話記錄,現在移入
CALL_LOG
權限群組 - 限制存取電話號碼,必須具備
READ_CALL_LOG
的權限 - 限制存取 Wi-Fi 資訊
如需 Android 9.0 (API 級別 28) 推出變更的詳盡清單,請參閱行為變更。
從 Android 9 (API 級別 28) 遷移至 Android 10 (API 級別 29)
-
使用全螢幕意圖的通知
-
必須要求一般權限
USE_FULL_SCREEN_INTENT
(非執行階段權限)。
-
必須要求一般權限
-
支援折疊式裝置和大螢幕裝置
-
現在,多個活動可同時進入「已恢復」狀態,但實際上焦點只會在一個活動上。
-
這項變更會影響
onResume()
和onPause()
的行為。 -
訂閱
onTopResumedActivityChanged()
即可偵測到新的「最上方已恢復」生命週期的概念。- 只有一個活動處於「最上方已恢復」狀態。
-
這項變更會影響
-
將
resizeableActivity
設定為false
時,應用程式也可以另外指定minAspectRatio
,自動為長寬比較窄的應用程式加上上下黑邊的效果。
-
現在,多個活動可同時進入「已恢復」狀態,但實際上焦點只會在一個活動上。
-
隱私設定變更
-
限定範圍儲存空間
- 外部的儲存空間存取僅限於應用程式的特定目錄,以及應用程式已建立的特定媒體類型。
-
當應用程式在背景執行,要存取受限定的位置必須具備
ACCESS_BACKGROUND_LOCATION
權限。 - 對無法重設的 ID (例如 IMEI 和序號) 限制存取。
-
對體能活動資訊限制存取,例如使用者步數必須具備
ACTIVITY_RECOGNITION
權限。 -
限制存取某些電話、藍牙和 Wi-Fi API,必須具備
ACCESS_FINE_LOCATION
權限。 -
限制存取 Wi-Fi 設定
- 應用程式無法直接啟用或停用 Wi-Fi,必須使用設定面板來啟用或停用 Wi-Fi。
-
限制啟動 Wi-Fi 網路連線,必須使用
WifiNetworkSpecifier
或WifiNetworkSuggestion
。
-
限定範圍儲存空間
從 Android 10 (API 級別 29) 遷移至 Android 11 (API 級別 30)
-
隱私權
- 強制使用限定範圍儲存空間:應用程式應採用限定範圍儲存模型,將應用程式專屬的內容、媒體和其他類檔案儲存到一個專屬位置,並經由這個位置存取這些檔案。
- 自動重設權限:如果使用者已連續數月未與應用程式互動,系統會自動重設應用程式的私密資訊權限。這項功能對大多數的應用程式沒有影響。如果應用程式主要在沒有使用者互動的情況下主要在背景運作,您可以考慮要求使用者停用自動重設。
- 背景位置資訊存取權:應用程式必須分別要求前景和背景的位置資訊存取權。 只能透過應用程式設定授予背景位置資訊存取權,而無法在執行階段權限對話方塊中進行。
- 套件瀏覽權限:當應用程式查詢裝置上已安裝的應用程式和服務清單時,系統會篩選傳回的清單。
-
安全性
- 系統不再支援經過壓縮的「resource.arsc」檔案
- 現在必須使用 APK Signature Scheme v2。為了顧及回溯相容性,開發人員也應繼續使用 APK Signature Scheme v1 進行簽署。
- 非 SDK 介面限制。對於指定 API 級別 30 的應用程式,我們不建議使用非 SDK 介面,因為系統現已封鎖部分非 SDK 介面。如需已封鎖的非 SDK 介面完整清單,請參閱「Android 11 中現已封鎖的非 SDK 介面」。
如需 Android 11 (API 級別 30) 推出變更的詳盡清單,請參閱行為變更頁面。
請按照上一節的操作說明繼續更新至 API 31。
翻新應用程式
在為應用程式更新到目標 API 級別時,請考慮透過最新平台功能更新應用程式,讓使用者享有愉快的使用體驗。
- 建議您使用 CameraX (目前為 Beta 版),充分運用相機。
- 使用 Jetpack 元件即可遵循最佳做法,省去編寫樣板程式碼的麻煩,簡化複雜的工作,讓您專心處理重要的程式碼。
- 使用 Kotlin 就能使用更少的程式碼以更快的速度編寫出更出色的應用程式。
- 務必遵守隱私權規定和最佳做法。
- 在應用程式中新增對深色主題的支援。
- 在應用程式中增加對手勢操作的支援。
- 將應用程式從 Google 雲端通訊 (GCM) 遷移至 Firebase 雲端通訊最新版本。
- 充份運用進階視窗管理。
- 支援更大的顯示比例 (大於 16:9),善用硬體最新技術的優勢。請確認您的應用程式可調整大小以填滿可用的螢幕空間。請只在最後排序時宣告最大顯示比例。如要進一步瞭解最大顯示比例,請參閱「宣告受限螢幕支援」。
- 新增多視窗模式支援功能,協助應用程式提升工作效率及管理多個螢幕。
- 如果優質的最小化應用程式可以改善使用者體驗,請新增子母畫面支援功能。
- 為有螢幕凹口的裝置進行最佳化。
- 不要假設狀態列的高度,請改用
WindowInsets
和View.OnApplyWindowInsetsListener
。如要瞭解詳情,請觀看 droidcon NYC 2017 影片。 - 請勿假設應用程式可完整佔用整個視窗。請改用
View.getLocationInWindow()
(而非View.getLocationOnScreen()
) 確認其位置。* 處理MotionEvent
時,請使用MotionEvent.getX()
和MotionEvent.getY()
,而非MotionEvent.getRawX()
、MotionEvent.getRawY()
。
查看並更新您的 SDK 和程式庫
請確認第三方 SDK 依附元件支援 API 31:有些 SDK 供應商會在資訊清單中發布這項資訊,否則需要額外調查。如果您使用的 SDK 不支援 API 31,請與 SDK 供應商合作,優先解決這個問題。
另請注意,應用程式或遊戲的 targetSdkVersion
可能會限制對私人 Android 平台程式庫的存取權,詳情請參閱「連結至平台程式庫的 NDK 應用程式」。
您也應確認您目前使用的 Android 支援資料庫版本中有哪些限制。一如既往,您必須確保 Android 支援資料庫主要版本與應用程式的 compileSdkVersion
相容。
建議您選擇小於或等於支援資料庫主要版本的 targetSdkVersion
。您最好更新至最新的相容支援資料庫,以便使用最新的相容性功能和錯誤修正。
測試應用程式
適當更新應用程式的 API 級別和功能後,建議您測試部分核心用途。以下僅列舉部分建議,以引導您進行測試。我們建議您測試以下項目:
- 您的應用程式已編譯為 API 29,且沒有出現錯誤或警告。
您的應用程式對使用者拒絕權限要求的情況已有應對策略,且會要求使用者提供權限。方法如下:
- 前往應用程式的「應用程式資訊」畫面,停用所有權限。
- 開啟應用程式,確認不會發生當機情形。
- 執行核心用途測試,並確認系統會重新提示必要權限。
「打盹」模式可呈現預期結果,且不會發生錯誤。
- 使用 ADB,在應用程式執行期間將測試裝置進入「打盹」模式。
- 測試所有會觸發 Firebase 雲端通訊訊息的用途。
- 測試所有使用鬧鐘或工作的用途。
- 清除背景服務的所有依附元件。
- 將應用程式設為「應用程式待命」模式
- 測試所有會觸發 Firebase 雲端通訊訊息的用途。
- 測試所有使用鬧鐘的用途。
- 使用 ADB,在應用程式執行期間將測試裝置進入「打盹」模式。
處理拍攝的新相片 / 影片
- 檢查應用程式是否正確處理受限制的
ACTION_NEW_PICTURE
和ACTION_NEW_VIDEO
廣播訊息 (也就是移至 JobScheduler 工作)。 - 確認所有依賴這些事件的重大用途都能正常運作。
- 檢查應用程式是否正確處理受限制的
處理與其他應用程式共用檔案的作業 - 測試所有與其他應用程式共用檔案資料的用途 (包括同一開發人員的其他應用程式)
- 測試其他應用程式是否能看到內容,且不會觸發當機。
其他資訊
在 Google Play 管理中心選擇接收電子郵件,以便我們傳送 Android 和 Google Play 的重要最新消息和公告,包括我們的每月合作夥伴電子報。