開発者コンソール

デバイスフィルタリングと互換性

デバイスフィルタリングと互換性

アプリをインストールできるデバイスの種類は、AmazonアプリストアにAndroidアプリを申請した際のアプリのマニフェストbuild.gradleファイルの属性によって決まります。これらのファイルとデバイスの機能に互換性がない場合、そのデバイスではバイナリファイルを実行できません。以下のセクションでは、デバイスのサポートに影響を与えるフィルターについて説明します。また、開発者コンソールでサポート対象デバイスのリストを手動で調整することもできます。

はじめに

Fire OSはAndroidをベースにしているため、Amazonでは、できるだけAndroidと同等になるように努めています。したがって、ここではAndroidで提供されている情報を繰り返すのではなく、AmazonやFire OSに固有の点を説明します。概念の理解を深めるのに役立つAndroidの基本的なドキュメントトピックには次のものがあります。

デバイスフィルタリングに関連する重要な用語

アプリ申請時のデバイスフィルタリングに関してよく使用される用語を以下に示します。

より包括的な用語集については、アプリの申請に関する用語集を参照してください。

アプリのマニフェストで指定されるデバイスの互換性

Androidの標準的な方法と同じように、アプリのマニフェストとbuild.gradleファイルの属性を使用して、アプリと互換性のあるデバイスを指定します。次に例を示します。

  • アプリのマニフェストでminSdkVersion=4smallScreens=falseを設定した場合、それらの要件を満たしていないデバイスにAmazonアプリストアからアプリをインストールすることはできません。 
  • マニフェストでカメラ機能の要件(<uses-feature android:name="android.hardware.camera" />)を宣言している場合、カメラを搭載していないデバイスと互換性を持つことはできません。互換性のないデバイスを使用するユーザーには、そのアプリがインストール可能なアプリとして表示されることはありません。

Amazonアプリストアは、アプリのマニフェストのフィルターを使用して、ユーザーのデバイスのハードウェアおよびソフトウェア要件や、通信事業者、場所、その他の特性をチェックします。また、Amazonはアプリのメタデータで指定されている地理的な利用条件も確認します(これはアプリの公開時に選択します)。フィルターのルールに照らしてデバイスと互換性がある場合に、アプリはユーザーに公開されます。互換性がないとみなされたアプリは、そのユーザーのデバイスで検索結果やカテゴリーに表示されません。

次の表に、フィルターの例を示します。 

フィルターの種類
デバイスの互換性に基づいたフィルタリング アプリのマニフェストでGPSをアプリの要件に指定すると、Amazonアプリストアでは、GPSを搭載していないデバイスにそのアプリは表示されません。
アプリの配信地域に基づいたフィルタリング 開発者コンソールでアプリの配信地域を北米のみに指定すると、北米以外のAmazonアプリストアでは、そのアプリはデバイスに表示されません。

サポートされているマニフェストフィルターの一覧については、Amazonアプリストアでサポートされているマニフェストフィルターを参照してください。

Amazon以外のデバイスにおけるサポート

Amazonデバイスに加えて、AmazonアプリストアはAndroid 5.0以降を搭載するAmazon以外のデバイスもサポートしています。マニフェストとbuild.gradleファイルによって、これらのデバイスのサポート状況とフィルタリングロジックも決まります。5.0未満のバージョンのAndroidが搭載されたAmazon以外のデバイスでは、Amazonアプリストアにアクセスすることはできません。

Amazon以外のデバイスにAmazonアプリをインストールする場合は、Android用Amazonアプリストアアプリからインストールを行います。ユーザーがAmazon以外のデバイスにAmazonアプリをインストールするのは、Amazonアプリストアで既に購入しているアプリをGoogle Playで再び購入したくない場合や、Amazonで購入したコインや定期購入型アイテムを持っており、別のデバイス(Androidタブレットなど)に同じアプリをインストールして使用したい場合などです。

targetSdkVersionに関するガイダンス

アプリがAmazon以外のデバイスのみをターゲットにしている場合は、AOSPガイドラインに従ってアプリにtargetSdkVersionを設定してください。AmazonアプリストアからAndroid 14デバイスにアクセスするには、アプリマニフェストまたはbuild.gradleファイルで、targetSdkVersionを23以上に設定してください。targetSdkVersionを23以上に設定しないと、Android 14デバイス向けのAmazonアプリストアでアプリを利用できなくなります。

