Fire OS 6で動作するFireタブレット用アプリを開発する


Fire OS 6で動作するFireタブレット用アプリを開発する

2018年第3四半期に、1種類または複数のFireタブレットデバイスにおいてFire OS 6が搭載されます。ここに示すガイドラインに従って、アプリと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のガイドラインに従ってランタイム時にパーミッションを確認する必要があります。システムパーミッションの使用実行時のパーミッションリクエストを参照してください。

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

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

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

Android Nougatでは、アプリをNDK以外のライブラリまたはプライベートライブラリに動的にリンクさせることはできません。アプリのAPKに必要なライブラリが含まれているか、公開されているNDK APIを使用する必要があります。詳細については、APKから直接共有ライブラリを開くおよびプライベート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に移行するを参照してください。

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

  • アダプタブルストレージ
  • Doze/アプリスタンバイ

アダプタブルストレージ

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

Doze/アプリスタンバイ

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

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

Fire OS 5およびFire OS 6のどちらのデバイスでも、アプリのマニフェストから<uses-amzn-sdk>というタグを1つ削除する必要があります。このタグは、古い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は22以下に設定します (アプリに必要な最小APIレベルに設定)。これにより、(Fire OS 5とFire OS 6の両方で動作する) すべてのAmazon Fire TVデバイスでアプリが利用可能になります。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に設定します。

詳細については、次のリンクを参照してください。