開発者コンソール

Fire OS 6搭載Fire TV対応アプリの開発について

Fire OS 6搭載Fire TV対応アプリの開発について

Fire OS 6搭載のAmazon Fire TVデバイスは、Android Nougatをベースにしています。ここに示すガイドラインに従って、アプリとFire OS 6との互換性を確認してください。

Fire OS 6搭載デバイスとFire OS 5搭載デバイスの違い

2018年のFire TVデバイス(Fire TV Stick 4K、Fire TV Edition(InsigniaおよびToshiba)、Fire TV Cubeなど)のほとんどは、Fire OS 6で動作します。ただし、一部の旧モデルのFire TVデバイスは、今後も(Lollipop、またはAndroid 5.1、レベル22、および一部のバックポートされたMarshmallowをベースにした)Fire OS 5で動作します。旧モデルのFire TVデバイスは、Fire OS 6にアップレベルされません。

Fire TVデバイスおよびバージョンの詳細については、Fire OSのバージョンを参照してください。

Android Nougatの動作の変更点と新機能

Android Nougatには、LollipopとMarshmallowから変更されている点がいくつかあります。Fire OS 6デバイス用のアプリを開発する際には、これらの変更点を考慮する必要があります。これらの変更点については、Android 7.0の動作の変更点およびAndroid 6.0の変更点を参照してください。重要な変更点には、実行時のパーミッションの確認、プライベートライブラリへのリンクなどがあります。

実行時のパーミッションの確認

アプリに必要なNormalパーミッションおよびDangerousパーミッションについては、通例どおり、アプリのマニフェストで(uses-feature要素とuses-permission要素を使用して)宣言する必要があります。ただし、APIレベル23以上のデバイスでは、Androidのガイドラインに従って実行時にパーミッションを確認する必要があります。Android での権限アプリの権限をリクエストするを参照してください。

実行時のパーミッションの確認は、インストールとアップデートのプロセスを効率化し、さらにユーザーによるアプリの管理を強化するために、Marshmallow(APIレベル23)に導入された機能です。実行時のパーミッション確認により、ユーザーは、プロンプトが表示されたときに個々のパーミッションを取り消すことができます。ユーザーがパーミッションを取り消すケースを管理する必要があります。

また、1つのバイナリが複数のデバイス(FireタブレットデバイスとAmazon Fire TVデバイスの両方)をターゲットとしている場合、これらのデバイスに存在しない機能のパーミッションをマニフェストで要求(たとえば、Fire TVアプリでジャイロスコープのパーミッションを要求)しないようにしてください。詳細については、サポートされていないハードウェア機能を処理するを参照してください。

プライベートライブラリへのリンク

Android Nougatでは、アプリをNDK以外のライブラリまたはプライベートライブラリに動的にリンクさせることはできません。必要なライブラリがアプリのAPKに含まれているか、公開されているNDK APIを使用する必要があります。詳細については、Opening shared libraries directly from an APK(英語のみ)およびPrivate API(Enforced for API level >= 24)(英語のみ)を参照してください。

Fire OS 6とNougatの互換性

Fire OS 6ではAndroid Nougatの全機能がサポートされます。Fire OS 6でサポートされるNougatのTV用機能には、次のようなものがあります。

  • ピクチャーインピクチャー(PiP): アプリの別のエリアへの移動中に、画面の隅に動画をピニングできます。PiPウィンドウは、アプリの外部で使用することはできず、Fire OSのネイティブのユーザーインターフェイス要素をオーバーレイすることもできません。
  • コンテンツの録画: DVRと同様に、TVのコンテンツを録画できます。
  • タイムシフトAPI: ライブコンテンツの一時停止、早戻し、早送りを可能にします。

これらの機能のコーディングに関する詳細と手順については、Androidドキュメントを参照してください。

Fire OS 6にはNougatと同等の機能がありますが、GoogleのサービスはAmazon Fireデバイスでは使用できません。代わりに、必要なサービス(アプリ内課金など)に対応するAmazon SDKを使用する必要があります。詳細については、Fire TVとAndroid TVにおける開発の違いを参照してください。

Fire OS 5デバイスとFire OS 6デバイスへのアプリのターゲット指定

Fire OS 5とFire OS 6の機能の互換性を最大限に高めるには、状況に応じてデバイスを指定する必要があります。AFTNをBuild.Modelとして使用することで、Fire TV(第3世代)のデバイスを識別できます。ただし、より効率的な方法として、SDKレベルをターゲットに指定する方法があります。コードで、Build.VERSION.SDK_INT25(NougatのAPIレベル)以上かどうかを確認して、Fire OS 6デバイスをターゲットに指定することができます。詳細については、Fire TVデバイスの識別を参照してください。また、各種のプラットフォームバージョンをサポートするも参照してください。

新しいAmazon Fire TVデバイスでのアプリの互換性テスト

現時点では、実際のデバイスに接続しない限り、アプリとFire OS 6デバイスとの互換性をテストすることはできません。ただし、標準のアプリ申請プロセスでアプリの申請を行った場合、申請を通過できない具体的な理由があれば、Amazonアプリストアチームがお知らせします。現時点では、最新のAmazon Fire TVデバイスと互換性のあるアプリは、新しいデバイスとも互換性があります。

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