アプリがAmazon以外のデバイスとFireデバイスをターゲットにしている場合は、targetSdkVersionの最小APIレベルに記載されているFire OSデバイスのガイドラインに従ってください。Amazon以外のAndroidデバイスとFire OSデバイスの両方をより幅広く利用できるようにするには、targetSdkVersionを30以上に設定し、minSdkVersionをアプリがサポートできる最小APIレベルに設定します。

Fire OSとAndroidのAPIレベル

Fireデバイスでは、オペレーティングシステムにFire OSを使用しています。Fire OSは、Androidのカスタムバージョンです。そのため、Fire OSの各バージョンはAndroid APIレベルに対応しています。アプリマニフェストのandroid:minSdkVersion属性は、サポートするFireデバイスの最小APIレベルを示します。アプリに応じて適切なAndroid APIレベルをminSdkVersion属性に指定してください。たとえば、2013年以降のすべてのタブレットをサポートするには、マニフェストに次のようなエントリを含めます。

<uses-sdk android:minSdkVersion="17" />

また、android:targetSdkVersion属性を設定することもできます。この属性にはminSdkVersionとは異なる機能があります。targetSdkVersionを設定すると、指定したAPIレベルに一致するデバイスでアプリが実行されたときに、そのAPIレベルで提供される拡張機能にアクセスできるようになります。APIレベルが新しいほどセキュリティとパフォーマンスが強化されるため、Androidでは、targetSdkVersionに求められる最小APIレベルを設定しています。AndroidにおけるtargetSdkVersionの最小要件の詳細については、Androidのドキュメントを参照してください。

Androidデバイスと同様に、Fireデバイスの種類によってAPIレベルは異なります。Fireデバイスごとの固有のAPIレベルについては、以下を参照してください。

targetSdkVersionの最小APIレベル

Androidの要件に従い、2022年4月1日をもって、AmazonではFire OS 6およびFire OS 7のtargetSdkVersionに以下のAndroid APIレベル要件を適用しました。

Fire OSのバージョン targetSdkVersionの最小APIレベル
Fire OS 6 25
Fire OS 7 28
Fire OS 8 30

2022年4月1日以降は、アプリがtargetSdkVersionの最小APIレベル要件を満たしていない場合、そのアプリの申請(新規アプリの場合)または更新(既存アプリの場合)はできなくなります。Amazonアプリストアに申請済みの既存アプリは引き続き正常に動作し、ユーザーに配信可能です。

最小APIレベルの設定の詳細については、Fire OSのテクニカルドキュメントを参照してください。

APIレベル間の下位互換性と上位互換性

通常、Android APIは下位互換性があります。つまり、Androidレベル28をサポートするデバイスは、レベル1~27もサポートします。ただし、Android APIには上位互換性はありません。つまり、レベル28で導入された機能はすべて、レベル27でサポートされるとは限りません。そのため、Fire OS 7で利用可能な一部の機能は、Fire OS 6ではサポートされない場合があります。同様に、Fire OS 6の機能の中には、Fire OS 5ではサポートされないものがあります。Fire OS 6およびFire OS 7向けの開発で特に考慮すべき事項については、以下を参照してください。

APIレベルの更新

デバイスのAndroid APIレベルは、Fire OSアップデートのデプロイに応じて随時変更される場合があります。たとえば、Fireタブレットのバージョンによっては、当初Fire OS 6でリリースされましたが、無線(「OTA」)によるアップデートプロセスを通じて、後からFire OS 7にアップグレードされたものもあります。

アプリのバイナリファイルがFire OSの複数のバージョンと互換性がある場合、マニフェストの<uses-sdk>要素で、デバイスがサポートする最低のAPIレベルにminSdkVersionを設定して、デバイスとの互換性を最大限に確保するようにします。minSdkVersionを22に設定した場合、レベル19以下のみをサポートするデバイスとの互換性がなくなります。

Amazonアプリストアでは、デバイスで許可される最大のAPIレベルを指定するandroid:maxSdkVersion属性もサポートしています。通常、より高いAPIレベルと互換性がない場合を除き、この属性を使用する必要はありません。

ハードウェアとソフトウェアの一般的な機能

minSdkVersionを指定したら、<uses-permission><uses-features>要素がアプリと互換性を持たせたいデバイスに適していることを確認します。ハードウェアおよびソフトウェアの特定の機能については、FireタブレットまたはFire TVの仕様を参照してください。

