Google Play 的篩選功能

當使用者透過 Google Play 搜尋或瀏覽可供下載的應用程式時,系統會根據與裝置相容的應用程式篩選結果。 舉例來說,如果應用程式需要使用相機,Google Play 就不會在沒有相機的裝置上顯示該應用程式。這項「篩選功能」可協助開發人員管理應用程式的發行,並確保使用者能享有最佳體驗。

Google Play 篩選功能是以多種應用程式中繼資料和配置設定為基礎,包括資訊清單宣告、必要程式庫、架構依附元件,以及 Google Play 管理中心設定的發行控制項 (例如指定地理區域、價格等)。

Google Play 篩選功能部分是以資訊清單宣告和 Android 架構的其他方面為基礎,但實際的篩選行為與架構的不同,而且不受特定 API 級別限制。本文指定了 Google Play 目前使用的篩選規則。

Google Play 篩選器的運作方式

Google Play 採用下述篩選器限制,以決定是否要向在 Google Play 應用程式中瀏覽或搜尋應用程式的使用者顯示您的應用程式。

在決定是否要顯示應用程式時,Google Play 會檢查裝置的軟硬體需求,以及電信業者、位置和其他特性,然後將這些內容與應用程式資訊清單檔案和發布詳細資料所示的限制和依附元件互相比較。

根據篩選器規則,如果應用程式與裝置相容,Google Play 就會向使用者顯示應用程式。如果不相容,即便使用者點選深層連結直接導向至 Google Play 內的應用程式 ID,藉此特別請求應用程式,Google Play 仍會在搜尋結果和類別瀏覽當中隱藏應用程式。

您可以為應用程式選用任何適用的篩選器組合。舉例來說,您可以在應用程式內設定 minSdkVersion 需求 "4" 並設定 smallScreens="false",則在將應用程式上傳到 Google Play 時,即可僅鎖定歐洲國家/地區 (電信業者)。因此,Google Play 篩選器會在未完全符合以上三項要求的裝置上隱藏應用程式。

所有篩選限制都與應用程式的版本相關聯,並可能因版本不同而有所變動。舉例來說,如果使用者安裝了您的應用程式,而您發布的更新讓使用者無法再查看該應用程式,則使用者不會看到有可用更新。

Google Play 網站的篩選功能

當使用者瀏覽 Google Play 網站時,就能看到所有已發行的應用程式。不過,Google Play 網站會比較使用者每部註冊裝置的應用程式要求,以便瞭解相容性,並且只會在應用程式與裝置相容時才允許安裝。

根據應用程式資訊清單篩選

大多數的篩選器由應用程式資訊清單檔案 AndroidManifest.xml 中的元素觸發,但並非資訊清單檔案中的所有元素均能觸發篩選功能。表 1 列出了應用於觸發篩選功能的資訊清單元素,並說明各項元素的篩選功能如何運作。

表 1. 觸發 Google Play 篩選功能的資訊清單元素。

資訊清單元素 篩選器名稱 運作方式
<supports-screens> 螢幕大小

應用程式會設定 <supports-screens> 元素的屬性,以指出可支援的螢幕大小。應用程式發布後,Google Play 會參考這些屬性,並根據使用者裝置的螢幕大小來決定是否向使用者顯示應用程式。

一般而言,Google Play 會假設裝置上的平台可配合較大的螢幕調整較小的版面配置,但無法配合較小的螢幕調整較大的版面配置。因此,如果應用程式宣告僅支援「一般」螢幕大小,則 Google Play 會對一般和大螢幕裝置提供應用程式,但會進行篩選確保小螢幕裝置無法使用應用程式。

如果應用程式未宣告 <supports-screens> 的屬性,Google Play 就會使用這些屬性的預設值 (具體預設值因 API 級別而異)。詳細說明:

  • android: minSdkVersionandroid: targetSdkVersion 設為 3 或以下的應用程式並未定義 <supports-screens> 元素,也沒有可用屬性。在這種情況下,Google Play 會假設應用程式是針對一般尺寸螢幕所設計,並且會向採用一般或更大螢幕的裝置顯示應用程式。

  • android: minSdkVersionandroid: targetSdkVersion 設為 4 或以上時,所有屬性的預設值皆為 "true"。如此一來,系統會根據預設將應用程式視為可支援所有螢幕大小。

範例 1
資訊清單宣告 <uses-sdk android:minSdkVersion="3">,且不含 <supports-screens> 元素。 結果:除非套用了其他篩選器,否則 Google Play 不會向小螢幕裝置的使用者顯示應用程式,但一般和大螢幕裝置的使用者會看到應用程式。

範例 2
資訊清單宣告 <uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4">,且不含 <supports-screens> 元素。 結果:除非套用了其他篩選器,否則 Google Play 會向所有裝置的使用者顯示應用程式。

範例 3
資訊清單宣告 <uses-sdk android:minSdkVersion="4">,且不含 <supports-screens> 元素。 結果:除非套用了其他篩選器,否則 Google Play 會向所有使用者顯示應用程式。

