裝置相容性總覽

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 檔案中指定 minSdkVersiontargetSdkVersion 值:

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(36)
        ...
    }
}

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 36
        ...
    }
}

如要進一步瞭解 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 (特高) 等

根據預設,應用程式會與所有螢幕大小和密度相容,因為系統會視需要調整每個螢幕的使用者介面版面配置和圖片資源。為常見的螢幕密度提供最佳化的點陣圖圖片。

盡可能使用彈性版面配置,提升使用者體驗。 如果版面配置適用於大型設定變更 (例如直向和橫向),或是大視窗與小視窗大小,請考慮提供可因應設定中較小變化的替代版面配置。這項功能可提升平板電腦、手機和摺疊式裝置等外型規格的使用者體驗。在多視窗模式下變更視窗大小時,這項功能也很有幫助。

如要瞭解如何為不同螢幕建立替代資源,以及如何在必要時將應用程式限制為特定螢幕大小,請參閱「螢幕相容性總覽」和「大螢幕應用程式品質規範」。

基於業務考量控管應用程式的適用國家/地區

除了根據裝置特性限制應用程式的供應情形,您可能還需要基於業務或法律原因,限制應用程式的供應情形。針對這類情況,Google Play 商店在 Play 管理中心提供篩選選項,可讓您基於非技術原因 (例如使用者地區或無線電信業者) 控制應用程式的適用性。

系統一律會根據 APK 或 AAB 檔案中的資訊,篩選出技術相容性 (例如必要硬體元件)。但如果篩選條件與技術無關 (例如地理區域),則一律會在 Google Play 管理中心處理。

其他資源:

應用程式資源總覽
說明 Android 應用程式的結構,包括如何將應用程式資源與應用程式程式碼分開,以及如何為特定裝置設定提供替代資源。
Google Play 篩選器
瞭解 Google Play 商店如何防止應用程式安裝在不同裝置上。
Android 中的權限
Android 如何透過權限系統限制應用程式存取特定 API,要求使用者同意應用程式使用這些 API。