暗黙の(または明示されていない)機能要件にも注意してください。Androidの<uses-feature>に関するドキュメントで説明されているように、特定の機能に対して<uses-permission>を指定すると1つ以上の<uses-feature>要素が暗に指定され、android:required="true"が前提になります。暗黙の機能は必須となるため、機能が存在しないときに適切な制限がかかるようアプリが設計されている場合でも、アプリのバイナリファイルは機能を備えていないデバイスとの互換性がなくなります。

暗黙の機能について理解を深めるために、次のようなシナリオで考えてみます。このアプリでは、近くのガソリンスタンドを検索するために、デバイスの現在位置を使用します。アプリはデバイスのGPSから現在位置を取得できますが、GPSを利用できない場合、ユーザーは住所や場所を入力することができます。GPSを使用するには、マニフェストに次の要素を含める必要があります。

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

機能要件を明示的に定義していない場合、これらの要素は暗黙的に定義されます。

<uses-feature android:name="android.hardware.location" android:required="true" />
<uses-feature android:name="android.hardware.location.gps" android:required="true" />

このバイナリをAmazonアプリストアに申請した場合、互換性があるのは、GPS機能が組み込まれたFireタブレット(つまり、WAN(ワイヤレスアクセスネットワーク)に対応したモデル)のみになります。ほかのFireデバイスとも互換性を持たせるには、マニフェストに次の要素を含め、必須ではないと指定する必要があります(ただし、GPSがなくてもアプリが正常に機能する場合に限ります)。

<uses-feature android:name="android.hardware.location" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />

暗黙の機能を伴う権限の一覧については、機能要件を暗黙的に示唆する権限を参照してください。

64ビットアプリのみをサポートするデバイス

一部のデバイスでは、32ビットアプリ(現在Amazonアプリストアで公開されている32ビットアプリも含む)のサポートが終了しています。これらのデバイスで32ビットアプリをダウンロードしようとすると、アプリがシステム要件に対応していないことを警告する通知が表示されます。

こうしたデバイスでアプリを利用できるようにするには、アプリに64ビット(arm64-v8a)のサポートを追加して、Amazon開発者コンソールでアップデートを申請します。アプリをビルドする際、32ビット(armeabi-v7a)のサポートは削除しないでください。削除すると、現在のAmazonデバイスの選択に影響が生じる可能性があります。

Fire TVデバイスのデバイスフィルタリング

Fire TVデバイスでは、次のマニフェスト属性でFire TVのサポートを特定できます。

<uses-feature android:name="android.hardware.touchscreen" android:required="false" />

この属性は、タッチスクリーン機能が必須ではない(falseである)ことを示します。Fire TVデバイスでタッチスクリーンとマルチタッチ機能がサポートされておらず、スマートフォンやタブレットではサポートされているためです。そのため、このアプリがFire TVデバイスと互換性があるアプリとしてAmazonアプリストアで分類されるようにするには、このandroid.hardware.touchscreen属性をfalseと宣言する必要があります。

ただし、この分類は自動的には行われません。Fire TVデバイス用に設計されたバイナリをアップロードする場合にも、開発者コンソールでバイナリファイルと互換性のあるデバイスを手動で選択する必要があります。詳細については、サポート対象デバイスを参照してください。

ウェブアプリのデバイスフィルタリング

Androidマニフェストに基づくデバイスフィルタリングはウェブアプリには利用できませんが、申請プロセスの際にチェックボックスを使用してサポート対象のデバイスを制御することができます。ウェブアプリの場合、ウェブサイトへのURLの申請や、ウェブファイルを含むzipパッケージのアップロードを行っても、Amazonアプリストアがウェブアプリを取得し、Cordovaラッパーを使用してAndroidアプリを生成します。このCordovaパッケージアプリは、ユーザーがダウンロードしてデバイスにインストールするAndroidアプリとなります。

ウェブアプリは、非常に基本的なAndroid APIを採用しているため、あらゆるデバイスと互換性があります。WebViewによる1つのアクティビティでウェブファイルやURLが読み込まれます。APIレベルは10に設定されており、最大限に広範な互換性を実現します。

ウェブブラウザアプリごとのデバイスフィルタリング

