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のガイドラインに従ってランタイム時にパーミッションを確認する必要があります。Permissions overview(パーミッションの概要)実行時のパーミッションリクエストを参照してください。

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

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

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

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

Fire OS 6とNougatの互換性

Fire OS 6ではAndroid Nougatのすべての機能がサポートされます。Amazon FireタブレットではGoogleのサービスを使用しないでください。代わりに、必要なサービス(アプリ内課金など)に対応するアプリ・ゲームサービス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 APIAmazonアプリ・ゲームサービス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は22以下に設定します(アプリに必要な最小APIレベルに設定)。そうすることで、すべてのAmazon Fire TVデバイス(Fire OS 5またはFire OS 6で動作)でアプリが使用可能になります。targetSdkVersionは、アプリのテストに使用した最も高いAPIレベルに設定します。

ここでは、これらの設定について詳しく説明します。アプリのマニフェスト(またはbuild.gradleファイル)で、minSdkVersion属性をアプリが正常に動作するために必要な最小SDKレベルに設定します(この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に設定しても構いません。

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