開発者コンソール

Fireタブレット向けFire OS 6

Fireタブレット向けFire OS 6

Fire HD 8(2018)タブレットには、Fire OS 6が搭載されています。ここに示すガイドラインに従って、Fire OS 6との互換性を確保できるようにアプリを準備してください。Fire OS 6はAndroid Nougat(Android 7.1.2、レベル25)をベースとしています。

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のすべての機能がサポートされます。Amazon FireタブレットではGoogleのサービスを使用しないでください。代わりに、必要なサービス(アプリ内課金など)に対応するAmazon SDKを使用する必要があります。詳細については、Google Play IAB v3.0からAmazon IAP v2.0に移行するを参照してください。

注目すべき新機能として、次のような機能があります。

  • Adoptable Storage
  • Doze/アプリスタンバイ

Adoptable Storage

ユーザーはSDカードなどの外部ストレージデバイスを内部ストレージとして使用できます。外部ストレージデバイスを内部ストレージとして使用する場合、そのためのフォーマットと暗号化がそのデバイスに対して行われます。この機能により、ユーザーはアプリおよびアプリのプライベートデータの両方をストレージデバイス間で移動できます。Adoptable Storageを使用すると、アプリのデータディレクトリがランタイム時に外部ストレージ上で移動することがあります。

Doze/アプリスタンバイ

Dozeおよびアプリスタンバイは、バッテリーの持続時間を延ばすことを目的にした機能であり、ユーザーがデバイスをアクティブに使用していないときに、デバイスを強制的にスリープ状態にします。これにより、バックグラウンド処理やポーリングなどを実行するアプリに対する制約が追加されます。

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

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

マニフェストにこのタグが残っていてもアプリは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マニフェストを参照してください。

Fire OS 5デバイスおよびFire OS 6デバイスをアプリの対象に指定

Fire OS 5とFire OS 6の機能の互換性を最大限に高めるには、状況に応じて対象デバイスを指定する必要があります。コードで、Build.VERSION.SDK_INT25(NougatのAPIレベル)以上であり、Fire OS 6デバイスを指定しているかどうかを確認できます。プラットフォームの各種バージョンのサポートを参照してください。

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に設定する必要があります。

推奨はしませんが、Fire OS 6デバイスに古いアプリが表示されないようにする必要がある場合は、maxSdkVersionをFire OS 5(APIレベル22)に設定することもできます。

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

自動バックアップについて

自動バックアップ機能は、Fire OS 6(API 25)搭載のFireタブレットでは使用できません。


Last updated: 2023年9月20日