プライバシーとセキュリティ上の理由から、AmazonはFireタブレットとFire TVでのサードパーティブラウザの使用を許可していません。アプリの申請プロセスで、対象となるデバイスを確認してください。例外として、サードパーティブラウザのアプリのうち、Amazonのプライバシーとセキュリティの基準を満たしているものは使用を許可する場合があります。詳細については、[お問い合わせ] フォームから [Amazonアプリストア] カテゴリー、[コンテンツポリシーのテスト結果関連] トピックの順に選択してお問い合わせください。

国ごとのデバイスフィルタリング

アプリ申請プロセスの手順2: アプリのターゲットを指定するで選択した国と地域に従って、アプリのサポート対象デバイスを決定できます。Amazonデバイスの中には、一部の国で販売されていないものもあります。公開先に指定した国または地域で販売されていないFire TVやFireタブレットは、申請プロセスでサポート対象外として除外されます。

アプリのインストール先の指定

Androidマニフェストファイルで、Fireデバイスでのアプリのインストール先を指定します。ほとんどのアプリで、この値を外部ストレージ(preferExternal)に設定しておけば、デバイスの内部ストレージに空き容量がないためアプリをインストールできないという事態を回避し、ユーザーエクスペリエンスを向上できます。詳細については、アプリのインストール先を指定する方法を参照してください。

アプリマニフェストからのuses-amzn-sdkの削除

アプリのマニフェストに<uses-amzn-sdk>というタグがある場合は削除します。このタグは、古いFire OS SDKアドオンに関連しており、Fire TVのアプリでは使用されません。

マニフェストにこのタグが残っている状態でも、(ほとんどの場合)アプリは動作しますが、削除することによって、今後の非互換性の発生を回避できます。古いFire OS SDKアドオンのコンポーネントはいずれも、Fireデバイス用アプリの開発には不要です。代わりに、標準のAndroid APIAmazon SDKを使用してください。

同じ公開アプリに対する複数のAPK

ランタイム時のパーミッションリクエストの確認や、デバイスが機能をサポートしていない場合のグレースフルデグラデーションなどにより、1つのAPK内で複数のデバイスをサポートすることもできますが、同じ公開アプリ用に複数のAPKを作成する方が簡単な場合があります。各APKには、さまざまなデバイス向けに異なるソフトウェア/ハードウェア機能とコンポーネントを含めることができます。

複数のAPKで調整可能なデバイスの違いには、APIレベル、OpenGL圧縮形式、CPU、画面サイズと密度、デバイス機能、さらに地理的な位置などの要素があります。場合によっては、Fireタブレット向けのAPKに加えて、Fire TV向けのAPKやAmazon以外のAndroidデバイス向けのAPKが必要になることも考えられます。このため、Amazonアプリストアでは同じアプリのAPKを複数アップロードすることができます。

アップロードするAPKの数にかかわらず、Amazonアプリストアでユーザーに表示されるアプリは1つだけです。ダウンロードされるAPKは、ユーザーのデバイスによって決まります。たとえば、「Stream Sports Everywhere(どこでもスポーツをストリーミング)」というアプリを開発したとします。 スマートフォン、タブレット、TVの枠を超えてシームレスにアプリを動作させたいところですが、これらすべてのデバイスで同じAPKを使用するのは簡単ではありません。この場合、スマートフォン/タブレット用とTV用の2つのAPKを作成することになります。

2つ作成しても、Amazonアプリストアでユーザーに表示される「Stream Sports Everywhere(どこでもスポーツをストリーミング)」アプリは1つだけです。ユーザーがTVデバイスからアプリをインストールすると、TV用のAPKがインストールされます。ユーザーがスマートフォンまたはタブレットからアプリをインストールすると、スマートフォン/タブレット用のAPKがインストールされます。

アプリを有料にした場合、アプリを購入済みのユーザーに対して別のデバイスで同じアプリを再購入するよう案内されることはありません。ユーザーはアプリを一度だけ購入すればよく、購入後は使用するデバイスに最適なバージョンが自動的に配信されます。

また、同じアプリに関連するすべてのAPKを対象にレポート、指標、レビューが集約されます。

複数のAPKに関する要件

同じアプリで複数のAPKを申請する場合、次の点を確認してください。

1. APKごとに固有のバージョンコードを指定する。

versionCodeとは内部ナンバリングスキームであり、ユーザーには表示されません(versionNameのみがユーザーに表示されます)。 バージョンコードは、選択した任意の整数です(例:11254)。versionCode(およびversionName)はアプリのbuild.gradleファイルで指定されます。詳細については、アプリのバージョン情報を設定するを参照してください。

