as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
Ring
AWS
ドキュメント
Support
Contact Us
My Cases
開発
テスト
公開
収益化
ユーザーエンゲージメント
デバイスの仕様
リソース

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

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

Fire OS 16はAPIレベル36をベースにしています。以下のセクションでは、Fire OS 16向けアプリを開発するうえで考慮すべき重要な変更点について説明します。以下のように標準のAndroidコンポーネントへの移行を行うと、互換性の問題が発生するリスクが軽減され、アプリを簡単に管理できるようになります。

Fire OS 16デバイスと旧Fire OSデバイス

Fire OS 16には、Android 15(APIレベル35)とAndroid 16(APIレベル36)のアップデート内容が組み込まれています。古いバージョンのFire TVデバイスの中には、まだ以前のバージョンのFire OSで動作するものもあります。

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

Androidのアップデート内容

Android 16にアップグレードする際に知っておくべき重要な機能と動作の変更点は以下のとおりです。

ARTの内部APIの制限

Android 16では、Androidランタイム(ART)およびDalvikの内部クラス(sun.misc.Unsafedalvik.system.*libcore.io.*)へのアクセスが制限されています。また、隠しフレームワークAPIへのリフレクションによるアクセスも制限されます。

解決策

アプリがこれらの内部APIを使用している場合は、以下を実行してください。

  • sun.misc.Unsafejava.lang.invoke.VarHandleまたはAtomicReferenceFieldUpdaterに置き換えます。
  • dalvik.system.*を公開されているClassLoader APIに置き換えます。
  • 依存関係を確認します。サードパーティの多くの広告SDKと分析ライブラリは、これらの内部APIを使用しています。サードパーティ製SDKを最新バージョンに更新します。

エッジツーエッジ表示の強制適用

Android 15(API 35)では、SDK 35以降をターゲットとするアプリにエッジツーエッジレンダリングが適用されます。

Android 16(API 36)では、アプリにオプトアウトを許可していたwindowOptOutEdgeToEdgeEnforcementテーマ属性は完全に無視されます。以前にこの回避策を使用していたアプリでは、レイアウトが崩れます。

解決策

アプリでwindowOptOutEdgeToEdgeEnforcementを使用している場合は、以下を実行してください。

  • WindowInsetsCompat APIを使用してインセットを適切に処理します。
  • windowOptOutEdgeToEdgeEnforcementは、API 36では動作しないため、すべて削除します。
  • アプリのレイアウトをテストして、コンテンツが隠れていないことを確認します。

詳細については、エッジツーエッジのオプトアウトの廃止を参照してください。

TLS 1.0/1.1の削除

Android 15(API 35)以降では、TLS 1.0およびTLS 1.1プロトコルの使用は禁止されています。

解決策

アプリがTLS 1.0/1.1を使用している場合は、以下を実行してください。

  • バックエンドサーバーがTLS 1.2以上に対応していることを確認します。
  • SSLContextまたはOkHttpクライアントのセットアップから、明示的なTLS 1.0/1.1の構成をすべて削除します。
  • network_security_config.xmlで最小TLSバージョンが指定されている場合は、更新します。

16KBページサイズのサポート

Android 16では、16KBのメモリページサイズがサポートされるようになりました。アプリにネイティブ(NDK)ライブラリが含まれている場合は、それらのライブラリを16KBのページアライメントでコンパイルする必要があります。

解決策

アプリにネイティブライブラリが含まれている場合は、以下を実行してください。

  • -Wl,-z,max-page-size=16384を指定して、ネイティブライブラリを再ビルドします。
  • objdump -p libYourLib.so | grep LOADを使用してアライメントを確認します。

ネイティブライブラリのアライメントが不適切なアプリは、16KBページサイズのカーネルを実行しているデバイスでクラッシュしたり、読み込めなかったりする可能性があります。

