Android 適用於許多不同裝置,例如手機、平板電腦和電視。如此廣泛的裝置類型能為您的應用程式帶來廣大的潛在目標對象。為了讓您的應用程式在這些裝置上順利執行,應用程式必須適應部分功能變化,使用者介面也要根據不同螢幕設定進行靈活調整。
為協助確保裝置相容性,Android 提供動態應用程式架構,您可以在靜態檔案中提供特定設定的應用程式資源,例如不同螢幕大小適用的 XML 版面配置。Android 接著會根據目前的裝置設定載入合適的資源。只要事先考慮應用程式設計和額外的應用程式資源,您就能發布單一應用程式套件 (APK),在各種裝置上提供最佳使用者體驗。
不過,如有需要,您可以指定應用程式的功能需求,並控管哪些類型的裝置可從 Google Play 商店安裝應用程式。本文說明如何控管哪些裝置可存取您的應用程式,以及如何準備應用程式,觸及合適的目標對象。
「相容性」是什麼意思?
就 Android 開發而言,相容性分為兩種:裝置相容性和應用程式相容性。
由於 Android 是開放原始碼專案,任何硬體製造商都能建構執行 Android 作業系統的裝置。但只有在裝置能正確執行為 Android 執行環境編寫的應用程式時,才算是「Android 相容」。Android 執行環境的詳細資料由 Android 相容性計畫定義。每部裝置都必須通過相容性測試套件 (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 相容,同時使用已記錄的 Android API。
不過,如果應用程式使用較新平台版本新增的 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。