versionCodeはアプリの一連のバージョンを示すために使用します。複数のAPKを作成してアップデートを公開した場合、各デバイスはversionCodeによって、そのアップデート版のAPKが必要かどうかを判断します。versionCodeの番号が大きいほど、新しいバージョンということです。APKと互換性のあるデバイスは、更新されたAPKのversionCodeがインストールされているAPKのversionCodeより大きい場合にのみアプリのアップデートを受信します。

たとえば、1つのアプリに対して、versionCode 10の「ハム」とversionCode 20の「エッグ」という2つのAPKを作成したとします。ユーザーのデバイスには「エッグ」がインストールされています。開発者は、APKのアップデートによってすべてのデバイスから「エッグ」を削除し、今後「ハム」のみを使用するつもりです。しかし、ハムのversionCodeを11に更新したのでは、エッグのversionCodeがもともとそれより大きいため、エッグをインストール済みのユーザーにアップデートがインストールされません。したがって、アップデートを申請する前に、versionCodeを21以上に設定しておく必要があります。

2. 同じ公開アプリでは各APKに同じパッケージ名を使用する。

同じ公開アプリでは各APKのマニフェストで同じパッケージ名を使用する必要があります。詳細については、packageを参照してください。

Amazonアプリストアの各アプリはパッケージ名で識別されます。各アプリには一意のパッケージ名を指定する必要があります。また、カタログ統合の観点から、パッケージ名にamazonという言葉を入れることはできません。

APKが複数ある場合のversionCodeの例

APKが複数ある場合のパッケージ名(package)とversionCodeの例を見てみましょう。同じアプリに対して、Fireタブレット用のAPKとAmazon Fire TVデバイス用のAPKを1つずつ作成しているとします。最初のAPKのマニフェストでは次のような属性が考えられます。

APK 1のマニフェスト

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.myapp">

</manifest>

APK 1のbuild.gradleファイル

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 23
        versionCode 13
        versionName "1.0.6"
    }

APK 2のマニフェスト

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mycompany.myapp">

</manifest>

APK 2のbuild.gradleファイル

    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 23
        versionCode 14
        versionName "1.0.6"
    }

これらのコードサンプルで、唯一の違いはversionCodeです。また、種類によっては、minSdkVersionも異なります。package名は同じです。各アプリのマニフェストとbuild.gradleファイルはその他の点で異なる場合があります(異なる機能やインテントの宣言など)。ただし、package名は同じにする必要があります。これに対して、versionCodeはそれぞれ一意の値を使用する必要があります。

(Amazonアプリストアでは、各APKが互いに十分異なることを確認するためのロジックチェックは実行していません。)

複数のAPKに対するAmazonとGoogle Playのサポートの違い

複数のAPKに関してAmazonがGoogle Playと異なる点の1つは、Amazonアプリストアで複数のAPKをアップロードする場合、APKごとにサポート対象のデバイスを手動で選択することです。

たとえば、同じデバイスに対して互換性のあるAPKが複数あるとします。サポート対象のデバイスは、Google Playで使用されているのと同じロジックで自動的に選択されるわけではありません(Google Playでは、そのデバイスでサポートされる最高のAPIレベルが自動的に選択されるか、versionCodeの値によってデバイスのサポートが決まります)。

一方Amazonのアプリストアでは、最初のAPKをアップロードした後、フィルターロジックに基づいてサポート対象のデバイスが自動的に選択されます。2番目のAPKで別のデバイスをサポートする場合は、最初のAPKからサポート対象のデバイスを手動で削除する必要があります。2番目のAPKをアップロードした後に、そのAPKでサポートするデバイスを選択できます。Amazonアプリストアでは、複数のAPKで同じデバイスをサポートできません(デバイスごとに1つのAPKという概念はGoogle Playと同じですが、Amazonではこの選択プロセスが手動になります)。

デバイスが2番目のAPKを利用できない場合

多くの開発者がこの問題を経験します。2番目のAPKをアップロードした後、すべてのデバイスが互換性なしと表示されたり、どのデバイスも選択できないことがあります。この原因は、デバイスが最初のAPKで選択されているためです。2番目のAPKで使用するには、最初のAPKでデバイスの選択を解除する必要があります。

Last updated: 2023年10月16日