Android 16では、android:pageSizeCompatマニフェスト宣言がない、4KBアライメントのネイティブライブラリを含むアプリは、起動するたびに互換性に関する警告ダイアログがユーザーに表示され、互換性が低下したモードで実行されます。警告の表示を抑制して互換モードを回避するには、ネイティブライブラリを16KBアライメントで再コンパイルするか、マニフェストに以下を追加してください。

<application
    android:pageSizeCompat="true"
    ... >

ローカルネットワークへのパーミッションが必要

Android 16では、ローカルネットワーク検出(mDNS、SSDP、NsdManager、マルチキャスト)を使用するアプリにNEARBY_WIFI_DEVICESパーミッションが必要です。

解決策

次のパーミッションを使用します。

<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />

このパーミッションがないと、デバイスの検出およびキャスト機能(Chromecast、スマートスピーカー、マルチルームオーディオ)は機能しません。

Dolby/DTSオーディオパススルーの無効化

Android 15(API 35)以降では、リソースの上限に達すると、システムはパススルーを使用してAudioTrackインスタンスを無効にするか、オーディオエンコーディング(Dolby AC3、E-AC3、DTS、TrueHD)をオフロードする場合があります。

解決策

アプリが上記のオーディオエンコーディングを使用している場合は、以下を実行してください。

  • オーディオ出力が無効化されたことを検出するために、AudioTrack.OnRoutingChangedListenerを登録します。
  • AudioTrackを再作成するか、デコード済みオーディオ出力にフォールバックすることで、無効化を適切に処理します。
  • HDMIパススルーのシナリオ(Dolby/DTSサラウンドサウンド)を徹底的にテストします。

BOOT_COMPLETEDの動作の変更

Android 15(API 35)以降では、「stopped」状態のアプリはBOOT_COMPLETEDブロードキャストを受信しません。アプリは、新しくインストールされた直後(まだ一度も起動されていない状態)またはユーザーが強制停止したときにstopped状態になります。

さらに、Android 15では、BOOT_COMPLETEDレシーバーを持つアプリが、起動時に制限付きフォアグラウンドサービスタイプ(メディア再生、データ同期、カメラ)を開始できないようにブロックされます。

解決策

BOOT_COMPLETEDレシーバーを確認し、制限付きフォアグラウンドサービスタイプを開始するものをすべて削除します。代わりにWorkManagerを使用します。

詳細については、パッケージの停止状態の変更を参照してください。

フォアグラウンドサービスタイプが必要

Android 14(API 34)以降、すべてのフォアグラウンドサービスはマニフェストでforegroundServiceTypeを宣言する必要があります。Fire OS 16では、サービスタイプなしでFOREGROUND_SERVICEパーミッションを宣言したアプリは、MissingForegroundServiceTypeExceptionが発生してクラッシュします。

解決策

次のサービスタイプを使用します。

<service
    android:name=".PlaybackService"
    android:foregroundServiceType="mediaPlayback"
    android:exported="false" />

有効なタイプには、mediaPlaybackdataSynclocationcameramicrophonephoneCallconnectedDevicemediaProjectionhealthremoteMessagingsystemExemptedshortServicespecialUseなどがあります。

予測型「戻る」ジェスチャーの強制適用

Android 16以降では、予測型「戻る」ジェスチャーがすべてのアプリに適用されます。非推奨になったonBackPressed()メソッドとKeyEvent.KEYCODE_BACKインターセプトは、戻るナビゲーションの動作を制御しません。

解決策

  1. AndroidManifest.xml<application>タグで、android:enableOnBackInvokedCallback="true"を設定します。

    <!-- AndroidManifest.xml -->
    <application
       android:enableOnBackInvokedCallback="true"
        ... >
    
  2. すべてのonBackPressed()オーバーライドを、OnBackInvokedCallbackまたはJetpackのOnBackPressedCallback APIに置き換えます。

    getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
        OnBackInvokedDispatcher.PRIORITY_DEFAULT,
        () -> {
            // 戻るナビゲーションを処理します
        }
    );
    
    onBackInvokedDispatcher.registerOnBackInvokedCallback(
        OnBackInvokedDispatcher.PRIORITY_DEFAULT
    ) {
        // 戻るナビゲーションを処理します
    }
    