如要進一步瞭解如何宣告應用程式支援的螢幕大小,請參閱 <supports-screens> 和「支援各種螢幕」。

<uses-configuration> 裝置設定:
鍵盤、導覽、觸控螢幕

應用程式可以要求特定的硬體功能,而 Google Play 只會在具備所需硬體的裝置上顯示應用程式。

範例 1
資訊清單包含 <uses-configuration android:reqFiveWayNav="true" />,而使用者在不具備五向導覽控制的裝置上搜尋應用程式。結果:Google Play 不會向使用者顯示應用程式。

範例 2
資訊清單不含 <uses-configuration> 元素。結果:除非套用了其他篩選器,否則 Google Play 會向所有使用者顯示應用程式。

詳情請參閱 <uses-configuration>

<uses-feature> 裝置功能
(name)

應用程式可能會要求裝置具備特定的裝置功能。這項功能是在 Android 2.0 (API 級別 5) 中推出。

範例 1
資訊清單包含 <uses-feature android:name="android.hardware.sensor.light" />,而使用者在不具備光度感應器的裝置上搜尋應用程式。 結果:Google Play 不會向使用者顯示應用程式。

範例 2
資訊清單不含 <uses-feature> 元素。結果:除非套用了其他篩選器,否則 Google Play 會向所有使用者顯示應用程式。

如需完整資訊,請參閱 <uses-feature>

根據隱含功能篩選:在某些情況下,Google Play 會將透過 <uses-permission> 元素要求的權限視為相當於 <uses-feature> 元素中宣告的功能要求。詳情請參閱下方的 <uses-permission>

OpenGL-ES 版本
(openGlEsVersion)

應用程式可以使用 <uses-feature android:openGlEsVersion="int"> 屬性,要求裝置支援特定的 OpenGL-ES 版本。

範例 1
應用程式在資訊清單中多次指定 openGlEsVersion,藉此要求多個 OpenGL ES 版本。結果:Google Play 會假設應用程式需要指定版本的最高版本。

範例 2
應用程式要求 OpenGL-ES 1.1 版,且使用者在支援 OpenGL-ES 2.0 版的裝置上搜尋應用程式。結果:除非套用了其他篩選器,否則 Google Play 會向使用者顯示應用程式。如果裝置回報支援 OpenGL-ES X 版,Google Play 就會假設裝置也支援 X 以下的任何版本。

範例 3
使用者在未回報 OpenGL-ES 版本的裝置 (例如搭載 Android 1.5 以下版本的裝置) 上搜尋應用程式。結果:Google Play 會假設裝置僅支援 OpenGL-ES 1.0。Google Play 只會顯示未指定 openGlEsVersion 的使用者應用程式,或是未指定 OpenGL ES 1.0 以上版本的應用程式。

範例 4
資訊清單未指定 openGlEsVersion結果:除非套用了其他篩選器,否則 Google Play 會向所有使用者顯示應用程式。

詳情請參閱 <uses-feature>

<uses-library> 軟體程式庫

應用程式可能會要求裝置具備特定的共用程式庫。

範例 1
應用程式需要 com.google.android.maps 程式庫,而使用者在沒有 com.google.android.maps 程式庫的裝置上搜尋應用程式。結果:Google Play 不會向使用者顯示應用程式。

範例 2
資訊清單不含 <uses-library> 元素。結果:除非套用了其他篩選器,否則 Google Play 會向所有使用者顯示應用程式。

詳情請參閱 <uses-library>

<uses-permission>  

嚴格來說,Google Play 不會根據 <uses-permission> 元素進行篩選。但它可以讀取元素,以判斷應用程式是否具有未在 <uses-feature> 元素中正確宣告的硬體功能需求。舉例來說,如果應用程式要求 CAMERA 權限,但並未宣告 android.hardware.camera<uses-feature> 元素,Google Play 會認定應用程式需要相機,且不應在未提供相機功能的使用者裝置上顯示。

一般而言,如果應用程式要求取得硬體相關權限,Google Play 會假設應用程式需要基礎硬體功能,即使沒有對應到 <uses-feature> 宣告亦然。Google Play 隨後會根據 <uses-feature> 宣告隱含的功能設定篩選功能。

如需隱含硬體功能的權限清單,請參閱 <uses-feature> 元素的說明文件。

<uses-sdk> 最低架構版本 (minSdkVersion)

應用程式需要最低 API 級別。

範例 1
資訊清單包含 <uses-sdk android:minSdkVersion="3">,而且應用程式使用的是 API 級別 3 中引入的 API。使用者在具備 API 級別 2 的裝置上搜尋應用程式。結果:Google Play 不會向使用者顯示應用程式。

範例 2
資訊清單不含 minSdkVersion,而且應用程式使用的是 API 級別 3 中引入的 API。使用者在具備 API 級別 2 的裝置上搜尋應用程式。結果:Google Play 假設 minSdkVersion 是「1」,且該應用程式與所有 Android 版本相容。Google Play 會向使用者顯示應用程式,並允許使用者下載應用程式。應用程式會在執行階段停止運作。

