その1 Filters on Google Play (Google Play Distribution)
そんなわけで最初の章。要するに、Google Playがユーザーの端末に対応したアプリをどのようにフィルタリングして表示しているのかってお話です。
ちゃんと読んだ事はありませんでしたが、何本もアプリを作って公開してれば自然と頭に入っている情報の類でしょうか。(細かいところはともかくざっくりとでも知っていないとアプリの公開設定なんてできませんもんね)
Filters on Google Play
ユーザーがGoogle Playでアプリを探したりするときに表示されるアプリは、デバイスの互換性によってフィルタリングされている。例えば、カメラが必要なアプリなら、カメラを搭載していない端末に対してはそのアプリは表示されないようになっている。開発者にとってもユーザーにとってもメリットのある機能である。
manifestファイルに定義された情報やデバイスや使用ライブラリなどの情報と、Google Play Developer Consoleで設定された対象国や課金状況などの情報ををもとにしてフィルタリングがおこなわれる。
manifestで定義された内容を基にはしているが、実際のフィルタリング動作はフレームワークとは異なっており、特定のAPIレベルに紐付けられているわけでもない。
以下、現在のGoogle Playで使用されているフィルタリングルールを示す。
How Filters Work on Google Play
ユーザーに表示されるアプリは以下のように決定されている。
デバイスのハードウェアとソフトウェア要件、そして、キャリアや場所、その他の特性をチェックする。これらはmanifestファイルと、Developer Consoleでの公開設定で定義されたもので、これらとデバイスの諸元を比較することによって行われる
デバイスとの互換性があると判断された場合は表示され、そうでない場合は、たとえ直接そのアプリのidが指定されたリンクであっても、表示は行われない。
使用可能なフィルタは任意に組み合わせが可能。たとえば、APIレベルを4以上、smallScreensをサポートしないとmanifestに設定し、アプリ公開設定でヨーロッパのキャリアのみに制限をかけたアプリの場合、これら3つの全ての条件を満たさない端末に対してはアプリが有効にならない。
フィルタリングはアプリのバージョンに関連付けられており、バージョン毎にルールの変更が可能となっている。例えば既に古いアプリをインストールしているユーザーであっても、新しいバージョンのアプリにその端末に適合しない条件が設定されている場合は、その新しいバージョンはユーザーに対しては表示されない。
Filtering on the Google Play web site
Webの Google Play に関しては、端末の適合性にかかわらず、公開されている全てのアプリの参照が可能であり、ユーザーの登録済の端末のそれぞれとの適合をチェックもできる。ただし、インストールが可能なのは適合する端末のみとなっている。
Filtering based on the App Manifest
以下、AndroidManifest.xmlの中で開発者がフィルターとして指定すべき要素一覧
<supports-screens> Screen Size
サポートするスクリーンのサイズやdensity。
minSdkVersionが4以降なら、省略された場合は全ての属性がtrueとして扱われる。
<uses-configuration> Device Configuration
キーボードやタッチスクリーン、ナビゲーションといった、ハードウェアの必要性
<uses-feature> Device Features
デバイスの必要性
<uses-library> Software Libraries
デバイス上に存在しないといけない共有ライブラリ
<uses-permission>
厳密にはこの要素はフィルターとしては扱われないが、ハードウェア系のパーミッションが要求されている場合、対応するusers-featureが設定されていなくても、それが設定されているものとして扱われる。 (android.permission.CAMERA等)
<uses-sdk>
minSdkVersion
アプリが要求する最小のAPI level
maxSdkVersion
アプリが要求する最大のAPI level だが、Android2.1以降ではこの属性は廃止となっている。
Advanced manifest filters
上であげた要素に加えて、Google Playでは 以下の要素もフィルタリングに使用する
<compatible-screens>
通常は使うなとのこと。
<supports-gl-texture>
テクスチャ圧縮フォーマット
Other Filters
その他、以下のようなフィルタリングに関連する設定がある
Publishing Status
Google Playで検索によって表示されるのは、公開状態のアプリケーションだけ。
ただし、非公開状態であっても、購入したものやイントール済のもの、最近アンインストールしてまだストアのダウンロードエリアに表示されているアプリに関しては、それを再度インストールことも可能。
なお、アプリが停止となっている場合は、ダウンロードエリアに表示されていても再インストールや更新はできない。
Priced Status
全てのユーザーに対して有料アプリが表示されるわけではない。対象となるデバイスは 通信キャリアのSIMカードを持っていて、OS 1.1以降である必要がある。また、国やキャリアによっては有料アプリが公開されていない場合もある。
いつの話しをしてるんだって気もしますが…
Country Targeting
アプリをアップロードするときに、公開対象とする国を設定可能。
CPU Architecture (ABI)
アプリケーションは、内部に対象CPUのnative libraryを含んでいる。これらによるフィルタリングも行われる。
Copy-Protected Applications
もう使われない項目なので無視
Publishing Multiple APKs with Different Filters
Google Playは、異なるデバイス向けに作成されたAPKを MultipleAPKとして配布する機能を持っている。
例えば、ビデオゲームの作成で2種類のテクスチャの圧縮フォーマットをサポートする場合、両方をAPKに含めるのではなく、どちらか一方だけのAPKを2つ作成して同じアプリケーションとして公開しておき、フィルタリングによって適合するデバイスに正しいAPKを配布することが可能となる。
ただし、Multiple APKを利用する時は、どうしてもこれでないとダメという時にすること。
OpenGL texture compression formats
<supports-gl-texture>で判定する
Screen size (and, optionally, screen density)
<supports-screens> や <compatible-screens> で判定する
API level
<uses-sdk> で判定する
CPU Architecture (ABI)
NDKで使用する native libraryの対象CPUによって判定する
なんだか情報が古いような気もします…知らなかったこともあるし参考になりました。