Fire OS 5デバイスでもFire OS 6デバイスでも、アプリのマニフェストから<uses-amzn-sdk>というタグを削除する必要があります。このタグは、古いFire OS SDKアドオンに関連しています。AndroidManifest.xmlファイル内で、<uses-amzn-sdk>を宣言しているかどうかを確認してください。宣言している場合、このタグ(およびコードに含まれる依存関係)を削除します。Amazon Fire TVのアプリでは、<uses-amzn-sdk>タグは使用されなくなっています。

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

古いバージョンのUnityで開発されたゲームアプリ

古いバージョンのUnity(UnityPlayerNativeActivityがデフォルトのアクティビティとなっているUnity 4.5または4.6など)で開発されたゲームアプリがある場合、ゲームが初めてメモリに読み込まれると、読み込みが完了するまでゲーム画面が1~2秒間、何も表示されない真っ白な状態になることがあります。これは、アプリがメモリに読み込まれる(その後すべての処理が完了するのを待つ)間にAndroid Nがコールドスタートすることが原因です。この問題はFire OS 6に固有ではなく、すべてのNougatデバイスで発生します。

この問題を修正するには、最新バージョンのUnityにアップグレードします。アップグレードを選択できない場合は、UnityPlayerNativeActivityUnityPlayerActivity(Unity 5.0b12以降で使用可能)に変更して、Androidマニフェストファイルを更新してみてください。詳細については、UnityのマニュアルのAndroidマニフェストを参照してください。

minSdkVersionとtargetSdkVersionの設定

minSdkVersionは、該当するFire OSバージョンの最小APIレベルに設定します。

Fire OSのバージョン minSdkVersion
Fire OS 5 22
Fire OS 6 25
Fire OS 7 28

targetSdkVersionは、アプリのテストに使用した最も高いAPIレベルに設定します。

最小APIレベル要件の詳細については、デバイスフィルタリングと互換性に記載の「Fire OSとAndroidのAPIレベル」を参照してください。

minSdkVersionがサポート対象デバイスに与える影響

アプリが正常に動作するために必要な最小SDKレベルは、アプリのマニフェスト(またはbuild.gradleファイル)内のminSdkVersion属性で設定します(このAPIレベルをサポートしていないデバイスにはアプリをインストールできないようにする必要があります)。

Fire OS 5デバイスは、APIレベル22(Lollipop 5.1)をベースにしています。Fire OS 6デバイスは、APIレベル25(Nougat 7.1)をベースにしています。minSdkVersionを22に設定した場合、アプリが正常に動作するにはデバイスのAPIレベルが22以上であることが必要になります。

Androidではレベルに下位互換性があるため、minSdkVersionを22に設定すると、より高いAPIレベル(25など)のデバイスにもアプリがインストールされます。APIレベル25には、通常、レベル1~25のすべてのAPIが含まれます(リリースのたびに前回のレベルに追加)。

一方、NougatのAPI(APIレベル25)を使用する必要がある場合はどうでしょうか。minSdkVersionを22に設定すると、APIレベルが25ではないFire OS 5デバイスにアプリがインストールされてしまいます。そのため、防御的なコーディングを行う必要があります。つまり、デバイスのレベルを確認して、そのAPIレベルがサポートされていない場合には別のレベルにフォールバックするように、コードを作成します。このコードは、たとえば次のようになります。

if (Build.VERSION.SDK_INT >= 25) {
 Log.v(TAG, "はい、これはAPIレベル25以上のデバイスです");
} else {
 Log.v(TAG, "いいえ、これはAPIレベル25以上のデバイスではありません");
}

このコードは、デバイスのAPIレベルが25以上であるかどうかを確認します。APIレベルが25以上の場合、コードが実行されます。そうでない場合、elseロジックでフォールバックします。

デフォルトでは、targetSdkVersionが指定されていない場合、minSdkVersionと同じ値が使用されます。targetSdkVersionには、アプリのテストに使用した最も高いAPIレベルを設定することができます。Androidは、アプリがこの値に基づいてデバイスで適切に動作するようにします。

たとえば、targetSdkVersionを23以上(Marshmallowのリリース)に設定すると、AndroidはMarshmallowに含まれる実行時パーミッション確認機能を適用します。しかし、targetSdkVersionが23未満(Marshmallowに実行時パーミッション確認機能が導入される前)の場合、Androidはこの動作をアプリに適用しません。

Fire OS 6デバイスでアプリをテストした後で、targetSdkVersionを25に設定する必要があります。

maxSdkVersion属性の使用は推奨されていません。ただし、アプリをFire OS 5デバイスのみで使用可能にする場合は、maxSdkVersionを22に設定しても構いません。アプリをFire OS 6デバイスのみで使用可能にする場合は、minSdkVersionを25に設定しても構いません。

詳細については、以下を参照してください。

カスタムメディアプレーヤーのAV同期の問題

AV同期の問題とは、ビデオがオーディオと完全には同期していない(声と口の動きが合っていない)ことです。標準のAndroid MediaPlayerでExoPlayerを使用している場合、AV同期の問題が発生することはありません。しかし、アプリに含まれるカスタム仕様のメディアプレーヤーを使用している場合、オーディオとビデオ(AV)の同期がわずかにずれることがあります(これはFire OS 6に限った問題ではありません。Fire OSデバイス用アプリの開発全般におけるベストプラクティスとして参考にしてください)。 AV同期の問題を解消する方法の詳細については、Androidアプリにおけるオーディオとビデオの同期を参照してください。

サポート

Fire OS 6でアプリに問題が見つかった場合は、Amazon Fire TVとFire TV Stickに関するフォーラムでその問題を報告してください。


Last updated: 2021年6月7日