targetSdkVersionの制約

Android 14(API 34)以降では、targetSdkVersionが23未満のアプリはインストールできません。アプリでこの対象APIレベルの最小要件を満たすことを必須とすることにより、ユーザーのセキュリティとプライバシーが強化されます。Fire OS 16では、以下の制限が適用されます。

  • targetSdkVersionが24未満のアプリは、インストールが完全にブロックされる可能性があります。
  • targetSdkVersionが24~27のアプリは、互換性に関する警告を1回だけユーザーに表示します。

詳細については、Android 16との互換性を確認するを参照してください。

正確なアラームの制限

Android 14(API 34)以降、SCHEDULE_EXACT_ALARMは事前に付与されません。アプリは、正確なアラームをスケジュールする前に、実行時にcanScheduleExactAlarms()を確認する必要があります。

解決策

まずは以下のコード例を使用してください。

AlarmManager alarmManager = getSystemService(AlarmManager.class);
if (alarmManager.canScheduleExactAlarms()) {
    // 正確なアラームをスケジュールします
} else {
    // 不正確なアラームにフォールバックするか、パーミッションをリクエストします
}
val alarmManager = getSystemService(AlarmManager::class.java)
if (alarmManager.canScheduleExactAlarms()) {
    // 正確なアラームをスケジュールします
} else {
    // 不正確なアラームにフォールバックするか、パーミッションをリクエストします
}

RenderScriptの削除

Android 15(API 35)以降、RenderScriptランタイムは削除されました。RenderScriptライブラリ(librenderscript-toolkit.solibRSSupport.solibrsjni.so)をバンドルするアプリは、Fire OS 16ではクラッシュします。

解決策

VulkanコンピューティングまたはRenderScript組み込み関数置換ツールキットを使用して、画像処理コードを移行します。詳細については、RenderScriptからの移行を参照してください。

JobSchedulerの割り当ての強制適用

Android 16では、JobSchedulerの実行時の割り当てがより厳密になりました。実行時間が長すぎるジョブや頻繁に実行されるジョブは、制限または停止される可能性があります。コード逆コンパイル分析によると、Fire TV対応アプリの91%(119個中108個)がJobSchedulerを使用しており、これらの割り当ての対象となっています。これは動作の変更であり、アプリがクラッシュすることはありませんが、バックグラウンドタスクの信頼性は時間の経過とともに低下する可能性があります。

詳細については、JobSchedulerの割り当ての最適化を参照してください。

アクセシビリティ通知の廃止

Android 16では、announceForAccessibility()TYPE_ANNOUNCEMENTアクセシビリティイベントのサポートを終了しました。

解決策

アプリがこれらの廃止されたAPIを使用している場合は、以下を実行してください。

  • announceForAccessibility()setAccessibilityPaneTitle()またはandroid:accessibilityLiveRegion(ライブリージョンの場合)に置き換えます。
  • TYPE_ANNOUNCEMENTイベントを、ペインタイトルを使用するTYPE_WINDOW_STATE_CHANGEDに置き換えます。

Android 15(API 35)以降、MediaProjection APIを使用するアプリでは、セッションごとにユーザーの同意を得る必要があります。以前に付与されたパーミッションは、セッションをまたいで保持されません。

解決策

アプリでMediaProjection APIを使用している場合は、以下を実行してください。

  • 画面キャプチャまたは録画が開始されるたびに、MediaProjectionパーミッションをリクエストします。
  • ユーザーが同意を拒否した場合は適切に処理します。

Amazon SDKの更新

アプリにAmazon SDKが統合されている場合は、Fire OS 16と互換性のある最新バージョンを使用していることを確認します。

