Fireタブレット向けFire OS 8
Fire OS 8には、Android 10(APIレベル29)とAndroid 11(APIレベル30)のアップデート内容が組み込まれています。ここでは、Fire OS 8向けにアプリを開発するうえで考慮すべき重要な変更点をいくつか紹介します。
- Android 10のアップデート内容
- Android 11のアップデート内容
- Fire OS 8とAndroid 11の互換性
- Fire OS 8デバイスへのアプリのターゲット指定
- Fire OS 8デバイスにおけるアプリの互換性テスト
- minSdkVersionとtargetSdkVersionの設定
- minSdkVersionがサポート対象デバイスに与える影響
- サポート
Android 10のアップデート内容
Android 10で開発者が知っておくべき重要な機能は以下のとおりです。詳細については、Android 10の機能とAPIを参照してください。
TLS 1.3のサポート(デフォルトで有効)
Fire OS 8では、TLS 1.3のサポートが追加され、すべてのTLS接続に対してデフォルトで有効になっています。アプリを更新して、TLS 1.3をサポートすることをお勧めします。以前のバージョンのTLSプロトコルを使用する必要がある場合は、以下を呼び出して、TLS 1.3が無効になっているSSLContext
を取得できます。
SSLContext.getInstance("TLSv1.2")
アプリ内からの設定パネルの呼び出し
Android 10では、設定パネルが導入されました。これは、アプリのコンテキスト内でユーザーに設定を表示できるようにするAPIです。
Fire OS 8では、設定パネルAPIが追加されています。このAPIを使用すると、重要なシステム設定をアプリのコンテキストから直接表示できるようになります。ユーザーはアプリを終了することなく、音量、インターネット接続オプション、Wi-Fiコントロールなどのシステム設定にアクセスできます。
Settings.Panel
には、次の定数を使用できます。
ACTION_INTERNET_CONNECTIVITY
:インターネット接続に関する設定(機内モード、Wi-Fiなど)を表示します。ACTION_WIFI
:Wi-Fi設定のコントロールを表示します。これは、大量のアップロードやダウンロードを行うためにWi-Fi接続が必要なアプリに有効です。ACTION_VOLUME
:すべての音量ストリームの設定を表示します。
共有機能の改善
Fire OS 8では、共有機能に次のような改善が加えられています。
- ショートカット共有APIがサポートされ、アプリで事前にダイレクトシェアターゲットを公開できるようになりました。アプリでダイレクトシェアAPIを使用している場合は、
ChooserTargetService
クラスがAPIレベル30で非推奨となっているため、ショートカット共有APIに移行する必要があります。AndroidXライブラリにあるShortcutManagerCompat
クラスを使用してショートカット共有APIを組み込み、ChooserTargetServiceCompat
を実装して下位互換性を確保してください。 - ダイレクトシェアターゲットとして公開できるのは、動的ショートカットに限られます。詳細については、ダイレクトシェアターゲットを公開するを参照してください。
位置情報にアクセスするためのフォアグラウンドサービスタイプ
Fire OS 8(APIレベル29)以降をターゲットとするアプリでフォアグラウンドサービスの位置情報にアクセスする場合は、location
のフォアグラウンドサービスタイプを<service>
コンポーネントの属性として宣言します。
<manifest>
... <service ... *android:foregroundServiceType="location"* /></manifest>
フォアグラウンドサービスのタイプ | 各タイプを宣言する必要があるサービスのユースケースの例 |
---|---|
dataSync |
ネットワークからファイルをダウンロードする |
location |
ユーザーが開始したアクションを続行する |
mediaPlayback |
オーディオブック、ポッドキャスト、音楽を再生する |
mediaProjection |
デバイスのディスプレイに表示された動画を短時間録画する |
foregroundServiceType
は、ライブラリのマニフェストに追加する必要があります。
バックグラウンドでのデバイス位置情報へのアクセス
APIレベル29以上をターゲットとするアプリでは、バックグラウンドで位置情報にアクセスすることはできません。アプリがバックグラウンドで実行されているときに位置情報を受け取るには、アプリのマニフェストでACCESS_BACKGROUND_LOCATIONパーミッションを宣言する必要があります。
<manifest ... >
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>
バックグラウンドからのアクティビティの開始に関する制限
Android 10以降では、バックグラウンドからアクティビティを開始できる状況に制限が設けられています。この動作変更は、ユーザー側の操作の中断を最小限にして、ユーザーが画面に表示されているアプリをよりよく制御できるようにするためのものです。アクティビティがユーザーの操作によって直接開始される限り、アプリがこの制限の影響を受けることはほぼありません。
高効率画像ファイル(HEIF)形式
Fire OS 8タブレットでは、HEIF画像形式がネイティブにサポートされるようになりました。アプリで静止画像を扱う場合は、HEIF形式のサポートを追加することを検討してください。JPEGファイル形式と比べて高画質なうえ、ファイルサイズも縮小できます。
ダークテーマ
Android 10では、システム全体のダークテーマが追加されています。アプリ用にカスタムのダークテーマを作成できるほか、新しいフォースダーク機能を有効にして、既存のテーマからダークバージョンが動的に作成されるようにすることもできます。
<style name="AppTheme" parent="Theme.AppCompat.DayNight">
詳細については、Android 10の機能とAPIを参照してください。
Android 11のアップデート内容
APK署名スキームv2の必須化
Fire OS 8(APIレベル30)をターゲットとするアプリのうち、現在APK署名スキームv1でのみ署名されているアプリでは、APKに対して、今後APK署名スキームv2での署名も必要になります。Fire OS 8デバイスでは、APK署名スキームv1でのみ署名されているアプリを、ユーザーがインストールまたはアップデートすることはできません。旧バージョンのFire OSを搭載するデバイスをサポートするには、v1を使用した署名に加えて、v2以降を使用した署名もAPKに追加する必要があります。
APKで使用されている署名のバージョンは、apksigner
を使用して確認できます。
apksigner verify -v <APK名.apk>
ワンタイムパーミッション
Fire OS 8(APIレベル30)以降では、アプリが位置情報、マイク、カメラに関連するパーミッションをリクエストするたびに、ユーザーに表示されるパーミッションのダイアログにワンタイムパーミッション(今回のみ)というオプションが表示されます。ユーザーがダイアログでこのオプションを選択すると、アプリに一時的なパーミッションが付与されます。実行時のパーミッションの確認とリクエストに関するベストプラクティスに従って、必要なパーミッションが確実に付与されるようにしてください。
パッケージの公開設定
Fire OS 8(APIレベル30)をターゲットとするアプリでインストール済みアプリのリストを取得すると、リストがデフォルトでフィルタリングされます。インストール済みアプリの広範なリストにアクセスするには、アプリ側で、クエリや操作を直接行う必要のあるアプリに関する情報を指定できます。これは、Androidマニフェストに<queries>
要素を追加して実行できます。
<manifest package="com.yourapp.name">
…
<queries>
// 操作が必要なアプリのパッケージ名がわかっている場合
<package android:name="com.anotherapp.firstapp" />
<package android:name="com.someapp.secondapp" />
// 特定のインテントを持つすべてのアプリに対してクエリを実行する場合
<intent>
<action android:name="android.intent.action.SEND" />
<data android:mimeType="image/jpeg" />
</intent>
</queries>
…
</manifest>
フォアグラウンドサービスでのカメラやマイクへのアクセス
アプリがAPIレベル30以上をターゲットとしており、フォアグラウンドサービスでカメラまたはマイクにアクセスする場合は、camera
またはmicrophone
のフォアグラウンドサービスタイプをそれぞれ<service>
コンポーネントの属性として宣言する必要があります。
<manifest>
...
<service ...
android:foregroundServiceType="camera|microphone" />
</manifest>
圧縮されたリソースファイル
Android 11(APIレベル30)以上をターゲットとするアプリは、圧縮されたresources.arsc
ファイルが含まれている場合、またはこのファイルが4バイト境界にそろえられていない場合はインストールできません。エラーが発生した場合は、zipalignのログを調べて、resources.arsc
ファイルが圧縮されていないことを確認してください。
Failure [-124: Failed parse during installPackageLI: Targeting R+ (version 30 and above) requires the resources.arsc of installed APKs to be stored uncompressed and aligned on a 4-byte boundary]
動的インテントフィルター
インテントを受け取るには、アプリのマニフェストでインテントフィルターを定義して、アプリで受け取ることができるデータの種類を宣言する必要があります。これはAndroid 11で導入されたマニフェスト要素で、MIMEグループと呼ばれます。MIMEグループを使用するには、android:mimeGroup
属性を使用して、データ要素をアプリのマニフェストに含めます。
バックグラウンドからのカスタムトーストのブロック
バックグラウンドから送信されるカスタムビューを含むトーストがブロックされるようになりました。ただし、非推奨のsetView()ではなくToast.makeText()を使用すれば、テキストトーストは引き続き使用できます。
Fire OS 8とAndroid 11の互換性
Fire OS 8で実装されている機能はすべてAndroid 11と同等のものですが、Android 11のすべての機能がFire OS 8でも利用できるわけではありません。ファイルベースの暗号化(FBE)など、Android 11の一部の機能は、Fire OS 8ではまだサポートされていません。
また、Fire OS 8の機能はAndroid 11と同等ですが、GoogleのサービスはAmazon Fireデバイスでは使用できません。代わりに、必要なサービス(アプリ内課金など)に対応するAmazon SDKを使用する必要があります。
Fire OS 8デバイスへのアプリのターゲット指定
ユーザーがアプリを実行するデバイスとしては、Fire OS 5、Fire OS 6、Fire OS 7、Fire OS 8が考えられます。デバイスのFire OSバージョンとアプリの互換性を最大限に高めるため、SDKレベルに基づいてターゲットデバイスを指定することをお勧めします。
Fire OS 8デバイスをターゲットに指定するには、コードでBuild.VERSION.SDK_INT
が30(Android 11のAPIレベル)以上になっているかどうかを確認してください。
詳細については、Androidドキュメントの各種のプラットフォームバージョンをサポートするも参照してください。
Fire OS 8デバイスにおけるアプリの互換性テスト
アプリとFire OS 8の互換性は、実際のデバイスに接続することでテストが可能です。アプリテストサービスでは最小限の互換性テストしか行えないため、アプリにFire OS 8デバイスとの互換性があるかどうかはわかりません。
minSdkVersionとtargetSdkVersionの設定
minSdkVersion
は、該当するFire OSバージョンの最小APIレベルに設定します。
Fire OSのバージョン | minSdkVersion |
---|---|
Fire OS 5 | 22 |
Fire OS 7 | 28 |
Fire OS 8 | 30 |
targetSdkVersion
は、ターゲットとする最も高いAPIレベルに設定します。最小APIレベル要件の詳細については、デバイスフィルタリングと互換性に記載の「Fire OSとAndroidのAPIレベル」を参照してください。
minSdkVersionがサポート対象デバイスに与える影響
アプリが正常に動作するために必要な最小SDKレベルは、アプリのマニフェスト(またはbuild.gradle
ファイル)内のminSdkVersion
属性で設定します(そのAPIレベルをサポートしていないデバイスでは、該当アプリのインストールはできません。詳細については、デバイスフィルタリングと互換性を参照してください)。
Fire OS 5デバイスはAPIレベル22(Lollipop 5.1)、Fire OS 7デバイスはAPIレベル28(Android 9)をベースにしています。minSdkVersion
を22に設定した場合、アプリが正常に動作するにはデバイスのAPIレベルが22以上であることが必要になります。
Androidではレベルに下位互換性があるため、minSdkVersion
を22に設定すると、より高いAPIレベル(28など)のデバイスにもアプリがインストール可能になります。APIレベル28には、通常、レベル1~28のすべてのAPIが含まれます(リリースのたびに前回のレベルに追加)。
しかし、Android 11(APIレベル30)のAPIを利用する場合、minSdkVersion
を22に設定すると、APIレベルが30ではないFire OS 5デバイスにアプリがインストールされてしまいます。そのため、防御的なコーディングを行う必要があります。デバイスのレベルを確認して、そのAPIレベルがサポートされていない場合は別のレベルにフォールバックするようなコード作成が必須となります。たとえば、以下のようなコードが考えられます。
if (Build.VERSION.SDK_INT >= 30) {
Log.v(TAG, "はい、これはAPIレベル30以上のデバイスです");
} else {
Log.v(TAG, "いいえ、これはAPIレベル30以上のデバイスではありません");
}
このコードは、デバイスのAPIレベルが30以上であるかどうかを確認します。APIレベルが30以上の場合、コードが実行されます。そうでない場合、else
ロジックでフォールバックします。
デフォルトでは、targetSdkVersion
が指定されていない場合、minSdkVersion
と同じ値が使用されます。targetSdkVersion
には、アプリのテストに使用した最も高いAPIレベルを設定することができます。Androidは、アプリがこの値に基づいてデバイスで適切に動作するようにします。
たとえば、targetSdkVersion
を25以上(Nougatのリリース)に設定すると、AndroidはNougatに含まれる実行時パーミッション確認機能を適用します。しかし、targetSdkVersion
が25未満(Nougatに実行時パーミッション確認機能が導入される前)の場合、Androidはこの動作をアプリに適用しません。
maxSdkVersion
属性の使用は推奨されていません。ただし、アプリをFire OS 6デバイスのみで使用可能にする場合は、maxSdkVersion
を25に設定しても構いません。アプリをFire OS 7デバイスのみで使用可能にする場合は、minSdkVersion
を28に設定しても構いません。
詳細については、以下を参照してください。
<uses-sdk>
- 各種のプラットフォームバージョンをサポートする
- Picking your
compileSdkVersion
,minSdkVersion
, andtargetSdkVersion
(英語のみ)
サポート
Fire OS 8でアプリに問題が見つかった場合は、Fireタブレットに関するフォーラムを利用してください。