裝置相容性總覽

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(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_INTBuild.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。