ユーザーが Google Play でダウンロードするアプリを検索したりブラウジングしたりする際、その結果は、アプリがデバイスに対応しているかどうかに基づいてフィルタリングされます。たとえば、カメラを必要とするアプリの場合、カメラを搭載していないデバイスには表示されません。このフィルタリング機能により、デベロッパーはアプリの配信を管理し、可能な限り最良のユーザー エクスペリエンスを実現することができます。
Google Play でのフィルタリングは、複数のタイプのアプリ メタデータと設定を基準にしています。たとえば、マニフェストの宣言、必須ライブラリ、構造の依存関係、および Google Play Console で設定する一連の配信管理(対象地域や価格設定など)が含まれます。
Google Play のフィルタリングは、マニフェスト宣言と Android フレームワークの他の側面も部分的に考慮していますが、実際のフィルタリング動作はこのフレームワークとは異なり、特定の API レベルに関係するものではありません。このドキュメントでは、Google Play が使用する現行のフィルタリング ルールについて説明します。
Google Play でのフィルタリングの仕組み
Google Play は以下に説明するフィルタ制限を使用して、Google Play アプリでアプリをブラウジングしたり、検索したりしているユーザーにアプリを表示するかどうかを決定します。
Google Play は、アプリを表示するかどうかを決定する際に、デバイスのハードウェア要件とソフトウェア要件を確認し、同時に携帯通信会社、ロケーション、その他の特性も確認します。次にこれらを、アプリのマニフェスト ファイルと公開情報で指定されている制限事項や依存関係と比較します。
フィルタルールに基づいてアプリがデバイスに対応していれば、Google Play はそのアプリをユーザーに表示します。対応していない場合、Google Play は、検索結果やブラウジング中のカテゴリ内にそのアプリを表示しません。ユーザーが Google Play 内のアプリ ID を直接指定するディープリンクをタップして明示的にアプリをリクエストした場合でも、非対応のアプリが表示されることはありません。
アプリに対して利用可能なフィルタは、自由に組み合わせて使用することができます。たとえば、アプリの minSdkVersion
要件を "4"
に設定し、smallScreens="false"
に設定して、さらに Google Play へのアップロード時に、ヨーロッパ諸国(携帯通信会社)だけをターゲットにすることもできます。Google Play のフィルタにより、3 つの要件すべてに適合していないデバイスでは、このアプリが使用できなくなります。
すべてのフィルタリング制限はアプリのバージョンごとに固有のものであり、バージョン間で変えることができます。たとえば、あるユーザーがアプリをインストール済みであり、そのアプリをそのユーザーに表示しないアップデートを公開すると、そのユーザーにはアップデートが利用可能であることがわかりません。
Google Play ウェブサイト上のフィルタリング
ユーザーが Google Play ウェブサイトをブラウジングする際には、公開されているすべてのアプリが表示されます。ただし、Google Play ウェブサイトでは、ユーザーが登録しているデバイスごとにアプリが対応しているかどうかアプリの要件を比較し、デバイスに対応しているアプリだけをインストールできるようになっています。
アプリ マニフェストに基づくフィルタリング
フィルタの多くは、アプリのマニフェスト ファイル(AndroidManifest.xml)内の要素によってトリガーされます(ただし、マニフェスト ファイル内のすべての要素がフィルタリングをトリガーできるわけではありません)。フィルタリングのトリガーに使用できるマニフェスト要素のリストと、各要素のフィルタリングの仕組みについて表 1 に示します。
マニフェスト要素 | フィルタ名 | フィルタの仕組み |
---|---|---|
<supports-screens>
|
画面サイズ |
一般的なルールとして、Google Play は、デバイスのプラットフォームが小さいレイアウトを大きな画面に表示できる一方で、大きなレイアウトを小さな画面に表示できるような調整はできないと想定しています。そのため、アプリが「通常」の画面サイズだけをサポートすると宣言している場合、Google Play は、「通常」画面サイズのデバイスと「大型」画面サイズのデバイスの両方に対してそのアプリを使用できるようにしますが、「小型」画面サイズのデバイスに対してはそのアプリを使用できないようにフィルタリングします。 アプリが
例 1 例 2 例 3 アプリの画面サイズのサポートを宣言する方法については、 |
<uses-configuration>
|
デバイス構成: キーボード、ナビゲーション、タッチ スクリーン |
アプリは特定のハードウェア機能をリクエストできます。Google Play は、リクエストされたハードウェアを備えたデバイスに対してのみアプリを表示します。 例 1 例 2 詳細については、 |
<uses-feature>
|
デバイス機能 ( name ) |
アプリは、デバイスが特定のデバイス機能を備えていることをリクエストできます。この機能は Android 2.0(API レベル 5)で導入されました。 例 1 例 2 詳細については、 暗黙的な機能に基づくフィルタリング: Google Play は、 |
OpenGL-ES バージョン ( openGlEsVersion ) |
アプリは、 例 1 例 2 例 3 例 4 詳細については、 |
|
<uses-library> |
ソフトウェア ライブラリ | アプリは、デバイスが特定の共有ライブラリを備えていることをリクエストできます。 例 1 例 2 詳細については、 |
<uses-permission> |
厳密に言えば、Google Play は、 一般的に、アプリがハードウェア関連パーミッションをリクエストしている場合、対応する ハードウェア機能を暗黙的に指定するパーミッションのリストについては、 |
|
<uses-sdk> |
最小フレームワーク バージョン(minSdkVersion ) |
アプリは最小 API レベルを要求できます。 例 1 例 2 2 番目のシナリオを回避するために、常に |
最大フレームワーク バージョン(maxSdkVersion ) |
サポートが終了しました。Android 2.1 以降では、 |
拡張マニフェスト フィルタ
Google Play では、表 1 のマニフェスト要素のほかに、拡張マニフェスト要素に基づいてアプリをフィルタリングすることもできます。表 2 をご覧ください。
これらのマニフェスト要素と、これらの要素がトリガーするフィルタリングは例外的なユースケースのみに対応します。これらの要素は、アプリの配信に厳密なコントロールが必要な特定のタイプの高性能ゲームと、同様のアプリ向けに設計されています。ほとんどのアプリでは、このフィルタを使用しないでください。
マニフェスト要素 | まとめ |
---|---|
<compatible-screens> |
Google Play は、ユーザー デバイスの画面サイズと画面密度が 注: 通常、このマニフェスト要素は使用しないでください。この要素を使用すると、画面サイズと画面密度の組み合わせのうち、指定していないものがすべて除外されることになり、アプリの潜在的なユーザーベースが大幅に縮小する可能性があります。代わりに、 |
<supports-gl-texture> |
Google Play は、アプリでサポートされる 1 つ以上の GL テクスチャ圧縮フォーマットがデバイスで同様にサポートされない場合、アプリをフィルタリングします。 |
その他のフィルタ
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 Console のコピー防止機能のサポートを終了しました。今後、この機能に基づいてアプリをフィルタリングすることはありません。アプリを安全に保護するには、代わりにアプリのライセンス付与を使用してください。詳細については、コピー防止機能の後継機能をご覧ください。 |
異なるフィルタを使用した複数の APK の公開
一部の特定の Google Play フィルタでは、異なるデバイス構成に別の APK を提供するため、同じアプリの複数の APK を公開できるようになっています。たとえば、高品質のグラフィック アセットを使用するビデオゲームを作成している場合、別々のテクスチャ圧縮フォーマットをサポートする 2 つの APK を作成することが考えられます。この方法で、各デバイスの構成に必要なテクスチャのみを含めることで、APK ファイルのサイズを小さくすることができます。テクスチャ圧縮フォーマットに対する各デバイスのサポート状況に応じて、Google Play は各デバイスに対して、そのデバイスのサポートを宣言した APK を配布します。
現在のところ、各 APK が以下の構成に基づいて別々のフィルタを提供する場合に限り、同一アプリの複数の APK を Google Play 上で公開できます。
- OpenGL テクスチャ圧縮形式
<supports-gl-texture>
要素を使用します。 - 画面サイズ(画面密度も指定可能)
<supports-screens>
要素や<compatible-screens>
要素を使用します。 - API レベル
<uses-sdk>
要素を使用します。 - CPU アーキテクチャ(ABI)
特定の CPU アーキテクチャ(ARM EABI v7、x86 など)をターゲットとする Android NDK を使用してビルドしたネイティブ ライブラリを組み込みます。
他のすべてのフィルタも通常どおり機能しますが、Google Play の同一のアプリ掲載情報内にある複数の APK を区別できるのは、この 4 つのフィルタだけに限られます。たとえば、デバイスにカメラが搭載されているかどうかのみを基準として異なる APK を作成しても、同じアプリに複数の APK を公開することはできません。
警告: 同じアプリに複数の APK を公開することは特殊なケースです。ほとんどのアプリでは、広範囲のデバイス構成をサポートする APK を 1 つだけ公開すべきです。複数の APK を公開する場合、フィルタ固有のルールに従う必要があります。また、構成ごとに適切なアップデート パスを確保するため、各 APK のバージョン コードに特別な注意を払う必要があります。
Google Play で複数の APK を公開する方法については、複数 APK サポートをご覧ください。