為了避免發生第二種情況,建議您一律宣告 minSdkVersion。詳情請參閱 android:minSdkVersion

最高架構版本 (maxSdkVersion)

已淘汰。Android 2.1 以上版本不會檢查或強制執行 maxSdkVersion 屬性,如果在應用程式資訊清單中設定了 maxSdkVersion,SDK 也不會編譯。如果是已使用 maxSdkVersion 編譯的裝置,則 Google Play 會尊重這項設定,並以此進行篩選。

建議「不要」宣告 maxSdkVersion。詳情請參閱 android:maxSdkVersion

進階資訊清單篩選器

除了表 1 中的資訊清單元素以外,Google Play 也可以根據表 2 中的進階資訊清單元素來篩選應用程式。

這些資訊清單元素和觸發的篩選功能僅適用於特殊用途。它們適合特定類型的高效能遊戲和類似應用程式,需要嚴格的應用程式發行控制。大多數應用程式都不應使用這些篩選器

表 2. Google Play 篩選功能的進階資訊清單元素。

資訊清單元素摘要
<compatible-screens>

如果裝置螢幕大小和密度與 <compatible-screens> 元素中的任何螢幕設定 (由 <screen> 元素宣告) 不符,Google Play 就會篩選應用程式。

注意:在一般情況下,請勿使用這個資訊清單元素,這個元素會排除您未列出的所有螢幕大小和密度組合,進而大幅降低應用程式的潛在使用者數量。請改用 <supports-screens> 資訊清單元素 (如上方的表 1 所述),以便為未套用額外資源的螢幕設定啟用螢幕相容模式。

<supports-gl-texture>

除非裝置也支援應用程式所支援的一或多個 GL 紋理壓縮格式,否則 Google Play 會篩選應用程式。

其他篩選器

Google Play 會根據其他應用程式特性,決定是否要在特定裝置上對某使用者顯示或隱藏應用程式,如下表所示。

表 3. 影響 Google Play 篩選功能的應用程式和發布特性。

篩選器名稱 運作方式
發布狀態

只有已發布的應用程式會顯示在 Google Play 的搜尋與瀏覽內容中。

即使應用程式已取消發布,只要使用者在購買的應用程式、已安裝的應用程式或最近解除安裝的應用程式中的「下載內容」部分看到該應用程式,即可安裝。

應用程式遭到停權後,即使有顯示於「下載內容」,使用者也無法重新安裝或更新。

價格狀態

部分使用者無法看見付費應用程式。如要顯示付費應用程式,裝置必須搭載 Android 1.1 以上版本,且位於提供付費應用程式的國家/地區。如果裝置有 SIM 卡,SIM 卡的電信業者就會決定是否提供付費應用程式。如果裝置沒有 SIM 卡,系統會使用裝置的 IP 位址來決定裝置是否位於提供付費應用程式的國家/地區。

鎖定國家/地區

將應用程式上傳到 Google Play 時,您可以在「定價與發行」下選取要發行應用程式的國家/地區,應用程式便只會提供給指定國家/地區的使用者。

CPU 架構 (ABI)

如果應用程式包含指定特定 CPU 架構的原生資料庫 (例如 ARM EABI v7 或 x86),則僅支援該架構的裝置才能看到應用程式。如要進一步瞭解 NDK 並使用原生資料庫,請參閱 Android NDK 簡介

有複製保護的應用程式

Google Play 不再支援 Play 管理中心的「複製保護」功能,無法再以此篩選應用程式。如要保護應用程式,請改用「應用程式授權」。詳情請參閱「複製保護替代機制」。

使用不同篩選器發布多個 APK

有些特定的 Google Play 篩選器可讓您針對同一個應用程式發布多個 APK,以便為不同的裝置設定提供不同的 APK。舉例來說,假設您開發的電玩遊戲採用高擬真度圖像資源,則可以建立兩個分別支援不同紋理壓縮格式的 APK。這樣一來,就只需要加入每項裝置設定所需的紋理,APK 檔案大小便可因此縮減。視每部裝置支援的紋理壓縮格式而定,Google Play 會將您宣告支援裝置的 APK 提供給應用程式。

目前,只有在每個 APK 根據下列設定提供不同篩選器時,Google Play 才能針對同一個應用程式發布多個 APK:

所有其他篩選器仍然照常運作,但僅有這四種篩選器可以區分 Google Play 中同一個應用程式資訊內的 APK。舉例來說,如果 APK 的區別僅在於裝置是否擁有相機,那您「無法」針對同一個應用程式發布多個 APK。

注意:針對同一個應用程式發布多個 APK 是一種進階功能,大多數應用程式只能發布一個支援多種裝置設定的 APK。發布多個 APK 時,您必須遵守篩選器的特定規則,並特別留意每個 APK 的版本代碼,確保各項設定都有適當的更新路徑。

如要進一步瞭解如何在 Google Play 發布多個 APK,請參閱「支援多個 APK」。

另請參閱

  1. Android 相容性
  2. 支援多個 APK