AndroidマニフェストとDevice Targetingのトラブルシューティング

Amazonアプリストアでは、業界標準のAndroidManifest.xmlファイルを使用して、アプリと互換性があるFire端末を特定します。マニフェストとターゲット端末の機能に互換性がないと、[バイナリファイル] タブにそれが示されます。

APKの更新を計画している場合は、現在の端末サポートを維持するために、マニフェストの互換性の問題を解決する必要があります。互換性の問題が解決されない場合、アプリは指定した端末で利用できません。

この記事では、互換性の問題を示すメッセージと、考えられる解決策について説明します。アプリストアのマニフェストに基づいたフィルタリングの詳細については、サポートされているマニフェストフィルターおよびAndroidマニフェストを利用してAmazon端末を指定するを参照してください。

android.hardware.touchscreen

特に明記されていない限り、タッチスクリーンのサポートは、Android APKに必須と見なされます。このメッセージは、マニフェストがタッチスクリーンに対応した端末のみを指定すること、そのためタッチスクリーン非対応の端末 (Fire TVなど) とは互換性がないことを示します。タッチスクリーン非対応の端末でアプリを使用できるようにするには、マニフェストに次のエレメントを追加して、タッチスクリーンが必須でないことを明記する必要があります。

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

android.hardware.location

マニフェストにFINE LOCATIONの権限が含まれている場合、次の2つの暗黙の機能がマニフェストに追加されます。

android.hardware.location
android.hardware.location.gps

暗黙の機能は必須であるため、APKはその機能を持たない端末とは互換性がないと見なされます。それらの端末に互換性を持たせるには、暗黙の機能をマニフェストに明示的に含める必要があります。そのためには、 android:required 属性を falseに設定します。

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

詳細については、暗黙の機能を参照してください。

android.hardwareとandroid.software

android.hardware._feature
android.software._feature

これらのメッセージは、マニフェストで、ターゲット端末がサポートしていない機能に<uses-feature>または <uses-permission>のどちらかのエレメントが含まれていることを示します。 

この警告が表示される端末でアプリを利用できるようにするには、次のいずれかを実行します。

  • 問題の機能がAPKで実際に使用されていない場合、マニフェストから<uses-feature>または<uses-permission>要素を削除します。
  • 問題の機能はAPKで使用されているが、必須ではない場合 (例: アプリが機能をテストし、存在しない場合は関連する機能を削除する)、<uses-feature>要素を追加または調整して、android:required="false"属性を含めます。
  • 問題の機能がアプリに必須の場合、端末を確実に指定するには、その機能のない端末でアプリが適切に機能を無効化するように、コードを変更する必要があります。変更をテストしたら、マニフェストを編集して、android:required="false"を適切な<uses-feature>要素に含めます。機能の検出については、Android APIドキュメントのgetSystemAvailableFeaturesを参照してください。

android.minSdkVersionとandroid.maxSdkVersion

android.minSdkVersion = "X"; device requires "Y"
android.maxSdkVersion = "X"; device requires "Y"

これらのメッセージは、<uses-sdk>要素に指定されたAndroid APIレベルの範囲に、ターゲット端末 ("Y") によって現在サポートされているAndroid APIレベルが含まれないことを示します。その端末をターゲットに指定するには、Android APIの範囲を調整してレベル ("Y") を含めます。[マニフェストフィルターリファレンス][manifest-filter] には、流通している各FireデバイスのAndroid APIレベルが示されています。

amzn.minSdkVersionとamzn.maxSdkVersion

amzn.minSdkVersion = "X"; device requires "Y"
amzn.maxSdkVersion = "X"; device requires "Y"

これらのメッセージは、<uses-amzn-sdk>要素に指定されたAmazon APIレベルの範囲に、ターゲット端末 ("Y") によって現在サポートされているAmazon APIレベルが含まれないことを示します。その端末をターゲットに指定するには、Amazon APIの範囲を調整してレベル ("Y") を含めます。[マニフェストフィルターリファレンス][manifest-filter] には、流通している各FireデバイスのAndroid APIレベルが示されています。

amzn.minSdkVersion

このメッセージが単独で (レベル情報なしで) 表示されたときは、APKマニフェストに<uses-amzn-sdk>が含まれていることを示し、そのため、ターゲット端末にないAmazon SDKによるサポートが必要です。このメッセージは、Amazon以外の端末にのみ表示されます。</div>

supports-screens

supports-screens = "X"; device requires "size" (and/or "width")

このメッセージは、画面サイズや<supported-screens>要素に定義されている最小幅と、端末によってサポートされている画面サイズ/最小幅の間に重複がないことを示します。このページのAndroidの仕様で説明されているように、アプリストアによって端末がフィルタリングされます。端末を指定するには、"size"および"width"の記述に従って画面のサポートを追加し、それに応じてマニフェストを更新します。</div>

screenSizeとscreenDensity

No supported screenSize and screenDensity pair in manifest; device requires "size" and "density"

このメッセージは、<compatible-screens>で指定された<screen>要素に定義されている最小幅と、端末によってサポートされている画面サイズ/最小幅の間に重複がないことを示します。このページのAndroidの仕様で説明されているように、アプリストアによって端末がフィルタリングされます。端末を指定するには、"size"および"density"の記述に従って画面のサポートを追加し、マニフェストを適切に更新します。

android.glEsVersion

android.glEsVersion = "X"; device requires "Y"

このメッセージは、ターゲット端末でサポートされていないOpenGL ESバージョンをAPKが指定していることを示します。この端末を指定するには、該当するOpenGL ESバージョンの参考資料を調べて、マニフェストを適切に更新します。</div>

supports-gl-texture

No supported supports-gl-texture formats in manifest

このメッセージは、マニフェストで指定されたOpenGLテクスチャ圧縮形式と、ターゲット端末によってサポートされているOpenGLテクスチャ圧縮形式の間に重複がないことを示します。サポートされているテクスチャ圧縮形式の詳細については、このページに記載されています。端末を指定するには、互換性のあるテクスチャ形式のサポートを追加し、マニフェストを適切に更新します。また、マニフェストと端末の仕様で、OpenGLテクスチャフォーマットの大文字表記やスペルを照合します。