Android 是專為許多不同裝置而設計,例如手機、平板電腦和電視。多元的裝置可為您的應用程式帶來龐大的潛在目標對象。您的應用程式必須能容許功能變異性,並提供可配合不同螢幕設定靈活調整的使用者介面,才能在所有裝置上順利運作。
為協助裝置相容性,Android 提供動態應用程式架構,讓您在靜態檔案中提供特定設定的應用程式資源,例如針對不同螢幕大小提供不同的 XML 版面配置。接著,Android 會根據目前的裝置設定載入合適的資源。秉持著認真考量應用程式設計和其他應用程式資源的做法,您可以發布單一應用程式套件 (APK),在各種裝置上提供最佳的使用者體驗。
不過,您也可以視需要指定應用程式的功能需求,並控管可從 Google Play 商店安裝應用程式的裝置類型。本文件說明如何控管哪些裝置可存取您的應用程式,以及如何準備應用程式以觸及正確的目標對象。
「相容性」是什麼意思?
就 Android 開發而言,有兩種相容性:裝置相容性和應用程式相容性。
由於 Android 是開放原始碼專案,因此任何硬體製造商都可以建構執行 Android 作業系統的裝置。不過,只有在裝置可正確執行為 Android 執行環境編寫的應用程式時,才算是「Android 相容」。Android 執行環境的確切詳細資料由 Android 相容性計畫定義。每部裝置都必須通過 Compatibility Test Suite (CTS) 才能視為相容。
身為應用程式開發人員,您不必擔心裝置是否與 Android 相容,因為只有與 Android 相容的裝置才會內建 Google Play 商店。因此,如果使用者從 Google Play 商店安裝您的應用程式,表示他們使用的是 Android 相容裝置。
不過,您必須考量應用程式是否與每種可能的裝置設定相容。由於 Android 可在多種裝置設定下執行,因此部分功能可能無法在所有裝置上使用。舉例來說,有些裝置可能沒有指南針感應器,如果應用程式的核心功能需要使用指南針感應器,則應用程式僅會與具備該功能的裝置相容。
控管應用程式在裝置上的可用性
Android 支援多種功能,可讓應用程式透過平台 API 加以運用。有些功能是以硬體為基礎的功能,例如指南針感應器,有些則是以軟體為基礎的功能,例如應用程式小工具,有些則取決於平台版本。並非所有裝置都支援所有功能,因此您可能需要根據應用程式的必要功能,控管應用程式在裝置上的供應情況。
為了讓應用程式擁有盡可能多的使用者,請使用單一 APK 或 AAB 支援盡可能多的裝置設定。在大多數情況下,您可以透過在執行階段停用選用功能,並為不同的設定提供替代方案的應用程式資源 (例如針對不同螢幕尺寸提供不同的版面配置) 來達成這項目標。如有必要,您可以根據下列裝置特性,透過 Google Play 商店限制特定裝置無法使用您的應用程式:
裝置功能
為了根據裝置功能管理應用程式的可用性,Android 會為任何可能無法在所有裝置上提供的硬體或軟體功能定義功能 ID。例如,指南針感應器的功能 ID 為 FEATURE_SENSOR_COMPASS
,而應用程式小工具的功能 ID 為 FEATURE_APP_WIDGETS
。
如有需要,您可以在應用程式資訊清單檔案中使用 <uses-feature>
元素宣告這項功能,藉此防止使用者在裝置未提供必要功能的情況下安裝您的應用程式。
舉例來說,如果裝置沒有指南針感應器,導致您的應用程式無法正常運作,您可以使用以下資訊清單標記,將指南針感應器宣告為必要要求:
<manifest ... > <uses-feature android:name="android.hardware.sensor.compass" android:required="true" /> ... </manifest>
Google Play 商店會比較應用程式所需的功能與每位使用者裝置上提供的功能,以判斷應用程式是否與各裝置相容。如果裝置不具備應用程式所需的所有功能,使用者就無法安裝應用程式。
不過,如果應用程式的主要功能不需要裝置功能,請將 required
屬性設為 "false"
,並在執行階段檢查裝置功能。如果目前的裝置不支援應用程式功能,請優雅降級對應的應用程式功能。舉例來說,您可以呼叫 hasSystemFeature()
來查詢功能是否可用,如下所示:
Kotlin
if (!packageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { // This device doesn't have a compass. Turn off the compass feature. disableCompassFeature() }
Java
PackageManager pm = getPackageManager(); if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) { // This device doesn't have a compass. Turn off the compass feature. disableCompassFeature(); }
如要進一步瞭解可用於控制應用程式在 Google Play 商店中顯示情形的所有篩選器,請參閱「Google Play 的篩選功能」說明文件。
平台版本
不同裝置可能會執行不同版本的 Android 平台,例如 Android 12 或 Android 13。每個連續平台版本經常都會新增前一個版本不支援的 API。每個平台版本都會指定 API 級別,用於指出可用的 API 組合。舉例來說,Android 12 是 API 級別 31,Android 13 則是 API 級別 33。
您必須在 build.gradle
檔案中指定 minSdkVersion
和 targetSdkVersion
值:
Kotlin
android { defaultConfig { applicationId = "com.example.myapp" // Defines the minimum API level required to run the app. minSdkVersion(30) // Specifies the API level used to test the app. targetSdkVersion(33) ... } }
Groovy
android { defaultConfig { applicationId 'com.example.myapp' // Defines the minimum API level required to run the app. minSdkVersion 30 // Specifies the API level used to test the app. targetSdkVersion 33 ... } }
如要進一步瞭解 build.gradle
檔案,請參閱「建構設定」。
每個後續版本的 Android 都會為使用先前平台版本 API 建構的應用程式提供相容性,因此您的應用程式在使用已記錄的 Android API 時,就能與未來版本的 Android 相容。
不過,如果應用程式使用較新平台版本中新增的 API,但主要功能並不需要這些 API,請在執行階段檢查 API 級別,並在 API 級別過低時優雅降級對應的功能。在這種情況下,請將 minSdkVersion
設為應用程式主要功能的最低值,然後將目前系統的版本 SDK_INT
與 Build.VERSION_CODES
中的程式碼名稱常數進行比較,以便找出您要檢查的 API 級別,如以下範例所示:
Kotlin
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Running on something older than API level 11, so disable // the drag and drop features that use ClipboardManager APIs. disableDragAndDrop() }
Java
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) { // Running on something older than API level 11, so disable // the drag and drop features that use ClipboardManager APIs. disableDragAndDrop(); }
畫面設定
Android 可在各種尺寸的裝置上執行,包括手機、平板電腦和電視。為了依螢幕類型將裝置分類,Android 為每部裝置定義了兩種特性:螢幕尺寸 (螢幕的實體尺寸) 和螢幕密度 (螢幕上像素的實體密度,稱為 DPI)。為了簡化不同的設定,Android 會將這些變數一般化為群組,讓目標更容易指定:
- 四種通用尺寸:小、正常、大和特大
- 幾種通用密度:mdpi (中密度)、hdpi (高密度)、xhdpi (超高密度)、xxhdpi (超級高密度) 和其他
根據預設,您的應用程式可與所有螢幕大小和密度相容,因為系統會視需要針對每個螢幕調整 UI 版面配置和圖片資源。針對常見的螢幕密度提供最佳化點陣圖圖片。
盡可能使用彈性版面配置,藉此改善使用者體驗。如果有多個版面配置可供大型設定變更 (例如直向和橫向,或大型與小型視窗大小),建議您提供可彈性調整設定中小型版面配置的替代版面配置。這有助於改善平板電腦、手機和折疊式裝置等板型規格的使用者體驗。在多視窗模式下變更視窗大小時,這項功能也相當實用。
如要瞭解如何為不同螢幕建立替代資源,以及如何在必要時將應用程式限制為特定螢幕大小,請參閱「螢幕相容性總覽」和「大螢幕應用程式品質規範」。
基於業務考量,控管應用程式的適用國家/地區
除了根據裝置特性限制應用程式可用性之外,您可能還需要基於商業或法律原因限制應用程式可用性。在這種情況下,Google Play 商店提供 Play 管理中心提供的篩選選項,可讓您基於非技術因素 (例如使用者語言代碼或無線電信業者) 控管應用程式的可用性。
技術相容性的篩選 (例如必要的硬體元件) 一律取決於 APK 或 AAB 檔案中的資訊。不過,基於非技術因素 (例如地理/語言代碼) 的篩選條件一律會在 Google Play 管理中心中處理。
其他資源:
- 應用程式資源總覽
- 瞭解 Android 應用程式如何建構應用程式資源與應用程式程式碼的區隔,包括如何為特定裝置設定提供額外資源。
- Google Play 篩選器
- 瞭解 Google Play 商店可透過哪些方式防止應用程式在不同裝置上安裝。
- Android 中的權限
- Android 如何透過權限系統限制應用程式存取特定 API,並要求使用者同意應用程式使用這些 API。