SDK ダウンロード
Appstore SDK(IAP、DRM、シンプルサインイン) Fire OS向けの開発
Appstore請求サービス対応SDK アプリをスケーラブルに展開
Amazon Device Messaging(ADM)SDK Fire OS向けの開発
A3L SDK(Authentication、Location、Messaging) アプリをスケーラブルに展開
Fire TV統合SDK(コンテンツパーソナライゼーション) Fire TV SDK
Login with Amazon SDK その他のSDKとリソース

すべてのSDKの一覧については、SDKとサンプルを参照してください。

アプリのターゲットをFire OS 16デバイスに指定する方法

ユーザーは、Fire OS 5、Fire OS 6、Fire OS 7、Fire OS 8、Fire OS 14、Fire OS 16のいずれかが搭載されたデバイスでアプリを実行する可能性があります。デバイスのFire OSバージョンとアプリの互換性を最大限に高めるため、SDKレベルに基づいてターゲットデバイスを指定することをお勧めします。

Fire OS 16デバイスをターゲットに指定するには、コードでBuild.VERSION.SDK_INTが36(Android 16のAPIレベル)以上になっているかどうかを確認してください。

詳細については、プラットフォームの各種バージョンのサポートを参照してください。

アプリのテスト

Fire OS 16デバイスでアプリをテストする場合、Amazonアプリストア品質管理セントラルのライブデバイスインタラクション(LDI)を使用できます。LDIを使用すると、AmazonアプリストアのデバイスファームにあるFire OS 16デバイスにリモートでアクセスして、そのデバイスでテストを実行できます。LDIの詳細については、ライブデバイスインタラクションを参照してください。

さらに、アプリをクローズドベータテスト用に配布する場合は、ライブアプリテスト(LAT)を使用してFire OS 16デバイスをターゲットにすることができます。LATを始めるには、ライブアプリテストを始めるを参照してください。

minSdkVersionとtargetSdkVersionの設定

targetSdkVersionは、ターゲットとする最も高いAPIレベルに設定します。Fire OS 16デバイスの場合、Amazonでは、targetSdkVersionを36に設定することを要件としています。Fire OS 16デバイスでのアプリの互換性を保証するために、Fire OS 5、Fire OS 6、Fire OS 7、Fire OS 8、Fire OS 14を搭載している以前のFire TVデバイスで動作するアプリについては、targetSdkVersionを36にアップレベルする必要があります。

minSdkVersionを目的のAPIレベルに設定することで、以前のデバイスを引き続きサポートできます。

Fire OSのバージョンに基づいたAPIレベルを次の表に示します。

Fire OSのバージョン APIレベル
Fire OS 16 36
Fire OS 14 34
Fire OS 8 30
Fire OS 7 28
Fire OS 6 25
Fire OS 5 22

詳細については、デバイスフィルタリングと互換性を参照してください。

minSdkVersionがサポート対象デバイスと下位互換性に与える影響

アプリが正常に動作するために必要な最小SDKレベルは、アプリのマニフェスト(またはbuild.gradleファイル)内のminSdkVersionで設定します。そのAPIレベルをサポートしていないデバイスでは、該当アプリのインストールはできません。詳細については、デバイスフィルタリングと互換性を参照してください。

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

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

しかし、Android 16(APIレベル36)のAPIを利用する場合、minSdkVersionを22に設定すると、APIレベルが34ではないFire OS 5デバイスにアプリがインストールされてしまいます。そのため、防御的なコーディングを行う必要があります。デバイスのAPIレベルを確認して、そのAPIレベルがサポートされていない場合は別のレベルにフォールバックするようなコード作成が必須となります。たとえば、以下のようなコードが考えられます。

if (Build.VERSION.SDK_INT >= 36) {
    // Fire OS 16/Android 16固有のコード
} else {
    // 以前のデバイス用のフォールバック
}

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

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

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

詳細については、以下のリソースを参照してください。

サポート

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


Last updated: 2026年5月20日