Android 互換性定義(プレビュー)

1. はじめに

このドキュメントでは、デバイスが Android 15 との互換性を維持するために満たさなければならない要件を列挙しています。

「しなければならない」、「してはならない」、「要求される」、「するものとする」、「しないものとする」、「すべきである」、「すべきではない」、「推奨される」、「しても構わない」、「任意」の使用は、RFC2119 で規定されている IETF 標準に従います。

このドキュメントで使用する「デバイス実装者」および「実装者」という用語は、Android 15 を実行するハードウェア / ソフトウェア ソリューションを開発する人または組織を指します。「デバイス実装」または「実装」とは、そのように開発されたハードウェア / ソフトウェア ソリューションを指します。

Android 15 と互換性があるとみなされるには、デバイス実装で、この互換性定義に示された要件(参照により盛り込まれたドキュメントを含む)を満たさなければなりません。

この定義、またはセクション 10 に記載されているソフトウェア テストが、言及されていない、曖昧である、または不完全である場合、既存の実装との互換性を確保することはデバイス実装者の責任です。

このため、Android オープンソース プロジェクトは Android のリファレンス実装であり、優先実装です。デバイス実装者は可能な限り、Android オープンソース プロジェクトから入手できる「アップストリーム」のソースコードに基づいて実装することが強く推奨されます。一部のコンポーネントは仮に別の実装に置き換えることもできますが、ソフトウェア テストの合格が非常に困難になるため、そのような慣例には従わないことが強く推奨されます。互換性テストスイートなどを含む標準的な Android 実装との完全な動作互換性を確保することは、実装者の責任です。なお、このドキュメントでは特定のコンポーネントの置き換えと変更が明示的に禁止されています。

このドキュメントからリンクされているリソースの多くは、Android SDK から直接的または間接的に派生したものであり、その SDK のドキュメントに記載されている情報と機能的にまったく同じです。この互換性定義または互換性テストスイートと SDK ドキュメントの間に相違がある場合、SDK ドキュメントが正式なものであるとみなされます。このドキュメント全体を通し、リンク先のリソースに記載されている技術的な詳細情報はすべて、この互換性定義の一部とみなされます。

1.1 ドキュメント構造

1.1.1. デバイスタイプ別の要件

セクション 2 には、特定のデバイスタイプに適用される要件がすべて記載されています。セクション 2 の各サブセクションは、特定のデバイスタイプのみを対象としています。

あらゆる Android デバイス実装に普遍的に適用されるその他すべての要件については、セクション 2 の後のセクションに記載されています。このドキュメントでは、こうした要件を「コア要件」と呼びます。

1.1.2. 要件 ID

要件 ID は、「しなければならない」要件に割り当てられます。

  • ID は、「しなければならない」要件にのみ割り当てられます。
  • 「強く推奨される」要件は [SR] とマークされますが、ID は割り当てられません。
  • ID は、デバイスタイプ ID - 条件 ID - 要件 ID で構成されます(例: C-0-1)。

各 ID の定義は次のとおりです。

  • デバイスタイプ ID(詳細については 2. デバイスタイプをご覧ください)
    • C: コア(あらゆる Android デバイス実装に適用される要件)
    • H: Android ハンドヘルド デバイス
    • T: Android テレビデバイス
    • A: Android Automotive の実装
    • W: Android スマートウォッチ実装
    • Tab: Android タブレット実装
  • 条件 ID
    • 要件が無条件の場合、この ID は 0 と設定されます。
    • 要件が条件付きの場合、最初の条件に対して 1 が割り当てられ、同一セクション、同一デバイスタイプで数字が 1 ずつ増えます。
  • 要件 ID
    • この ID は 1 から始まり、同一セクション、同一条件で 1 ずつ増えます。

1.1.3. セクション 2 の要件 ID

セクション 2 の要件 ID は 2 つの部分で構成されています。最初の部分は、前述のセクション ID に対応しています。2 つ目の部分は、フォーム ファクタとフォーム ファクタ固有の要件を示します。

セクション ID の後に、要件 ID が続きます。

  • セクション 2 の ID は、セクション ID / デバイスタイプ ID - 条件 ID - 要件 ID で構成されます(例: 7.4.3/A-0-1)。

2. デバイスタイプ

Android オープンソース プロジェクトはさまざまなデバイスタイプやフォーム ファクタに使用できるソフトウェア スタックを提供しています。デバイスのセキュリティをサポートするために、ソフトウェア スタック(代替 OS または代替カーネル実装を含む)は、セクション 9 とこの CDD の他の部分に記載されているとおり、安全な環境で実行することが想定されています。アプリの配信エコシステムが比較的確立されているデバイスタイプもいくつかあります。

このセクションでは、こうしたデバイスタイプと、各デバイスタイプに適用される追加の要件と推奨事項について説明します。

記載されているデバイスタイプのいずれにも当てはまらない Android デバイス実装はすべて、この互換性定義の他のセクションに記載されている要件をすべて満たさなければなりません。

2.1 デバイス構成

デバイスタイプごとのハードウェア構成の主な違いについては、このセクションで後述するデバイス固有の要件をご覧ください。

2.2. ハンドヘルドの要件

Android ハンドヘルド デバイスとは、MP3 プレーヤー、スマートフォン、タブレットなど、通常は手に持って使用する Android デバイス実装を指します。

次の基準をすべて満たす場合、Android デバイス実装はハンドヘルドに分類されます。

  • バッテリーなど、持ち運びを可能にする電源がある。
  • 物理的な対角画面サイズが 4~8 インチの範囲内。
  • タッチスクリーン入力インターフェースがある。

このセクションでこれ以降記載する追加要件は、Android ハンドヘルド デバイス実装に固有のものです。

注: Android タブレット デバイスに適用されない要件には「*」を付しています。

2.2.1. ハードウェア

ハンドヘルド デバイス実装は:

  • [7.1.1.1/H-0-1] 少なくとも短辺 2.2 インチ、長辺 3.4 インチの Android 互換ディスプレイを少なくとも 1 つ備えなければなりません。
  • [7.1.1.3/H-SR-1] ディスプレイ サイズ(画面密度)を変更するアフォーダンスをユーザーに提供することが強く推奨されます。

  • [7.1.1.1/H-0-2] グラフィック バッファが内蔵ディスプレイの最高解像度と同程度以上である GPU 合成をサポートしなければなりません。

  • [7.1.1.1/H-0-3]* サードパーティ アプリで利用できるようにする各 UI_MODE_NORMAL ディスプレイを、少なくとも短辺 2.2 インチ、長辺 3.4 インチの遮蔽されていない物理的な表示領域内にマッピングしなければなりません。

  • [7.1.1.3/H-0-1]* DENSITY_DEVICE_STABLE の値は、92% または実際の対応ディスプレイの物理密度よりも大きく設定しなければなりません。

Vulkan のサポートが含まれる場合、ハンドヘルド デバイス実装は:

Configuration.isScreenHdr() を通じてハイ ダイナミック レンジ表示のサポートを主張する場合、ハンドヘルド デバイス実装は:

  • [7.1.4.5/H-1-1] 拡張機能 EGL_EXT_gl_colorspace_bt2020_pqEGL_EXT_surface_SMPTE2086_metadataEGL_EXT_surface_CTA861_3_metadataVK_EXT_swapchain_colorspaceVK_EXT_hdr_metadata のサポートをアドバタイズしなければなりません。

ハンドヘルド デバイス実装は:

  • [7.1.4.6/H-0-1] システム プロパティ graphics.gpu.profiler.support を介して、デバイスが GPU プロファイリングをサポートしているかどうかをレポートしなければなりません。

システム プロパティ graphics.gpu.profiler.support を介してサポートを宣言する場合、ハンドヘルド デバイス実装は:

ハンドヘルド デバイス実装は:

  • [7.1.5/H-0-1] アップストリームの Android オープンソース コードで実装されたレガシーアプリ互換モードのサポートを含まなければなりません。つまり、デバイス実装は、互換モードが有効になるトリガーまたはしきい値を変更してはなりません。また、互換モード自体の動作を変更してはなりません。
  • [7.2.1/H-0-1] サードパーティのインプット メソッド エディタ(IME)アプリのサポートを含まなければなりません。
  • [7.2.3/H-0-2] 戻る機能(KEYCODE_BACK)の通常イベントと長押しイベントの両方を、フォアグラウンド アプリに送信しなければなりません。これらのイベントはシステムで使用してはならず、Android デバイスの外部(Android デバイスに接続された外部ハードウェア キーボードなど)からトリガーできます。
  • [7.2.3/H-0-3] ホーム画面を提供するすべての Android 互換ディスプレイでホーム機能を提供しなければなりません。
  • [7.2.3/H-0-4] すべての Android 互換ディスプレイで戻る機能を提供し、少なくとも 1 つの Android 互換ディスプレイで履歴機能を提供しなければなりません。
  • [7.2.4/H-0-1] タッチスクリーン入力をサポートしなければなりません。
  • [7.2.4/H-SR-1] ユーザー選択のアシストアプリ(つまり VoiceInteractionService を実装するアプリ)を起動すること、あるいは、フォアグラウンド アクティビティが長押しイベントを処理しない場合は KEYCODE_MEDIA_PLAY_PAUSE または KEYCODE_HEADSETHOOK の長押しで ACTION_ASSIST を処理するアクティビティを起動することが強く推奨されます。
  • [7.3.1/H-SR-1] 3 軸加速度計を含むことが強く推奨されます。

3 軸加速度計が含まれる場合、ハンドヘルド デバイス実装は:

  • [7.3.1/H-1-1] 少なくとも周波数 100 Hz までのイベントをレポートできなければなりません。

GPS / GNSS レシーバーが含まれ、android.hardware.location.gps 機能フラグを通じてアプリに機能をレポートする場合、ハンドヘルド デバイス実装は:

  • [7.3.3/H-2-1] GPS / GNSS から計算した位置情報がまだレポートされていない場合であっても、GNSS 測定値が判明したらすぐにレポートしなければなりません。
  • [7.3.3/H-2-2] 全天条件下で、位置を特定した後に、静止しているか加速度 0.2 m/s 未満で移動している間、位置 20 m 以内、速度 0.2 m/s 以内、時間 95% 以上を計算するのに十分な、GNSS の擬似距離と擬似距離レートをレポートしなければなりません。

3 軸ジャイロスコープが含まれる場合、ハンドヘルド デバイス実装は:

  • [7.3.4/H-3-1] 少なくとも周波数 100 Hz までのイベントをレポートできなければなりません。
  • [7.3.4/H-3-2] 1,000 度/秒までの方向変化を測定できなければなりません。

音声通話を行い、getPhoneTypePHONE_TYPE_NONE 以外の値を示せるハンドヘルド デバイス実装は:

  • [7.3.8/H] 近接センサーを含むべきです。

ハンドヘルド デバイス実装は:

  • [7.3.11/H-SR-1] 6 自由度の姿勢センサーをサポートすることが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[7.4.3](2024 年 4 月 8 日プレビュー)

  • [7.4.3/H] Bluetooth と Bluetooth LE のサポートを含むべきです。
  • [7.4.3/H-0-1] Bluetooth と Bluetooth LE のサポートを含めなければなりません。
  • [7.4.3/H-0-2] Bluetooth 4.2 をサポートしなければなりません。

Bluetooth LE のサポートが含まれるハンドヘルド デバイス実装は:

  • [7.4.3/H-SR-1] Bluetooth LE データパケット長拡張をサポートすることが強く推奨されます。

新しい要件の終了

[7.4.3](2024 年 2 月 26 日プレビュー)

  • [7.4.3/H-0-1] Bluetooth と Bluetooth LE のサポートを含めなければなりません。
  • [7.4.3/H-0-2] Bluetooth 4.2 をサポートしなければなりません。
  • [7.4.3/H-SR-1] Bluetooth LE データパケット長拡張をサポートすることが強く推奨されます。

新しい要件の終了

[7.4.3](2023 年 12 月 11 日プレビュー)

  • [7.4.3/H-0-1] Bluetooth と Bluetooth LE のサポートを含めなければなりません。
  • [7.4.3/H-0-2] Bluetooth 4.2 と Bluetooth LE データ長拡張をサポートしなければなりません。
  • [7.4.3/H-0-3] 247 バイト以上の GATT ATT_MTU をサポートしなければなりません。
  • [7.4.3/H-0-4] Matter 1.0 コア仕様で規定されているとおり、C1、C2、C3 の 3 つの特性で BTP サービスをサポートしなければなりません。

新しい要件の終了

デバイスが PackageManager.FEATURE_WIFI_AWARE を宣言して Wi-Fi Neighbor Awareness Networking(NAN)プロトコルをサポートし、PackageManager.FEATURE_WIFI_RTT を宣言して Wi-Fi Location(Wi-Fi ラウンド トリップ時間 - RTT)をサポートしている場合、デバイスには以下の要件が適用されます。

  • [7.4.2.5/H-1-1] WifiRttManager#startRanging Android API を介して確認した 10 cm、1 m、3 m、5 m の距離における範囲を、累積分布関数で計算し、帯域幅 160 MHz では 68 パーセンタイルで正確度 +/-1 メートル以内、80 MHz 帯域幅では 68 パーセンタイルで正確度 +/-2 メートル以内、40 MHz 帯域幅では 68 パーセンタイルで正確度 +/-4 メートル以内、20 MHz 帯域幅では 68 パーセンタイルで正確度 +/-8 メートル以内でレポートしなければなりません。

  • [7.4.2.5/H-SR-1] WifiRttManager#startRanging Android API を介して確認した 10 cm の距離における範囲を、累積分布関数で計算し、帯域幅 160 MHz では 90 パーセンタイルで正確度 +/-1 メートル以内、80 MHz 帯域幅では 90 パーセンタイルで正確度 +/-2 メートル以内、40 MHz 帯域幅では 90 パーセンタイルで正確度 +/-4 メートル以内、20 MHz 帯域幅では 90 パーセンタイルで正確度 +/-8 メートル以内でレポートすることが強く推奨されます。

プレゼンス キャリブレーションで指定されている測定のセットアップ手順に沿うことが強く推奨されます。

FEATURE_BLUETOOTH_LE を宣言する場合、ハンドヘルド デバイス実装は:

  • [7.4.3/H-1-3] ADVERTISE_TX_POWER_HIGH で送信する参照デバイスから 1 m の距離で測定した BLE RSSI の中央値が -50 dBm +/-15 dB になるように、Rx オフセットを測定し補正しなければなりません。
  • [7.4.3/H-1-4] 1 m の距離に位置し、ADVERTISE_TX_POWER_HIGH で送信する参照デバイスからスキャンしたときに、BLE RSSI の中央値が -50 dBm +/-15 dB になるように、Tx オフセットを測定し補正しなければなりません。

CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA を使用して機能をリストする論理カメラデバイスが含まれる場合、ハンドヘルド デバイス実装は:

  • [7.5.4/H-1-1] デフォルトで通常の視野(FOV)を持たなければならず、50 度から 95 度の間でなければなりません。

ハンドヘルド デバイス実装は:

  • [7.6.1/H-0-1] アプリの個人データ(「/data」パーティション)に利用できる不揮発性ストレージが少なくとも 4 GB でなければなりません。
  • [7.6.1/H-0-2] カーネルとユーザー空間に利用できるメモリが 1 GB 未満の場合、ActivityManager.isLowRamDevice() について「true」を返さなければなりません。

32 ビット ABI のみのサポートを宣言する場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-1-1] デフォルト ディスプレイで qHD までのフレームバッファ解像度を使用する場合(例: FWVGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 416 MB でなければなりません。

  • [7.6.1/H-2-1] デフォルト ディスプレイで HD+ までのフレームバッファ解像度を使用する場合(例: HD、WSVGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 592 MB でなければなりません。

  • [7.6.1/H-3-1] デフォルト ディスプレイで FHD までのフレームバッファ解像度を使用する場合(例: WSXGA+)、カーネルとユーザー空間に利用できるメモリが少なくとも 896 MB でなければなりません。

  • [7.6.1/H-4-1] デフォルト ディスプレイで QHD までのフレームバッファ解像度を使用する場合(例: QWXGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 1,344 MB でなければなりません。

(32 ビット ABI の有無にかかわらず)64 ビット ABI のサポートを宣言する場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-5-1] デフォルト ディスプレイで qHD までのフレームバッファ解像度を使用する場合(例: FWVGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 816 MB でなければなりません。

  • [7.6.1/H-6-1] デフォルト ディスプレイで HD+ までのフレームバッファ解像度を使用する場合(例: HD、WSVGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 944 MB でなければなりません。

  • [7.6.1/H-7-1] デフォルト ディスプレイで FHD までのフレームバッファ解像度を使用する場合(例: WSXGA+)、カーネルとユーザー空間に利用できるメモリが少なくとも 1,280 MB でなければなりません。

  • [7.6.1/H-8-1] デフォルト ディスプレイで QHD までのフレームバッファ解像度を使用する場合(例: QWXGA)、カーネルとユーザー空間に利用できるメモリが少なくとも 1,824 MB でなければなりません。

なお、上記の「カーネルとユーザー空間に利用できるメモリ」とは、デバイス実装でカーネルの制御下にない、無線や動画などのハードウェア コンポーネント専用のメモリに加えて提供されるメモリ空間を指します。

カーネルとユーザー空間に利用できるメモリが 1 GB 以下の場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-9-1] 機能フラグ android.hardware.ram.low を宣言しなければなりません。
  • [7.6.1/H-9-2] アプリの個人データ(「/data」パーティション)用の不揮発性ストレージが少なくとも 1.1 GB でなければなりません。

カーネルとユーザー空間に利用できるメモリが 1 GB を超える場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-10-1] アプリの個人データ(「/data」パーティション)に利用できる不揮発性ストレージが少なくとも 4 GB でなければなりません。
  • 機能フラグ android.hardware.ram.normal を宣言すべきです。

カーネルとユーザー空間に利用できるメモリが 2 GB 以上 4 GB 未満の場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-SR-1] 32 ビットユーザー空間のみをサポートすることが強く推奨されます(アプリとシステムコードの両方)。

カーネルとユーザー空間に利用できるメモリが 2 GB 未満の場合、ハンドヘルド デバイス実装は:

  • [7.6.1/H-1-1] 1 つの ABI のみ(64 ビットのみ、または 32 ビットのみ)をサポートしなければなりません。

ハンドヘルド デバイス実装は:

  • [7.6.2/H-0-1] アプリ共有ストレージが 1 GiB 未満であってはなりません。
  • [7.7.1/H] ペリフェラル モードをサポートする USB ポートを含むべきです。

15(AOSP 試験運用版)の新しい要件の開始

[7.7.1/H-1-1](2023 年 12 月 11 日プレビュー)

ペリフェラル モードで動作するコントローラを備えたサポートする USB ポートを含む場合、ハンドヘルド デバイス実装は:

  • [7.7.1/H-1-1] Android Open Accessory(AOA)API を実装しなければなりません。

新しい要件の終了

ホストモードをサポートする USB ポートが含まれる場合、ハンドヘルド デバイス実装は:

ハンドヘルド デバイス実装は:

  • [7.8.1/H-0-1] マイクを含まなければなりません。
  • [7.8.2/H-0-1] オーディオ出力がなければならず、android.hardware.audio.output を宣言しなければなりません。

VR モードをサポートするためのパフォーマンス要件をすべて満たすことができ、そのサポートが含まれる場合、ハンドヘルド デバイス実装は:

  • [7.9.1/H-1-1] android.hardware.vr.high_performance 機能フラグを宣言しなければなりません。
  • [7.9.1/H-1-2] android.app.Activity#setVrModeEnabled を介して VR アプリで有効にできる android.service.vr.VrListenerService を実装するアプリを含まなければなりません。

ホストモードの USB-C ポートを 1 つ以上含んで実装(USB オーディオ クラス)する場合、セクション 7.7.2 の要件に加え、ハンドヘルド デバイス実装は:

  • [7.8.2.2/H-1-1] 次に示す HID コードのソフトウェア マッピングを提供しなければなりません。
機能 マッピング コンテキスト 動作
A HID 使用ページ: 0x0C
HID 使用: 0x0CD
カーネルキー: KEY_PLAYPAUSE
Android キー: KEYCODE_MEDIA_PLAY_PAUSE
メディア再生 入力: 短押し
出力: 再生または一時停止
入力: 長押し
出力: 音声コマンドを起動
送信: デバイスがロックされているか画面がオフの場合は android.speech.action.VOICE_SEARCH_HANDS_FREE を、それ以外の場合は android.speech.RecognizerIntent.ACTION_WEB_SEARCH を送信
着信 入力: 短押し
出力: 着信に応答
入力: 長押し
出力: 通話を拒否
通話中 入力: 短押し
出力: 通話を終了
入力: 長押し
出力: マイクをミュートまたはミュート解除
B HID 使用ページ: 0x0C
HID 使用: 0x0E9
カーネルキー: KEY_VOLUMEUP
Android キー: VOLUME_UP
メディア再生、通話中 入力: 短押しまたは長押し
出力: システムまたはヘッドセットの音量を上げる
C HID 使用ページ: 0x0C
HID 使用: 0x0EA
カーネルキー: KEY_VOLUMEDOWN
Android キー: VOLUME_DOWN
メディア再生、通話中 入力: 短押しまたは長押し
出力: システムまたはヘッドセットの音量を下げる
D HID 使用ページ: 0x0C
HID 使用: 0x0CF
カーネルキー: KEY_VOICECOMMAND
Android キー: KEYCODE_VOICE_ASSIST
すべて。任意のインスタンスでトリガー可能。 入力: 短押しまたは長押し
出力: 音声コマンドを起動
  • [7.8.2.2/H-1-2] プラグ挿入時に ACTION_HEADSET_PLUG をトリガーしなければなりません。ただし、接続されている端子のタイプを識別するために USB オーディオ インターフェースとエンドポイントが適切に列挙された後に限ります。

USB オーディオ端子タイプ 0x0302 が検出された場合:

  • [7.8.2.2/H-2-1] 「microphone」エクストラを 0 に設定してインテント ACTION_HEADSET_PLUG をブロードキャストしなければなりません。

USB オーディオ端子タイプ 0x0402 が検出された場合:

  • [7.8.2.2/H-3-1] 「microphone」エクストラを 1 に設定してインテント ACTION_HEADSET_PLUG をブロードキャストしなければなりません。

USB 周辺機器が接続されている間に API AudioManager.getDevices() が呼び出された場合:

  • [7.8.2.2/H-4-1] USB オーディオ端子タイプのフィールドが 0x0302 であれば、タイプ AudioDeviceInfo.TYPE_USB_HEADSET、ロール isSink() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-2] USB オーディオ端子タイプのフィールドが 0x0402 であれば、タイプ AudioDeviceInfo.TYPE_USB_HEADSET、ロール isSink() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-3] USB オーディオ端子タイプのフィールドが 0x0402 であれば、タイプ AudioDeviceInfo.TYPE_USB_HEADSET、ロール isSource() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-4] USB オーディオ端子タイプのフィールドが 0x603 であれば、タイプ udioDeviceInfo.TYPE_USB_DEVICE、ロール isSink() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-5] USB オーディオ端子タイプのフィールドが 0x604 であれば、タイプ AudioDeviceInfo.TYPE_USB_DEVICE、ロール isSource() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-6] USB オーディオ端子タイプのフィールドが 0x400 であれば、タイプ AudioDeviceInfo.TYPE_USB_DEVICE、ロール isSink() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-4-7] USB オーディオ端子タイプのフィールドが 0x400 であれば、タイプ AudioDeviceInfo.TYPE_USB_DEVICE、ロール isSource() のデバイスをリストしなければなりません。

  • [7.8.2.2/H-SR-1] USB-C オーディオ周辺機器の接続時、USB 記述子の列挙、端子タイプの特定、インテント ACTION_HEADSET_PLUG のブロードキャストを、1,000 ミリ秒未満で実施することが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[5.6/H-1-1 および 5.6/H-1-2](2024 年 2 月 5 日プレビュー)

もし、android.hardware.audio.outputandroid.hardware.microphone を宣言しているハンドヘルド デバイス実装の場合、セクション 5.6 の RTL の要件および TTL の要件をご覧ください

  • [5.6/H-1-1] 「スピーカーからマイク」、3.5 mm ループバック アダプター(サポートされている場合)、USB ループバック(サポートされている場合)のデータパスにおいて、5 回の測定での平均連続ラウンドトリップ レイテンシが 300 ミリ秒以下、平均絶対偏差が 30 ミリ秒未満でなければなりません。

  • [5.6/H-1-2] スピーカーからマイクへのデータパスで、少なくとも 5 回の測定での平均タップツートーン レイテンシが 300 ミリ秒以下でなければなりません。

新しい要件の終了

リニア共振アクチュエータ(LRA)は、質点を目的の運動方向に並進させる主共振周波数を持つ、単一のばね質量系です。

少なくとも 1 つの汎用 7.10 リニア共振アクチュエータが含まれる場合、ハンドヘルド デバイス実装は:

  • [7.10/H] デバイスを手で通常持つか触れる場所の近くにアクチュエータを配置すべきです。

  • [7.10/H] 触覚アクチュエータをデバイスの自然な向きの X 軸(左右)で動かすべきです。

汎用触覚アクチュエータが含まれていて、それが X 軸のリニア共振アクチュエータ(LRA)である場合、ハンドヘルド デバイス実装は:

  • [7.10/H] X 軸の LRA の共振周波数を 200 Hz 未満にすべきです。

触覚定数マッピングに従う場合、ハンドヘルド デバイス実装は:

2.2.2. マルチメディア

ハンドヘルド デバイス実装は、次の形式のオーディオ エンコードとデコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.1/H-0-1] AMR-NB
  • [5.1/H-0-2] AMR-WB
  • [5.1/H-0-3] MPEG-4 AAC プロファイル(AAC LC)
  • [5.1/H-0-4] MPEG-4 HE AAC プロファイル(AAC+)
  • [5.1/H-0-5] AAC ELD(Enhanced Low Delay AAC)

ハンドヘルド デバイス実装は、次の形式の動画エンコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.2/H-0-1] H.264 AVC
  • [5.2/H-0-2] VP8
  • [5.2/H-0-3] AV1

ハンドヘルド デバイス実装は、次の形式の動画デコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.3/H-0-1] H.264 AVC
  • [5.3/H-0-2] H.265 HEVC
  • [5.3/H-0-3] MPEG-4 SP
  • [5.3/H-0-4] VP8
  • [5.3/H-0-5] VP9
  • [5.3/H-0-6] AV1

2.2.3. ソフトウェア

ハンドヘルド デバイス実装は:

  • [3.2.3.1/H-0-1] SDK ドキュメントに記載されているとおり、インテント ACTION_GET_CONTENTACTION_OPEN_DOCUMENTACTION_OPEN_DOCUMENT_TREEACTION_CREATE_DOCUMENT を処理するアプリを持ち、DocumentsProvider API を使用してドキュメント プロバイダ データにアクセスするユーザー アフォーダンスを提供しなければなりません。
  • [3.2.3.1/H-0-2]* こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードしなければなりません。
  • [3.2.3.1/H-SR-1] インテント ACTION_SENDTOACTION_SEND、または ACTION_SEND_MULTIPLE を処理してメールを送信できるメールアプリをプリロードすることが強く推奨されます。
  • [3.4.1/H-0-1] android.webkit.Webview API の完全な実装を提供しなければなりません。
  • [3.4.2/H-0-1] 一般ユーザーのウェブ ブラウジング用のスタンドアロン ブラウザアプリを含まなければなりません。
  • [3.8.1/H-SR-1] ショートカット、ウィジェット、widgetFeatures のアプリ内固定をサポートするデフォルト ランチャーを実装することが強く推奨されます。
  • [3.8.1/H-SR-2] ShortcutManager API を介してサードパーティ アプリで提供される追加のショートカットにすばやくアクセスできるようにするデフォルト ランチャーを実装することが強く推奨されます。
  • [3.8.1/H-SR-3] アプリアイコンにバッジを表示するデフォルト ランチャー アプリを含むことが強く推奨されます。
  • [3.8.2/H-SR-1] サードパーティ アプリ ウィジェットをサポートすることが強く推奨されます。
  • [3.8.3/H-0-1] API クラス NotificationNotificationManager を介してサードパーティ アプリがユーザーに重要なイベントを通知することを許可しなければなりません。
  • [3.8.3/H-0-2] リッチ通知をサポートしなければなりません。
  • [3.8.3/H-0-3] ヘッドアップ通知をサポートしなければなりません。
  • [3.8.3/H-0-4] AOSP で実装されるように、アクション ボタンやコントロール パネルなどのユーザー アフォーダンスを通じてユーザーが通知を直接コントロール(返信、スヌーズ、拒否、ブロックなど)できるようにする通知シェードを含まなければなりません。
  • [3.8.3/H-0-5] RemoteInput.Builder setChoices() を通じて提供する選択肢を通知シェードに表示しなければなりません。
  • [3.8.3/H-SR-1] RemoteInput.Builder setChoices() を通じて提供される最初の選択肢を、追加のユーザー操作なしで通知シェードに表示することが強く推奨されます。
  • [3.8.3/H-SR-2] ユーザーが通知シェード内の通知をすべて開いた際に、RemoteInput.Builder setChoices() を通じて提供されるすべての選択肢を通知シェードに表示することが強く推奨されます。
  • [3.8.3.1/H-SR-1] Notification.Action.Builder.setContextualtrue に設定されているアクションを、Notification.Remoteinput.Builder.setChoices によって表示される返信に沿って表示することが強く推奨されます。
  • [3.8.4/H-SR-1] アシスト アクションを処理するために、デバイスにアシスタントを実装することが強く推奨されます。

MediaStyle 通知をサポートする場合、ハンドヘルド デバイス実装は:

  • [3.8.3.1/H-SR-2] MediaSession トークンを含む MediaStyle 通知をアプリが送信したときに、使用できる適切なメディアルート間(例: Bluetooth デバイスや MediaRouter2Manager に提供されるルート)での切り替えをユーザーができるようにする、システム UI からアクセスできるユーザー アフォーダンス(例: 出力スイッチャー)を提供することが強く推奨されます。

セクション 7.2.3 で詳述するように履歴機能のナビゲーション キーが含まれ、インターフェースを変更する場合、デバイス実装は:

  • [3.8.3/H-1-1] 画面固定動作を実装し、機能を切り替えるための設定メニューをユーザーに提供しなければなりません。

アシスト アクションをサポートする場合、ハンドヘルド デバイス実装は:

  • [3.8.4/H-SR-2] セクション 7.2.3 に記載されているとおり、アシストアプリを起動するための指定操作として HOME キーの長押しを使用することが強く推奨されます。ユーザー選択のアシストアプリ(つまり VoiceInteractionService を実装するアプリ)または ACTION_ASSIST インテントを処理するアクティビティを起動しなければなりません。

conversation notifications をサポートし、アラート通知と会話以外のサイレント通知とは別のセクションにグループ化する場合、ハンドヘルド デバイス実装は:

  • [3.8.4/H-1-1]* 進行中のフォアグラウンド サービス通知と importance:high の通知を除き、会話以外の通知より前に会話通知を表示しなければなりません。

ロック画面をサポートする場合、Android ハンドヘルド デバイス実装は:

  • [3.8.10/H-1-1] メディア通知テンプレートを含め、ロック画面通知を表示しなければなりません。

セキュアロック画面をサポートする場合、ハンドヘルド デバイス実装は:

  • [3.9/H-1-1] Android SDK ドキュメントで規定されているすべてのデバイス管理ポリシーを実装しなければなりません。

ControlsProviderService API と Control API のサポートが含まれ、サードパーティ アプリがデバイス コントロールをパブリッシュできるようにする場合、ハンドヘルド デバイス実装は:

  • [3.8.16/H-1-1] 機能フラグ android.software.controls を宣言し、true に設定しなければなりません。
  • [3.8.16/H-1-2] ControlsProviderService API と Control API を通じてサードパーティ アプリで登録されたコントロールから、ユーザーのお気に入りのデバイス コントロールを追加、編集、選択、操作できるユーザー アフォーダンスを提供しなければなりません。
  • [3.8.16/H-1-3] デフォルト ランチャーから 3 操作以内で、このユーザー アフォーダンスへのアクセスを提供しなければなりません。
  • [3.8.16/H-1-4] このユーザー アフォーダンスに、ControlsProviderService API を介してコントロールを提供する各サードパーティ アプリの名前とアイコン、また Control API で提供される指定のフィールドを、正確にレンダリングしなければなりません。

  • [3.8.16/H-1-5] ControlsProviderServiceControl Control.isAuthRequired API を通じて、サードパーティ アプリによって登録されたコントロールから、アプリによって指定された認証が簡素化されたデバイス コントロールをオプトアウトするユーザー アフォーダンスを提供しなければなりません。

  • [3.8.16/H-1-6] デバイス実装は、次のとおり、ユーザー アフォーダンスを正確にレンダリングしなければなりません。

    • デバイスが config_supportsMultiWindow=true を設定し、アプリが ControlsProviderService 宣言でメタデータ META_DATA_PANEL_ACTIVITY を宣言し、有効なアクティビティの ComponentName を含む場合(API によって定義)、アプリはこのユーザー アフォーダンスに当該アクティビティを埋め込まなければなりません。
    • アプリは、メタデータ META_DATA_PANEL_ACTIVITY を宣言しない場合、ControlsProviderService API で提供される指定のフィールドと、Control API で提供される指定のフィールドをレンダリングしなければなりません。
  • [3.8.16/H-1-7] アプリは、メタデータ META_DATA_PANEL_ACTIVITY を宣言する場合、埋め込んだアクティビティの起動時に EXTRA_LOCKSCREEN_ALLOW_TRIVIAL_CONTROLS を使用して、[3.8.16/H-1-5] に定められている設定の値を渡さなければなりません。

逆に、このようなコントロールを実装しない場合、ハンドヘルド デバイス実装は:

ハンドヘルド デバイスがロックタスク モードで動作していないときに、コンテンツがクリップボードにコピーされた場合、ハンドヘルド デバイス実装は:

  • [3.8.17/H-1-1] ユーザーに対して、データがクリップボードにコピーされたことの確認(サムネイルや「コンテンツをコピーしました」など)を表示しなければなりません。さらに、クリップボード データがデバイス間で同期されるかどうかも示します。

ハンドヘルド デバイス実装は:

  • [3.10/H-0-1] サードパーティのユーザー補助サービスをサポートしなければなりません。
  • [3.10/H-SR-1] talkback オープンソース プロジェクトで提供されているスイッチ アクセスと TalkBack(プリインストールのテキスト読み上げエンジンでサポートされている言語)のユーザー補助サービスと同等かそれ以上の機能を持つユーザー補助サービスをデバイスにプリロードすることが強く推奨されます。
  • [3.11/H-0-1] サードパーティ TTS エンジンのインストールをサポートしなければなりません。
  • [3.11/H-SR-1] デバイスで利用可能な言語をサポートする TTS エンジンを含むことが強く推奨されます。
  • [3.13/H-SR-1] クイック設定 UI コンポーネントを含むことが強く推奨されます。

FEATURE_BLUETOOTH または FEATURE_WIFI のサポートを宣言する場合、Android ハンドヘルド デバイス実装は:

  • [3.16/H-1-1] コンパニオン デバイスのペア設定機能をサポートしなければなりません。

ナビゲーション機能が画面上のジェスチャーベースのアクションとして提供される場合:

  • [7.2.3/H] ホーム機能のためのジェスチャー認識ゾーンは、画面の底部から高さ 32 dp 以下であるべきです。

ナビゲーション機能を画面の左端または右端の任意の場所からのジェスチャーとして提供する場合、ハンドヘルド デバイス実装は:

  • [7.2.3/H-0-1] ナビゲーション機能のジェスチャー エリアは、両側で幅 40 dp 未満でなければなりません。ジェスチャー エリアは、デフォルトで幅 24 dp であるべきです。

セキュアロック画面をサポートし、カーネルとユーザー空間に利用できるメモリが 2 GB 以上の場合、ハンドヘルド デバイス実装は:

  • [3.9/H-1-2] android.software.managed_users 機能フラグを介して管理対象プロファイルのサポートを宣言しなければなりません。

android.hardware.camera.any を介してカメラのサポートを宣言する場合、Android ハンドヘルド デバイス実装は:

アクティビティの埋め込みを使用して、デバイス実装の設定アプリに分割機能を実装する場合、デバイス実装は:

ユーザーが任意の種類の通話をできるようにする場合、デバイス実装は:

2.2.4. パフォーマンスと電力

  • [8.1/H-0-1] 一貫したフレーム レイテンシ。一貫性のないフレーム レイテンシ、またはフレームのレンダリングの遅延は、1 秒間に 5 フレームを超えて発生してはならず、1 秒間に 1 フレーム未満であるべきです。
  • [8.1/H-0-2] ユーザー インターフェースのレイテンシ。デバイス実装は、Android 互換性テストスイート(CTS)で定義された 10,000 リストエントリのリストを 36 秒未満でスクロールすることで、低レイテンシのユーザー エクスペリエンスを実現しなければなりません。
  • [8.1/H-0-3] タスクの切り替え。複数のアプリが起動されている場合、起動後に実行中のアプリを再起動するまでにかかる時間は 1 秒未満でなければなりません。

ハンドヘルド デバイス実装は:

  • [8.2/H-0-1] 少なくとも 5 MB/s のシーケンシャル書き込みパフォーマンスを実現しなければなりません。
  • [8.2/H-0-2] 少なくとも 0.5 MB/s のランダム書き込みパフォーマンスを実現しなければなりません。
  • [8.2/H-0-3] 少なくとも 15 MB/s のシーケンシャル読み取りパフォーマンスを実現しなければなりません。
  • [8.2/H-0-4] 少なくとも 3.5 MB/s のランダム読み取りパフォーマンスを実現しなければなりません。

AOSP に含まれるデバイス電源管理を改善する機能を含むか、AOSP に含まれる機能を拡張する場合、ハンドヘルド デバイス実装は:

  • [8.3/H-1-1] バッテリー セーバー機能を有効または無効にするユーザー アフォーダンスを提供しなければなりません。
  • [8.3/H-1-2] アプリ スタンバイと Doze 省電力モードから除外されたすべてのアプリを表示するユーザー アフォーダンスを提供しなければなりません。

ハンドヘルド デバイス実装は:

  • [8.4/H-0-1] Android オープンソース プロジェクトのサイトに記載されているとおり、ハードウェア コンポーネントごとの電流消費値と、時間の経過に伴ってコンポーネントによって発生するおおよそのバッテリー消耗量を定義する、コンポーネントごとの電力プロファイルを提供しなければなりません。
  • [8.4/H-0-2] すべての消費電力値をミリアンペア時(mAh)単位でレポートしなければなりません。
  • [8.4/H-0-3] プロセスの UID ごとの CPU 消費電力をレポートしなければなりません。Android オープンソース プロジェクトは、uid_cputime カーネル モジュール実装を通じて要件を満たしています。
  • [8.4/H-0-4] この電力使用量を、adb shell dumpsys batterystats シェルコマンドを介してアプリ デベロッパーが利用できるようにしなければなりません。
  • [8.4/H] ハードウェア コンポーネントの電力使用量をアプリに帰属させられない場合、ハードウェア コンポーネント自体に帰属されるべきです。

画面または動画出力が含まれる場合、ハンドヘルド デバイス実装は:

ハンドヘルド デバイス実装は:

  • [8.5/H-0-1] アクティブなフォアグラウンド サービスまたはユーザーが開始するジョブがあるすべてのアプリを確認するため、ユーザー アフォーダンスを提供しなければなりません。これには、SDK のドキュメントに記載されている各サービスが開始してからの経過時間が含まれます。

  • [8.5/H-0-2] フォアグラウンド サービスまたはユーザーが開始するジョブを実行するアプリを停止するユーザー アフォーダンスを提供しなければなりません。

2.2.5. セキュリティ モデル

ハンドヘルド デバイス実装は:

  • [9/H-0-1] android.hardware.security.model.compatible 機能を宣言しなければなりません。
  • [9.1/H-0-1] サードパーティ製アプリが android.permission.PACKAGE_USAGE_STATS 権限を介して使用統計情報にアクセスできるようにし、android.settings.ACTION_USAGE_ACCESS_SETTINGS インテントに応じて、そのようなアプリへのアクセス権を付与または取り消す、ユーザーがアクセス可能なメカニズムを提供しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[9/H-0-2] と [9/H-0-3](2024 年 5 月 29 日プレビュー)

android.software.credentials のサポートを宣言しなければならず、デバイス実装は:

  • [9/H-0-2] android.settings.CREDENTIAL_PROVIDER インテントを使用し、認証情報マネージャーの優先プロバイダを選択できるようにしなければなりません。このプロバイダは、自動入力が有効となり、また、認証情報マネージャー経由で入力された新しい認証情報を保存するデフォルトの場所となります。

  • [9/H-0-3] 同時に実行する認証情報プロバイダを少なくとも 2 つサポートし、設定アプリでプロバイダを有効 / 無効にするためのユーザー アフォーダンスを提供しなければなりません。

新しい要件の終了

android.hardware.telephony のサポートを宣言する場合、デバイス実装は:

  • [9.5/H-1-1] UserManager.isHeadlessSystemUserModetrue に設定してはなりません。

ハンドヘルド デバイス実装は:

  • [9.11/H-0-2] 隔離された実行環境でキーストア実装をバックアップしなければなりません。
  • [9.11/H-0-3] カーネル以上で動作するコードから安全に隔離されたエリアで、Android Keystore システムのサポート対象アルゴリズムを適切にサポートするために、RSA、AES、ECDSA、HMAC 暗号アルゴリズムと、MD5、SHA1、SHA-2 ファミリー ハッシュ関数の実装を持たなければなりません。安全な隔離では、DMA を含め、隔離された環境の内部状態にカーネルまたはユーザー空間のコードがアクセスする可能性のあるすべてのメカニズムをブロックしなければなりません。アップストリームの Android オープンソース プロジェクト(AOSP)は、Trusty 実装を使用することでこの要件を満たしています。ただし、別の ARM TrustZone ベースのソリューション、または、サードパーティのレビューによる適切なハイパーバイザベースの隔離オプションをセキュアに実装する方法を選択することもできます。
  • [9.11/H-0-4] 隔離された実行環境でロック画面認証を行わなければならず、成功した場合にのみ、認証にバインドされた鍵の使用を許可しなければなりません。ロック画面の認証情報は、隔離された実行環境のみがロック画面認証を行えるように保存しなければなりません。アップストリームの Android オープンソース プロジェクトは、ゲートキーパー Hardware Abstraction Layer(HAL)と Trusty を提供しており、これを使用してこの要件を満たすことができます。

15(AOSP 試験運用版)の新しい要件の開始

[9.11/H-0-5](2024 年 5 月 29 日プレビュー)

  • [9.11/H-0-5] 証明書署名鍵がセキュア ハードウェアによって保護され、署名がセキュア ハードウェアで行われるキー構成証明をサポートしなければなりません。証明書署名鍵は十分な数のデバイス間で共有し、鍵が恒久的なデバイス ID として使用されることを防止しなければなりません。この要件を満たす方法としては、特定の SKU が少なくとも 100,000 ユニット生成されない限り、同じ証明書鍵を共有することが挙げられます。生成される SKU が 100,000 ユニットを超える場合は、100,000 ユニットごとに異なるキーを使用しても構いません。

新しい要件の終了

なお、デバイス実装が以前のバージョンの Android ですでにリリースされている場合、そのようなデバイスは、隔離された実行環境で動作するキーストアが必要な android.hardware.fingerprint 機能を宣言する場合を除き、隔離された実行環境で動作するキーストアを持ち、キー構成証明をサポートする必要があるという要件を免除されます。

セキュアロック画面をサポートする場合、ハンドヘルド デバイス実装は:

  • [9.11/H-1-1] ユーザーが最短のスリープ タイムアウト(ロック解除状態からロック状態への遷移時間)を 15 秒以下として選択できるようにしなければなりません。
  • [9.11/H-1-2] 通知を非表示にし、9.11.1 セキュアロック画面に記載されている第 1 の認証を除くすべての形式の認証を無効にするユーザー アフォーダンスを提供しなければなりません。AOSP は、ロックダウン モードとしての要件を満たしています。

セキュアロック画面があり、TrustAgentService システム API を実装する信頼エージェントが 1 つ以上含まれる場合、デバイス実装は:

  • [9.11.1/H-1-1] 少なくとも 72 時間以内ごとに 1 回、推奨される第 1 の認証方法(PIN、パターン、パスワードなど)のいずれかをユーザーに求めなければなりません。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言しない場合、ハンドヘルド デバイス実装は:

  • [9.5/H-2-1] 制限付きプロファイル(追加のユーザーと、そのユーザーがデバイス上でできることを、デバイス所有者が管理できるようにする機能)をサポートしなければなりません。制限付きプロファイルにより、デバイス所有者は、追加のユーザーが使用する個別の環境をすばやく設定でき、その環境で利用できるアプリの制限をきめ細かく管理できます。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言する場合、ハンドヘルド デバイス実装は:

  • [9.5/H-3-1] 制限付きプロファイルをサポートしてはなりませんが、他のユーザーによる音声通話と SMS へのアクセスを可能 / 不可能にするコントロールの AOSP 実装に合わせなければなりません。

UserManager.isHeadlessSystemUserModetrue に設定している場合、ハンドヘルド デバイス実装は:

  • [9.5/H-4-1] eUICC のサポート、または通話機能のある eSIM のサポートを含めてはなりません。
  • [9.5/H-4-2] android.hardware.telephony のサポートを宣言してはなりません。

Android はシステム API の VoiceInteractionService を通じて、マイクへのアクセスを示すことなく起動ワードを常時安全に検出するメカニズムをサポートしています。また、マイクまたはカメラへのアクセスを示すことなくクエリを常時検出するメカニズムもサポートしています。

15(AOSP 試験運用版)の新しい要件の開始

9.8/H-0-1 から 9.8/H-0-4(2024 年 5 月 29 日プレビュー)

制限付き設定

制限付き設定を使用すると、以下のいずれかの各アプリケーションの権限を付与する目的で、警告を表示させ、ユーザーに対して確認を求めます。

  • PACKAGE_DOWNLOADED_FILE として PackageManager で識別される「アプリストア」のアプリケーション以外のアプリケーション(例: メッセージ アプリやブラウザ)経由でダウンロードした後にインストールされたもの。
  • PACKAGE_SOURCE_LOCAL_FILE として PackageManager で識別されるローカル ファイル(アプリケーションがサイドローディングされたなど)からインストールされたもの。

権限とそれに関連付けられている識別子の一覧は以下のとおりです。

  • アラームとリマインダー: AppOpsManager.OPSTR_SCHEDULE_EXACT_ALARM
  • すべてのファイルへのアクセス: AppOpsManager.OPSTR_MANAGE_EXTERNAL_STORAGE
  • 他のアプリの上に重ねて表示: AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW
  • 不明なアプリのインストール: AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES
  • メディアの管理: AppOpsManager.OPSTR_MANAGE_MEDIA
  • システム設定の変更: AppOpsManager.OPSTR_WRITE_SETTINGS
  • ピクチャー イン ピクチャー: AppOpsManager.OPSTR_PICTURE_IN_PICTURE
  • 画面をオンにする: AppOpsManager.OPSTR_TURN_SCREEN_ON
  • 全画面通知: AppOpsManager.OPSTR_USE_FULL_SCREEN_INTENT
  • Wi-Fi の管理: AppOpsManager.OPSTR_CHANGE_WIFI_STATE
  • ユーザー補助: AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE
  • 通知リスナー: AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS
  • 使用状況へのアクセス: AppOpsManager.OPSTR_GET_USAGE_STATS
  • デバイス管理: Manifest.permission.BIND_DEVICE_ADMIN
  • サイレント モード: Manifest.permission.MANAGE_NOTIFICATIONS

こうしたアプリケーションは、このセクションに記載されている要件に対して「対象アプリケーション」と表示されます。

デバイス実装は:

  • [9.8/H-0-1] 以下のサブセットには、上記に示した制限付き設定を実装しなければなりません。
    • ユーザー補助
    • 通知リスナー
    • デフォルトのアプリ(電話、SMS)
    • デバイス管理アプリ
    • 他のアプリの上に重ねて表示
    • 使用状況へのアクセス
    • SMS ランタイム
    • 電話ランタイム
  • [9.8/H-0-2] デフォルトで制限付き設定を有効にしなければなりません。ユーザーがすべてのアプリケーションに対して制限付き設定を無効にできるユーザー アフォーダンスを提供しないようにすることが強く推奨されます。
  • [9.8/H-0-3] 適用する権限を付与する前に、各対象アプリケーションに対してユーザーによる確認の取得が必要になるようにしなければなりません。
  • [9.8/H-0-4] 各対象アプリケーションに対して、通常の権限リクエストのフローの間にユーザーによる確認の取得を許可してはなりません。

新しい要件の終了

System API HotwordDetectionService、またはマイクへのアクセスを示さない起動ワード検出の別のメカニズムをサポートする場合、ハンドヘルド デバイス実装は:

  • [9.8/H-1-1] 起動ワード検出サービスがデータを送信できる対象を、システム、ContentCaptureService、または SpeechRecognizer#createOnDeviceSpeechRecognizer() によって作成されたデバイス上の音声認識サービスに限定しなければなりません。
  • [9.8/H-1-2] 起動ワード検出サービスがマイクの音声データまたはその派生データを送信できる対象を、HotwordDetectionService API を通じたシステム サーバーか、ContentCaptureManager API を通じた ContentCaptureService に限定しなければなりません。
  • [9.8/H-1-3] 個々のハードウェアでトリガーされたリクエストについて、30 秒間を超えるマイク音声を起動ワード検出サービスに供給してはなりません。
  • [9.8/H-1-4] 個々のリクエストについて、8 秒間を超えてバッファリングされたマイク音声を起動ワード検出サービスに供給してはなりません。
  • [9.8/H-1-5] 30 秒間を超えてバッファリングされたマイク音声を音声操作サービスまたは同様のエンティティに供給してはなりません。
  • [9.8/H-1-6] 成功した各起動ワード結果について、100 バイトを超えるデータ(オーディオ ストリームを除く)を起動ワード検出サービスから送信できるようにしてはなりません。
  • [9.8/H-1-7] 否定的な各起動ワード結果について、5 ビットを超えるデータを起動ワード検出サービスから送信できるようにしてはなりません。
  • [9.8/H-1-8] システム サーバーから起動ワード検証リクエストがあった場合にのみ、起動ワード検出サービスからのデータ送信を許可しなければなりません。
  • [9.8/H-1-9] ユーザーによるインストールが可能なアプリが起動ワード検出サービスを提供できるようにしてはなりません。
  • [9.8/H-1-10] 起動ワード検出サービスによるマイクの使用に関する定量的データを UI に表示してはなりません。
  • [9.8/H-1-11] セキュリティ研究者が検査できるように、起動ワード検出サービスからのすべての送信に含まれるバイト数をログに記録しなければなりません。
  • [9.8/H-1-12] セキュリティ研究者が検査できるように、起動ワード検出サービスからのすべての送信の未加工コンテンツをログに記録するデバッグモードをサポートしなければなりません。
  • [9.8/H-1-14] 成功した起動ワード結果が音声操作サービスまたは同様のエンティティに送信された場合に、セクション 9.8.2 で説明されているマイク インジケーターを表示しなければなりません。

  • [9.8/H-1-15] 成功した起動ワード結果で提供されるオーディオ ストリームが、起動ワード検出サービスから音声操作サービスへの一方向で送信されるようにしなければなりません。

  • [9.8/H-SR-1] 起動ワード検出サービスのプロバイダとしてアプリを設定する前に、ユーザーに通知することが強く推奨されます。

  • [9.8/H-SR-2] 起動ワード検出サービスからの非構造化データの送信を禁止することが強く推奨されます。

  • [9.8/H-SR-3] 起動ワード検出サービスをホストするプロセスを、少なくとも 1 時間に 1 回、またはハードウェア トリガー イベント 30 回ごとに(どちらか早い方)、再起動することが強く推奨されます。

システム API HotwordDetectionService や、マイクの使用を示さず同様の起動ワード検出メカニズムを使用するアプリがデバイス実装に含まれる場合、そのアプリは:

  • [9.8/H-2-1] サポートされている各起動ワードフレーズについて、ユーザーに明示的な通知を提供しなければなりません。
  • [9.8/H-2-2] 起動ワード検出サービスを通じて、未加工音声データまたはその派生データを保持してはなりません。
  • [9.8/H-2-3] 起動ワード検出サービスから、ContentCaptureService、またはデバイス上の音声認識サービスを除き、音声データ、音声の(全体的もしくは部分的)再構築に使用できるデータ、または起動ワード自体とは関係のないオーディオ コンテンツを送信してはなりません。

システム API VisualQueryDetectionService、または、マイクやカメラへのアクセスを示さないクエリ検出の別のメカニズムをサポートする場合、ハンドヘルド デバイス実装は:

  • [9.8/H-3-1] クエリ検出サービスがデータを送信できる対象を、システム、ContentCaptureService、またはデバイス上の音声認識サービス(SpeechRecognizer#createOnDeviceSpeechRecognizer() によって作成されるサービス)に限定しなければなりません。
  • [9.8/H-3-2] ContentCaptureService またはデバイス上の音声認識サービスを除き、音声情報または動画情報を VisualQueryDetectionService から送信できるようにしてはなりません。
  • [9.8/H-3-3] デジタル アシスタント アプリを使用しようとするユーザーの意図をデバイスが検出したとき(カメラを介してユーザーの存在を検出したときなど)は、システム UI にユーザー通知を表示しなければなりません。
  • [9.8/H-3-4] ユーザークエリが検出された直後に、マイク インジケーターを表示し、検出されたユーザークエリを UI に表示しなければなりません。
  • [9.8/H-3-5] ユーザーがインストール可能なアプリが、ビジュアル クエリ検出サービスを提供できるようにしてはなりません。

android.hardware.microphone を宣言する場合、ハンドヘルド デバイス実装は:

  • [9.8.2/H-4-1] アプリがマイクからオーディオ データにアクセスしているときはマイク インジケーターを表示しなければなりません。ただし、HotwordDetectionServiceSOURCE_HOTWORDContentCaptureService、またはセクション 9.1 で CDD 識別子 [C-4-X] が割り当てられたロールを持つアプリからのみマイクにアクセスする場合は、この限りではありません。
  • [9.8.2/H-4-2] PermissionManager.getIndicatorAppOpUsageData() から返された、マイクを使用している最近使ったアプリとアクティブなアプリのリストを、関連する属性メッセージとともに表示しなければなりません。
  • [9.8.2/H-4-3] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、マイク インジケーターを非表示にしてはなりません。
  • [9.8.2/H-4-4] PermissionManager.getIndicatorAppOpUsageData() から返された、マイクを使用している最近使ったアプリとアクティブなアプリのリストを、関連する属性メッセージとともに表示しなければなりません。

android.hardware.camera.any を宣言する場合、ハンドヘルド デバイス実装は:

  • [9.8.2/H-5-1] アプリがライブ カメラデータにアクセスしているときはカメラ インジケーターを表示しなければなりません。ただし、セクション 9.1 で CDD 識別子 [C-4-X] が割り当てられたロールを持つアプリからのみカメラにアクセスする場合は、この限りではありません。
  • [9.8.2/H-5-2] PermissionManager.getIndicatorAppOpUsageData() から返された、カメラを使用している最近使ったアプリとアクティブなアプリを、関連する属性メッセージとともに表示しなければなりません。
  • [9.8.2/H-5-3] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、カメラ インジケーターを非表示にしてはなりません。

15(AOSP 試験運用版)の新しい要件の開始

[9.10/H-1-1](2024 年 5 月 29 日プレビュー)

確認付きブートは、デバイス ソフトウェアの完全性を保証する機能です。この機能をサポートする場合、デバイス実装は:

  • [9.10/H-1-1] Android 起動シーケンス時にマウントされるすべての読み取り専用パーティションを確認し、VBMeta ダイジェストの計算にこれらの確認済みのパーティションをすべて含めなければなりません。

新しい要件の終了

[9.10/H-1-1](2024 年 2 月 26 日プレビュー)

確認付きブートは、デバイス ソフトウェアの完全性を保証する機能です。この機能をサポートする場合、デバイス実装は:

  • [9.10/H-1-1] Android 起動シーケンス時に読み込まれるすべての読み取り専用パーティションを確認しなければなりません。

新しい要件の終了

2.2.6. デベロッパー ツール、開発者向けオプションの互換性

ハンドヘルド デバイス実装は(* タブレットには適用されません):

  • [6.1/H-0-1]* シェルコマンド cmd testharness をサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[6.1] Perfetto(2024 年 5 月 29 日プレビュー)

ハンドヘルド デバイス実装は(* タブレットには適用されません):

  • Perfetto
    • [6.1/H-0-2]* cmdline で perfetto ドキュメントを遵守しているシェルユーザーに /system/bin/perfetto バイナリを公開しなければなりません。
    • [6.1/H-0-3]* perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf 構成を入力として受け入れなければなりません。
    • [6.1/H-0-4]* perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf トレースを出力として書き込まなければなりません。
    • [6.1/H-0-5]* 少なくとも perfetto ドキュメントで規定されたデータソースを、perfetto バイナリを通じて提供しなければなりません。
    • [6.1/H-0-6]* perfetto トレース対象デーモンは、デフォルトで有効でなければなりません(システム プロパティ persist.traced.enable)。

新しい要件の終了

2.2.7. ハンドヘルドのメディア パフォーマンス クラス

メディア パフォーマンス クラスの定義については、セクション 7.11 をご覧ください。

2.2.7.1. メディア

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.U を返す場合、ハンドヘルド デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

Android 15(AOSP 試験運用版)のメディア パフォーマンス クラスの更新(2024 年 2 月 5 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

  • [5.1/H-1-1] CodecCapabilities.getMaxSupportedInstances() メソッドと VideoCapabilities.getSupportedPerformancePoints() メソッドを介して、任意のコーデックの組み合わせで同時に実行できるハードウェア動画デコーダ セッションの最大数をアドバタイズしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-2(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-2] 任意のコーデックの組み合わせ(AVC、HEVC、VP9、AV1 以降)の 8 ビット(SDR)ハードウェア動画デコーダ セッションの 6 インスタンスの同時実行を、3 セッションは解像度 1080p、30 fps で、残り 3 セッションは解像度 4K、30 fps でサポートしなければなりません(AV1 を除く)。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。AV1 コーデックでは、解像度 1080p のサポートのみが必要ですが、解像度 1080p、30 fps で 6 インスタンスをサポートする必要があります。

新しい要件の終了

  • [5.1/H-1-3] CodecCapabilities.getMaxSupportedInstances() メソッドと VideoCapabilities.getSupportedPerformancePoints() メソッドを介して、任意のコーデックの組み合わせで同時に実行できるハードウェア動画エンコーダ セッションの最大数をアドバタイズしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-4(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-4] 任意のコーデックの組み合わせ(AVC、HEVC、VP9、AV1 以降)の 8 ビット(SDR)ハードウェア動画エンコーダ セッションの 6 インスタンスの同時実行を、4 セッションは解像度 1080p、30 fps で、残り 2 セッションは解像度 4K、30 fps でサポートしなければなりません(AV1 を除く)。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。AV1 コーデックでは、解像度 1080p のサポートのみが必要ですが、解像度 1080p、30 fps で 6 インスタンスをサポートする必要があります。

新しい要件の終了

  • [5.1/H-1-5] CodecCapabilities.getMaxSupportedInstances() メソッドと VideoCapabilities.getSupportedPerformancePoints() メソッドを介して、任意のコーデックの組み合わせで同時に実行できるハードウェア動画エンコーダ セッションとハードウェア動画デコーダ セッションの最大数をアドバタイズしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-6(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-6] 任意のコーデックの組み合わせ(AVC、HEVC、VP9、AV1 以降)の 8 ビット(SDR)ハードウェア動画デコーダ セッションとハードウェア動画エンコーダ セッションの 6 インスタンスの同時実行を、3 セッション(そのうちエンコーダ セッションは最大 2 つ)は解像度 4K、30 fps で(AV1 を除く)、残り 3 セッションは解像度 1080p でサポートしなければなりません。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。AV1 コーデックでは、解像度 1080p のサポートのみが必要ですが、解像度 1080p、30 fps で 6 インスタンスをサポートする必要があります。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-19(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-19] 任意のコーデックの組み合わせ(AVC、HEVC、VP9、AV1 以降)の 10 ビット(HDR)ハードウェア動画デコーダ セッションとハードウェア動画エンコーダ セッションの 3 インスタンスの同時実行を、解像度 4K、30 fps でサポートしなければなりません(AV1 を除く)。そのうちエンコーダ セッションは最大 1 つで、GL サーフェスから RGBA_1010102 入力形式で設定可能です。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。GL サーフェスからエンコードする場合、エンコーダによる HDR メタデータの生成は不要です。AV1 コーデック セッションでは、要件が解像度 4K であっても、解像度 1080p のサポートのみが必要です。

新しい要件の終了

  • [5.1/H-1-7] 負荷がかかった状態で、すべてのハードウェア動画エンコーダの 1080p 以下の動画エンコード セッションについて、コーデック初期化レイテンシが 40 ms 以下でなければなりません。ここでいう負荷とは、ハードウェア動画コーデックを使用した 1080p から 720p への映像のみのコード変換セッションと、1080p の音声映像記録の初期化を同時実行することを指します。ドルビー ビジョン コーデックでは、コーデック初期化レイテンシは 50 ms 以下でなければなりません。
  • [5.1/H-1-8] 負荷がかかった状態で、すべての音声エンコーダでのビットレート 128 kbps 以下の音声エンコード セッションについて、コーデック初期化レイテンシが 30 ms 以下でなければなりません。ここでいう負荷とは、ハードウェア動画コーデックを使用した 1080p から 720p への映像のみのコード変換セッションと、1080p の音声映像記録の初期化を同時実行することを指します。

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-9(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-9] 8 ビット(SDR)と 10 ビット HDR の両方のコンテンツについて、解像度 4K、30 fps で(AV1 を除く)同時に実行されるコーデックの組み合わせで、セキュアなハードウェア動画デコーダ セッション(AVC、HEVC、VP9、AV1 以降)の 2 つのインスタンスをサポートしなければなりません。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。AV1 コーデック セッションでは、要件が解像度 4K であっても、解像度 1080p のサポートのみが必要です。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

5.1/H-1-10(2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-10] 同時に実行される任意のコーデックの組み合わせで、セキュアでないハードウェア動画デコーダ セッションの 3 つのインスタンスと、セキュアなハードウェア動画デコーダ セッションの 1 つのインスタンス(合計 4 つのインスタンス。AVC、HEVC、VP9、AV1 以降)をサポートしなければなりません。3 つのセッション(1 つのセキュアなデコーダ セッションを含む)は解像度 4K、30 fps で(AV1 を除く)、1 つのセキュアでないセッションは解像度 1080p、30 fps です。最大 2 つのセッションを 10 ビット HDR にできます。すべてのセッションにおいて、1 秒間に 1 フレームを超えるドロップが発生してはなりません。AV1 コーデック セッションでは、要件が解像度 4K であっても、解像度 1080p のサポートのみが必要です。

新しい要件の終了

  • [5.1/ H-1-11] デバイス上のすべてのハードウェア AVC、HEVC、VP9、AV1 デコーダについて、セキュアなデコーダをサポートしなければなりません。
  • [5.1/H-1-12] 負荷がかかった状態で、すべてのハードウェア動画デコーダの 1080p 以下の動画デコード セッションについて、コーデック初期化レイテンシが 40 ms 以下でなければなりません。ここでいう負荷とは、ハードウェア動画コーデックを使用した 1080p から 720p への映像のみのコード変換セッションと、1080p の音声映像再生の初期化を同時実行することを指します。ドルビー ビジョン コーデックでは、コーデック初期化レイテンシは 50 ms 以下でなければなりません。
  • [5.1/H-1-13] 負荷がかかった状態で、すべての音声デコーダでのビットレート 128 kbps 以下の音声デコード セッションについて、コーデック初期化レイテンシが 30 ms 以下でなければなりません。ここでいう負荷とは、ハードウェア動画コーデックを使用した 1080p から 720p への映像のみのコード変換セッションと、1080p の音声映像再生の初期化を同時実行することを指します。

15(AOSP 試験運用版)の新しい要件の開始

[5.1/H-1-14](2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-14] GPU 合成によるフィルム グレイン効果を備えた AV1 ハードウェア デコーダのメイン 10、レベル 4.1 およびフィルム グレインをサポートしなければなりません。

新しい要件の終了

  • [5.1/H-1-15] 4K60 をサポートするハードウェア動画デコーダを少なくとも 1 つ備えなければなりません。
  • [5.1/H-1-16] 4K60 をサポートするハードウェア動画エンコーダを少なくとも 1 つ備えなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[5.1/H-1-21](2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-21] すべてのハードウェア動画デコーダ(AVC、HEVC、VP9、AV1 以降)において、FEATURE_DynamicColorAspect をサポートしなければなりません。注: これはアプリケーションがデコーディング セッション中において、動画コンテンツのカラー アスペクトを更新できることを意味します。10 ビットおよび 8 ビットのコンテンツをサポートするデコーダは、サーフェス モードにおいて 8 ビットと 10 ビット間の動的スイッチングをサポートしなければなりません。HDR 伝達関数をサポートするデコーダは、SDR コンテンツおよび HDR コンテンツ間の動的スイッチングをサポートしなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[5.1/H-1-22](2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-22] カメラがサポートする最大解像度もしくは 4K のいずれか小さい方の解像度で、回転メタデータに関係なく、縦向きのアスペクト比での動画コンテンツのエンコード、デコード、GPU 編集、表示をサポートしなければなりません。注: コーデックが HDR をサポートする場合は、HDR プロファイルも含まれます。AV1 コーデックでは、解像度 1080p のサポートのみが必要です。この要件は、ハードウェア コーデック、GPU、DPU のみに適用されます。

新しい要件の終了

  • [5.3/H-1-1] 負荷時の 4K、60 fps の動画セッションで、10 秒間に 1 フレームを超えるドロップが発生してはなりません(つまりフレーム ドロップ 0.167% 未満)。
  • [5.3/H-1-2] 4K セッションの負荷時の 60 fps の動画セッションで、動画解像度の変更中、10 秒間に 1 フレームを超えるドロップが発生してはなりません。
  • [5.6/H-1-1] CTS 検証ツールのタップツートーン テストを使用して、タップツートーン レイテンシを 80 ミリ秒以下にしなければなりません。
  • [5.6/H-1-2] 少なくとも 1 つのサポート対象データパスで、ラウンドトリップ オーディオ レイテンシを 80 ミリ秒以下にしなければなりません。
  • [5.6/H-1-3] 3.5 mm オーディオ ジャック(存在する場合)および USB オーディオ(サポートされる場合)のステレオ出力については、低レイテンシ構成およびストリーミング構成のデータパス全体を通じて 24 ビット以上をサポートしなければなりません。低レイテンシ構成の場合、アプリは AAudio を低レイテンシ コールバック モードで使用すべきです。ストリーミング構成の場合、アプリは Java AudioTrack を使用すべきです。低レイテンシ構成とストリーミング構成の両方で、HAL 出力シンクはターゲット出力形式として AUDIO_FORMAT_PCM_24_BITAUDIO_FORMAT_PCM_24_BIT_PACKEDAUDIO_FORMAT_PCM_32_BITAUDIO_FORMAT_PCM_FLOAT のいずれかを受け入れるべきです。

15(AOSP 試験運用版)の新しい要件の開始

[5.6/H-1-4](2024 年 2 月 5 日プレビュー)

  • [5.6/H-1-4] 4 チャンネル以上の USB オーディオ デバイスをサポートしなければなりません(曲をプレビューするために DJ コントローラで使用されます)

新しい要件の終了

  • [5.6/H-1-5] クラス準拠の MIDI デバイスをサポートし、MIDI 機能フラグを宣言しなければなりません。
  • [5.6/H-1-9] 少なくとも 12 チャンネルのミキシングをサポートしなければなりません。これは 7.1.4 チャンネル マスクを使用して AudioTrack を開き、すべてのチャンネルをステレオに適切に空間化またはダウンミックスできることを意味します。
  • [5.6/H-SR] 少なくとも 9.1.6 チャンネル マスクと 22.2 チャンネル マスクに対応している 24 チャンネル ミキシングをサポートすることが強く推奨されます。
  • [5.7/H-1-2] 次のコンテンツ復号機能で、MediaDrm.SECURITY_LEVEL_HW_SECURE_ALL をサポートしなければなりません。
最小サンプルサイズ 4 MiB
サブサンプルの最小数 - H264 または HEVC 32
サブサンプルの最小数 - VP9 9
サブサンプルの最小数 - AV1 288
サブサンプルの最小バッファサイズ 1 MiB
汎用暗号の最小バッファサイズ 500 KiB
同時実行セッションの最小数 30
セッションあたりの鍵の最小数 20
鍵の最小合計数(すべてのセッション) 80
DRM 鍵の最小合計数(すべてのセッション) 6
メッセージ サイズ 16 KiB
復号されたフレーム/秒 60 fps
  • [5.1/H-1-17] AVIF ベースライン プロファイルをサポートする少なくとも 1 つのハードウェア画像デコーダがなければなりません。
  • [5.1/H-1-18] 30 fps と 1 Mbps で最大 480p の解像度をエンコードできる AV1 エンコーダをサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[5.1/H-1-20](2024 年 2 月 5 日プレビュー)

  • [5.1/H-1-20] 4K 解像度もしくはカメラがサポートする最大解像度のいずれか小さい方の解像度で、デバイス上にあるすべてのハードウェア AV1 エンコーダと HEVC エンコーダで Feature_HdrEditing 機能をサポートしなければなりません。

新しい要件の終了

  • [5.12/H-SR] デバイス上にあるすべてのハードウェア AV1 および HEVC エンコーダの Feature_HdrEditing 機能をサポートすることを強く推奨します。
  • [5.12/H-1-2] デバイス上にあるすべてのハードウェア AV1 エンコーダと HEVC エンコーダで RGBA_1010102 カラー形式をサポートしなければなりません。
  • [5.12/H-1-3] 8 ビットと 10 ビットの両方で YUV テクスチャからサンプリングするために、EXT_YUV_target 拡張機能のサポートをアドバタイズしなければなりません。
  • [7.1.4/H-1-1] ディスプレイ処理ユニット(DPU)に少なくとも 6 つのハードウェア オーバーレイがなければならず、そのうち 2 つ以上で 10 ビットの動画コンテンツを表示できなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

Android 15(AOSP 試験運用版)のメディア パフォーマンス クラスの更新(2024 年 2 月 5 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返し、ハードウェア AVC または HEVC エンコーダのサポートが含まれる場合、ハンドヘルド デバイス実装は:

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[5.2/H-2-2] [撤回](2024 年 4 月 8 日プレビュー)

  • [5.2/H-2-2]
    この要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

[5.2/H-2-2](2024 年 2 月 5 日プレビュー)

  • [5.2/H-2-2] dav1d ソフトウェア AV1 デコーダを使用し、サンプル動画を 1080p、60 fps 以上でレンダリングしなければなりません。

新しい要件の終了

2.2.7.2. カメラ

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.U を返す場合、ハンドヘルド デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

Android 15(AOSP 試験運用版)のメディア パフォーマンス クラスの更新(2024 年 2 月 5 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[7.5/H-1-1](2024 年 2 月 26 日プレビュー)

  • [7.5/H-1-1] 4K では 30 fps、1080p では 60 fps、720p では 60 fps での動画キャプチャをサポートする、解像度 12 メガピクセル以上のプライマリ背面カメラがなければなりません。プライマリ背面カメラとは、カメラ ID が最も低い背面カメラのことです。

新しい要件の終了

[7.5/H-1-1](2024 年 2 月 5 日プレビュー)

  • [7.5/H-1-1] 4K では 30 fps、1080p では 60 fps、720p では 60 fps での動画キャプチャをサポートする、解像度 12 メガピクセル以上のプライマリ背面カメラがなければなりません。これらのキャプチャ レートにおけるフレーム ドロップ率は X% を超えてはなりません(X は 2024 年第 1 四半期まで未定です)。プライマリ背面カメラとは、カメラ ID が最も低い背面カメラのことです。

新しい要件の終了

  • [7.5/H-1-2] 解像度 6 メガピクセル以上のプライマリ前面カメラがなければならず、1080p、30 fps での動画キャプチャをサポートしなければなりません。プライマリ前面カメラとは、カメラ ID が最も低い前面カメラのことです。
  • [7.5/H-1-3] プライマリ背面カメラについては FULL 以上の android.info.supportedHardwareLevel プロパティをサポートし、プライマリ前面カメラについては LIMITED 以上の同プロパティをサポートしなければなりません。
  • [7.5/H-1-4] 両方のプライマリ カメラについて、CameraMetadata.SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME をサポートしなければなりません。
  • [7.5/H-1-5] 両方のプライマリ カメラについて、ITS 照明条件(3000K)で CTS カメラの PerformanceTest によって測定したとき、解像度 1080p の camera2 JPEG キャプチャ レイテンシが 1,000 ms 未満でなければなりません。
  • [7.5/H-1-6] 両方のプライマリ カメラについて、ITS 照明条件(3000K)で CTS カメラの PerformanceTest によって測定したとき、camera2 起動レイテンシ(カメラを開いてから最初のプレビュー フレームまで)が 500 ms 未満でなければなりません。
  • [7.5/H-1-8] プライマリ背面カメラについて、CameraMetadata.REQUEST_AVAILABLE_CAPABILITIES_RAWandroid.graphics.ImageFormat.RAW_SENSOR をサポートしなければなりません。
  • [7.5/H-1-9] 720p または 1080p、240 fps をサポートするプライマリ背面カメラがなければなりません。
  • [7.5/H-1-10] 同じ方向を向いたウルトラワイド RGB カメラが 1 つある場合、プライマリ カメラの最小 ZOOM_RATIO は 1.0 未満でなければなりません。
  • [7.5/H-1-11] プライマリ カメラに前面および背面での同時ストリーミングを実装しなければなりません。
  • [7.5/H-1-12] プライマリ前面カメラとプライマリ背面カメラの両方で CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION をサポートしなければなりません。
  • [7.5/H-1-13] 背面 RGB カメラが複数ある場合、プライマリ背面カメラで LOGICAL_MULTI_CAMERA 機能をサポートしなければなりません。
  • [7.5/H-1-14] プライマリ前面カメラとプライマリ背面カメラの両方で STREAM_USE_CASE 機能をサポートしなければなりません。
  • [7.5/H-1-15] プライマリ カメラについて、CameraX 拡張機能と Camera2 拡張機能の両方を介して、夜間モード拡張機能をサポートしなければなりません。
  • [7.5/H-1-16] プライマリ カメラについて DYNAMIC_RANGE_TEN_BIT 機能をサポートしなければなりません。
  • [7.5/H-1-17] プライマリ カメラについて CONTROL_SCENE_MODE_FACE_PRIORITY 機能と顔検出機能(STATISTICS_FACE_DETECT_MODE_SIMPLE または STATISTICS_FACE_DETECT_MODE_FULL)をサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[7.5/H-1-18](2024 年 2 月 5 日プレビュー)

  • [7.5/H-1-18] プライマリ背面カメラとプライマリ前面カメラで JPEG_R をサポートしなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[7.5/H-1-19](2024 年 4 月 8 日プレビュー)

  • [7.5/H-1-19] プライマリ背面カメラについて、最大サイズ 16:9 アスペクト比 JPEG の 1080p HLG10 プレビューと、最大サイズ 16:9 アスペクト比 JPEG のストリームの組み合わせの 720p HLG10 プレビューで、CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION をサポートしなければなりません。

新しい要件の終了

[7.5/H-1-19](2024 年 2 月 26 日プレビュー)

  • [7.5/H-1-19] プライマリ背面カメラについて、最大サイズ JPEG の 1080p HLG10 プレビューと、最大サイズ JPEG のストリームの組み合わせの 720p HLG10 プレビューで、CONTROL_VIDEO_STABILIZATION_MODE_PREVIEW_STABILIZATION をサポートしなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[7.5/H-1-20](2024 年 4 月 8 日プレビュー)

  • [7.5/H-1-20] ネイティブ カメラアプリでは、プライマリ背面カメラとプライマリ前面カメラについて JPEG_R をデフォルトで出力しなければなりません。

新しい要件の終了

2.2.7.3. ハードウェア

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.U を返す場合、ハンドヘルド デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

Android 15(AOSP 試験運用版)のメディア パフォーマンス クラスの更新(2024 年 2 月 5 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

  • [7.1.1.1/H-2-1] 画面解像度が少なくとも 1080p でなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[7.1.1.3/H-2-1](2024 年 2 月 5 日プレビュー)

  • [7.1.1.3/H-2-1] デバイスの画面幅が 600 dp 未満の場合は、画面密度が少なくとも 400 dpi でなければなりません。

新しい要件の終了

  • [7.1.1.3/H-3-1] 少なくとも平均 1,000 ニトをサポートする HDR ディスプレイがなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[7.6.1/H-2-1](2024 年 4 月 8 日プレビュー)

  • [7.6.1/H-2-1] 物理メモリが 8 GB 以上でなければなりません。そのうち、android.app.ActivityManager.MemoryInfo.totalMem からレポートされるカーネルが使用できる物理メモリは 6.64 GB 以上なければなりません。

新しい要件の終了

2.2.7.4. パフォーマンス

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.U を返す場合、ハンドヘルド デバイス実装は:

  • Android 14 CDD セクション 2.2.7.4 に記載されているパフォーマンス要件を遵守しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

Android 15(AOSP 試験運用版)のメディア パフォーマンス クラスの更新(2024 年 2 月 5 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

  • [8.2/H-1-1] 少なくとも 150 MB/s のシーケンシャル書き込みパフォーマンスを実現しなければなりません。
  • [8.2/H-1-2] 少なくとも 10 MB/s のランダム書き込みパフォーマンスを実現しなければなりません。
  • [8.2/H-1-3] 少なくとも 250 MB/s のシーケンシャル読み取りパフォーマンスを実現しなければなりません。
  • [8.2/H-1-4] 少なくとも 100 MB/s のランダム読み取りパフォーマンスを実現しなければなりません。
  • [8.2/H-1-5] 少なくとも 50 MB/s の並列シーケンシャル読み取り / 書き込みパフォーマンス(2 つの読み取りと 1 つの書き込み)を実現しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

2.2.7.5. グラフィック

[2.2.7.5 グラフィック](2024 年 4 月 8 日プレビュー)

android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

[2.2.7.5 グラフィック](2024 年 2 月 5 日プレビュー)
android.os.Build.VERSION_CODES.MEDIA_PERFORMANCE_CLASS について android.os.Build.VERSION_CODES.V を返す場合、ハンドヘルド デバイス実装は:

新しい要件の終了

2.3. テレビの要件

Android テレビデバイスとは、約 10 フィート離れた場所にいるユーザーがデジタル メディア、映画、ゲーム、アプリ、ライブテレビを楽しむためのエンターテイメント インターフェースである Android デバイス実装を指します(「鑑賞モード」または「10 フィート ユーザー インターフェース」)。

次の基準をすべて満たす場合、Android デバイス実装はテレビに分類されます。

  • ユーザーから 10 フィート離れたディスプレイに表示されるユーザー インターフェースをリモコンで操作するためのメカニズムを提供する。
  • 対角長が 24 インチを超える埋め込みスクリーン ディスプレイがある、または、VGA、HDMI、DisplayPort、ディスプレイ用ワイヤレス ポートなどの動画出力ポートがある。

このセクションでこれ以降記載する追加要件は、Android テレビデバイス実装に固有のものです。

2.3.1. ハードウェア

テレビデバイス実装は:

  • [7.2.2/T-0-1] D-pad をサポートしなければなりません。
  • [7.2.3/T-0-1] ホーム機能と戻る機能を提供しなければなりません。
  • [7.2.3/T-0-2] 戻る機能(KEYCODE_BACK)の通常イベントと長押しイベントの両方を、フォアグラウンド アプリに送信しなければなりません。
  • [7.2.6.1/T-0-1] ゲーム コントローラのサポートを含まなければならず、android.hardware.gamepad 機能フラグを宣言しなければなりません。
  • [7.2.7/T] ユーザーがタップ以外のナビゲーション主要なナビゲーション キー入力にアクセスできるリモコンを提供すべきです。

3 軸ジャイロスコープが含まれる場合、テレビデバイス実装は:

  • [7.3.4/T-1-1] 少なくとも周波数 100 Hz までのイベントをレポートできなければなりません。
  • [7.3.4/T-1-2] 1,000 度/秒までの方向変化を測定できなければなりません。

テレビデバイス実装は:

  • [7.4.3/T-0-1] Bluetooth と Bluetooth LE をサポートしなければなりません。
  • [7.6.1/T-0-1] アプリの個人データ(「/data」パーティション)に利用できる不揮発性ストレージが少なくとも 4 GB でなければなりません。

ホストモードをサポートする USB ポートが含まれる場合、テレビデバイス実装は:

  • [7.5.3/T-1-1] この USB ポートを通じて接続する(ただし常に接続されているとは限らない)外部カメラのサポートを含まなければなりません。

テレビデバイス実装が 32 ビットの場合:

  • [7.6.1/T-1-1] 次のいずれかの密度を使用する場合、カーネルとユーザー空間に利用できるメモリが少なくとも 896 MB でなければなりません。

    • 小 / 標準画面で 400 dpi 以上
    • 大画面で xhdpi 以上
    • 特大画面で tvdpi 以上

テレビデバイス実装が 64 ビットの場合:

  • [7.6.1/T-2-1] 次のいずれかの密度を使用する場合、カーネルとユーザー空間に利用できるメモリが少なくとも 1,280 MB でなければなりません。

    • 小 / 標準画面で 400 dpi 以上
    • 大画面で xhdpi 以上
    • 特大画面で tvdpi 以上

なお、上記の「カーネルとユーザー空間に利用できるメモリ」とは、デバイス実装でカーネルの制御下にない、無線や動画などのハードウェア コンポーネント専用のメモリに加えて提供されるメモリ空間を指します。

テレビデバイス実装は:

  • [7.8.1/T] マイクを含むべきです。
  • [7.8.2/T-0-1] オーディオ出力がなければならず、android.hardware.audio.output を宣言しなければなりません。

2.3.2. マルチメディア

テレビデバイス実装は、次の形式のオーディオ エンコードとデコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.1/T-0-1] MPEG-4 AAC プロファイル(AAC LC)
  • [5.1/T-0-2] MPEG-4 HE AAC プロファイル(AAC+)
  • [5.1/T-0-3] AAC ELD(Enhanced Low Delay AAC)

テレビデバイス実装は、次の形式の動画エンコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.2/T-0-1] H.264
  • [5.2/T-0-2] VP8
  • [5.2/T-0-3] AV1

テレビデバイス実装は:

  • [5.2.2/T-SR-1] 30 フレーム/秒で解像度 720p と 1080p の動画の H.264 エンコードをサポートすることが強く推奨されます。

テレビデバイス実装は、次の形式の動画デコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

テレビデバイス実装は、セクション 5.3.1 で記載のとおり、次に示すもの以下の標準的な動画フレームレートと解像度で MPEG-2 デコードをサポートしなければなりません。

  • [5.3.1/T-1-1] メイン プロファイル ハイレベルで 29.97 フレーム/秒の HD 1080p。
  • [5.3.1/T-1-2] メイン プロファイル ハイレベルで 59.94 フレーム/秒の HD 1080i。インターレース MPEG-2 動画をインターレース解除し、サードパーティ アプリで利用できるようにしなければなりません。

テレビデバイス実装は、セクション 5.3.4 で詳述するように、次に示すもの以下の標準的な動画フレームレートと解像度で H.264 デコードをサポートしなければなりません。

  • [5.3.4/T-1-1] ベースライン プロファイルで 60 フレーム/秒の HD 1080p
  • [5.3.4/T-1-2] メイン プロファイルで 60 フレーム/秒の HD 1080p
  • [5.3.4/T-1-3] ハイ プロファイル レベル 4.2 で 60 フレーム/秒の HD 1080p

H.265 ハードウェア デコーダを備えたテレビデバイス実装は、セクション 5.3.5 で詳述するように、次に示すもの以下の標準的な動画フレームレートと解像度で H.265 デコードをサポートしなければなりません。

  • [5.3.5/T-1-1] メイン プロファイル レベル 4.1 で 60 フレーム/秒の HD 1080p

H.265 デコードと UHD デコード プロファイルをサポートする場合、H.265 ハードウェア デコーダを備えたテレビデバイス実装は:

  • [5.3.5/T-2-1] メイン 10 レベル 5 メイン ティア プロファイルで 60 フレーム/秒の UHD デコード プロファイルをサポートしなければなりません。

テレビデバイス実装は、セクション 5.3.6 で詳述するように、次に示すもの以下の標準的な動画フレームレートと解像度で VP8 デコードをサポートしなければなりません。

  • [5.3.6/T-1-1] 60 フレーム/秒のデコード プロファイルの HD 1080p

VP9 ハードウェア デコーダを備えたテレビデバイス実装は、セクション 5.3.7 で詳述するように、次に示すもの以下の標準的な動画フレームレートと解像度で VP9 デコードをサポートしなければなりません。

  • [5.3.7/T-1-1] プロファイル 0(8 ビット色深度)で 60 フレーム/秒の HD 1080p

VP9 デコードと UHD デコード プロファイルをサポートする場合、VP9 ハードウェア デコーダを備えたテレビデバイス実装は:

  • [5.3.7/T-2-1] プロファイル 0(8 ビット色深度)で 60 フレーム/秒の UHD デコード プロファイルをサポートしなければなりません。
  • [5.3.7/T-SR1] プロファイル 2(10 ビット色深度)で 60 フレーム/秒の UHD デコード プロファイルをサポートすることが強く推奨されます。

テレビデバイス実装は:

  • [5.5/T-0-1] 圧縮オーディオ パススルー出力(デバイスでオーディオ デコードが行われない)を除き、サポート対象の出力で、システムのマスター ボリュームとデジタル オーディオ出力ボリュームの減衰のサポートを含まなければなりません。

内蔵ディスプレイはないが、HDMI 経由で接続される外部ディスプレイをサポートする場合、テレビデバイス実装は:

  • [5.8/T-0-1] デバイスが販売されている地域のリフレッシュ レートに応じて、外部ディスプレイが 50 Hz または 60 Hz のリフレッシュ レートで動作する、選択したピクセル フォーマットの最高解像度に HDMI 出力モードを設定しなければなりません。
  • [5.8/T-SR-1] ユーザーが構成可能な HDMI リフレッシュ レートセレクタを提供することが強く推奨されます。
  • [5.8] デバイスが販売されている地域の動画リフレッシュ レートに応じて、HDMI 出力モードのリフレッシュ レートを 50 Hz または 60 Hz に設定すべきです。

内蔵ディスプレイはないが、HDMI 経由で接続される外部ディスプレイをサポートする場合、テレビデバイス実装は:

  • [5.8/T-1-1] HDCP 2.2 をサポートしなければなりません。

UHD デコードはサポートしないが、HDMI 経由で接続される外部ディスプレイをサポートする場合、テレビデバイス実装は:

  • [5.8/T-2-1] HDCP 1.4 をサポートしなければなりません。

2.3.3. ソフトウェア

テレビデバイス実装は:

  • [3/T-0-1] 機能 android.software.leanbackandroid.hardware.type.television を宣言しなければなりません。
  • [3.2.3.1/T-0-1] こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードしなければなりません。
  • [3.4.1/T-0-1] android.webkit.Webview API の完全な実装を提供しなければなりません。

ロック画面をサポートする場合、Android テレビデバイス実装は:

  • [3.8.10/T-1-1] メディア通知テンプレートを含め、ロック画面通知を表示しなければなりません。

テレビデバイス実装は:

  • [3.8.14/T-SR-1] ピクチャー イン ピクチャー(PIP)モードのマルチウィンドウをサポートすることが強く推奨されます。
  • [3.10/T-0-1] サードパーティのユーザー補助サービスをサポートしなければなりません。
  • [3.10/T-SR-1] talkback オープンソース プロジェクトで提供されているスイッチ アクセスと TalkBack(プリインストールのテキスト読み上げエンジンでサポートされている言語)のユーザー補助サービスと同等かそれ以上の機能を持つユーザー補助サービスをデバイスにプリロードすることが強く推奨されます。

機能 android.hardware.audio.output をレポートする場合、テレビデバイス実装は:

  • [3.11/T-SR-1] デバイスで利用可能な言語をサポートする TTS エンジンを含むことが強く推奨されます。
  • [3.11/T-1-1] サードパーティ TTS エンジンのインストールをサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[3.12/T-0-1](2024 年 2 月 26 日プレビュー)

テレビデバイス実装は:

  • [3.12/T-0-1] テレビ入力フレームワークをサポートしなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[3/T-0-2, 3/T-0-3. 3/T-1-1](2024 年 2 月 26 日プレビュー)

Android テレビ入力フレームワーク(TIF)により、Android テレビデバイスへのライブ コンテンツの配信が簡単になります。TIF は、Android テレビデバイスをコントロールする入力モジュールを作成するための標準 API を提供します。

テレビデバイス実装は:

  • [3/T-0-2] プラットフォーム機能 android.software.live_tv を宣言しなければなりません。
  • [3/T-0-3] TIF API とサードパーティの TIF ベースの入力サービスを使用するアプリをデバイスにインストールして使用できるように、すべての TIF API をサポートしなければなりません。

Android テレビ チューナー フレームワーク(TF)[2024 年第 3 四半期までリンク未定です] は、チューナーからのライブ コンテンツの処理と Android テレビデバイスの IP からのコンテンツのストリーミングを統合します。チューナー フレームワークは、Android テレビ チューナーを使用する入力サービスを作成するための標準 API を提供します。

チューナーをサポートする場合、デバイス実装は:

  • [3/T-1-1] チューナー フレームワーク API を使用するアプリケーションをデバイスにインストールし使用できるように、すべてのチューナー フレームワーク API をサポートしなければなりません。

新しい要件の終了

2.3.4. パフォーマンスと電力

  • [8.1/T-0-1] 一貫したフレーム レイテンシ。一貫性のないフレーム レイテンシ、またはフレームのレンダリングの遅延は、1 秒間に 5 フレームを超えて発生してはならず、1 秒間に 1 フレーム未満であるべきです。
  • [8.2/T-0-1] 少なくとも 5 MB/s のシーケンシャル書き込みパフォーマンスを実現しなければなりません。
  • [8.2/T-0-2] 少なくとも 0.5 MB/s のランダム書き込みパフォーマンスを実現しなければなりません。
  • [8.2/T-0-3] 少なくとも 15 MB/s のシーケンシャル読み取りパフォーマンスを実現しなければなりません。
  • [8.2/T-0-4] 少なくとも 3.5 MB/s のランダム読み取りパフォーマンスを実現しなければなりません。

AOSP に含まれるデバイス電源管理を改善する機能を含むか、AOSP に含まれる機能を拡張する場合、テレビデバイス実装は:

  • [8.3/T-1-1] バッテリー セーバー機能を有効または無効にするユーザー アフォーダンスを提供しなければなりません。

バッテリーがない場合、テレビデバイス実装は:

バッテリーがある場合、テレビデバイス実装は:

  • [8.3/T-1-3] アプリ スタンバイと Doze 省電力モードから除外されたすべてのアプリを表示するユーザー アフォーダンスを提供しなければなりません。

テレビデバイス実装は:

  • [8.4/T-0-1] Android オープンソース プロジェクトのサイトに記載されているとおり、ハードウェア コンポーネントごとのバッテリー消費値と、時間の経過に伴ってコンポーネントによって発生するおおよそのバッテリー消耗量を定義する、コンポーネントごとの電力プロファイルを提供しなければなりません。
  • [8.4/T-0-2] すべての消費電力値をミリアンペア時(mAh)単位でレポートしなければなりません。
  • [8.4/T-0-3] プロセスの UID ごとの CPU 消費電力をレポートしなければなりません。Android オープンソース プロジェクトは、uid_cputime カーネル モジュール実装を通じて要件を満たしています。
  • [8.4/T] ハードウェア コンポーネントの電力使用量をアプリに帰属させられない場合、ハードウェア コンポーネント自体に帰属されるべきです。
  • [8.4/T-0-4] この電力使用量を、adb shell dumpsys batterystats シェルコマンドを介してアプリ デベロッパーが利用できるようにしなければなりません。

2.3.5. セキュリティ モデル

テレビデバイス実装は:

  • [9/T-0-1] android.hardware.security.model.compatible 機能を宣言しなければなりません。
  • [9.11/T-0-1] 隔離された実行環境でキーストア実装をバックアップしなければなりません。
  • [9.11/T-0-2] カーネル以上で動作するコードから安全に隔離されたエリアで、Android Keystore システムのサポート対象アルゴリズムを適切にサポートするために、RSA、AES、ECDSA、HMAC 暗号アルゴリズムと、MD5、SHA1、SHA-2 ファミリー ハッシュ関数の実装を持たなければなりません。安全な隔離では、DMA を含め、隔離された環境の内部状態にカーネルまたはユーザー空間のコードがアクセスする可能性のあるすべてのメカニズムをブロックしなければなりません。アップストリームの Android オープンソース プロジェクト(AOSP)は、Trusty 実装を使用することでこの要件を満たしています。ただし、別の ARM TrustZone ベースのソリューション、または、サードパーティのレビューによる適切なハイパーバイザベースの隔離オプションをセキュアに実装する方法を選択することもできます。
  • [9.11/T-0-3] 隔離された実行環境でロック画面認証を行わなければならず、成功した場合にのみ、認証にバインドされた鍵の使用を許可しなければなりません。ロック画面の認証情報は、隔離された実行環境のみがロック画面認証を行えるように保存しなければなりません。アップストリームの Android オープンソース プロジェクトは、ゲートキーパー Hardware Abstraction Layer(HAL)と Trusty を提供しており、これを使用してこの要件を満たすことができます。

15(AOSP 試験運用版)の新しい要件の開始

[9.11/T-0-4](2024 年 5 月 29 日プレビュー)

  • [9.11/T-0-4] 証明書署名鍵がセキュア ハードウェアによって保護され、署名がセキュア ハードウェアで行われるキー構成証明をサポートしなければなりません。証明書署名鍵は十分な数のデバイス間で共有し、鍵が恒久的なデバイス ID として使用されることを防止しなければなりません。この要件を満たす方法としては、特定の SKU が少なくとも 100,000 ユニット生成されない限り、同じ証明書鍵を共有することが挙げられます。生成される SKU が 100,000 ユニットを超える場合は、100,000 ユニットごとに異なるキーを使用しても構いません。

新しい要件の終了

なお、デバイス実装が以前のバージョンの Android ですでにリリースされている場合、そのようなデバイスは、隔離された実行環境で動作するキーストアが必要な android.hardware.fingerprint 機能を宣言する場合を除き、隔離された実行環境で動作するキーストアを持ち、キー構成証明をサポートする必要があるという要件を免除されます。

セキュアロック画面をサポートする場合、テレビデバイス実装は:

  • [9.11/T-1-1] ロック解除状態からロック状態への遷移のためのスリープ タイムアウトを、最小許容タイムアウト 15 秒以下でユーザーが選択できるようにしなければなりません。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言しない場合、テレビデバイス実装は:

  • [9.5/T-2-1] 制限付きプロファイル(追加のユーザーと、そのユーザーがデバイス上でできることを、デバイス所有者が管理できるようにする機能)をサポートしなければなりません。制限付きプロファイルにより、デバイス所有者は、追加のユーザーが使用する個別の環境をすばやく設定でき、その環境で利用できるアプリの制限をきめ細かく管理できます。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言する場合、テレビデバイス実装は:

  • [9.5/T-3-1] 制限付きプロファイルをサポートしてはなりませんが、他のユーザーによる音声通話と SMS へのアクセスを可能 / 不可能にするコントロールの AOSP 実装に合わせなければなりません。

android.hardware.microphone を宣言する場合、テレビデバイス実装は:

  • [9.8.2/T-4-1] アプリがマイクからオーディオ データにアクセスしているときはマイク インジケーターを表示しなければなりません。ただし、HotwordDetectionService、SOURCE_HOTWORD、ContentCaptureService、またはセクション 9.1 で CDD 識別子 C-3-X が割り当てられたロールを持つアプリからのみマイクにアクセスする場合は、この限りではありません]。
  • [9.8.2/T-4-2] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、マイク インジケーターを非表示にしてはなりません。

android.hardware.camera.any を宣言する場合、テレビデバイス実装は:

  • [9.8.2/T-5-1] アプリがライブ カメラデータにアクセスしているときはカメラ インジケーターを表示しなければなりません。ただし、セクション 9.1 で CDD 識別子 [C-3-X] が割り当てられたロールを持つアプリからのみカメラにアクセスする場合は、この限りではありません。
  • [9.8.2/T-5-2] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、カメラ インジケーターを非表示にしてはなりません。

2.3.6. デベロッパー ツール、開発者向けオプションの互換性

15(AOSP 試験運用版)の新しい要件の開始

[6.1] Perfetto(2024 年 5 月 29 日プレビュー)

テレビデバイス実装は:

  • Perfetto
    • [6.1/T-0-1] cmdline で perfetto ドキュメントを遵守しているシェルユーザーに /system/bin/perfetto バイナリを公開しなければなりません。
    • [6.1/T-0-2] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf 構成を入力として受け入れなければなりません。
    • [6.1/T-0-3] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf トレースを出力として書き込まなければなりません。
    • [6.1/T-0-4] 少なくとも perfetto ドキュメントで規定されたデータソースを、perfetto バイナリを通じて提供しなければなりません。
    • [6.1/T-0-5] perfetto トレース対象デーモンは、デフォルトで有効でなければなりません(システム プロパティ persist.traced.enable)。

新しい要件の終了

2.4. スマートウォッチの要件

Android スマートウォッチ デバイスとは、身体(通常は手首)に装着することを目的とした Android デバイス実装を指します。

次の基準をすべて満たす場合、Android デバイス実装はスマートウォッチに分類されます。

  • 画面の対角長が物理的に 1.1 から 2.5 インチ。
  • 身体に装着するメカニズムを提供する。

このセクションでこれ以降記載する追加要件は、Android スマートウォッチ デバイス実装に固有のものです。

2.4.1. ハードウェア

スマートウォッチ デバイス実装は:

  • [7.1.1.1/W-0-1] 画面の対角サイズが物理的に 1.1 から 2.5 インチでなければなりません。

  • [7.2.3/W-0-1] ユーザーが利用できるホーム機能と、戻る機能(UI_MODE_TYPE_WATCH のときを除く)を備えなければなりません。

  • [7.2.4/W-0-1] タッチスクリーン入力をサポートしなければなりません。

  • [7.3.1/W-SR-1] 3 軸加速度計を含むことが強く推奨されます。

Vulkan のサポートが含まれる場合、スマートウォッチ デバイス実装は:

GPS / GNSS レシーバーが含まれ、android.hardware.location.gps 機能フラグを通じてアプリに機能をレポートする場合、スマートウォッチ デバイス実装は:

  • [7.3.3/W-1-1] GPS / GNSS から計算した位置情報がまだレポートされていない場合であっても、GNSS 測定値が判明したらすぐにレポートしなければなりません。
  • [7.3.3/W-1-2] 全天条件下で、位置を特定した後に、静止しているか加速度 0.2 m/s2 未満で移動している間、位置 20 m 以内、速度 0.2 m/s 以内、時間 95% 以上を計算するのに十分な、GNSS の擬似距離と擬似距離レートをレポートしなければなりません。

3 軸ジャイロスコープが含まれる場合、スマートウォッチ デバイス実装は:

  • [7.3.4/W-2-1] 1,000 度/秒までの方向変化を測定できなければなりません。

スマートウォッチ デバイス実装は:

  • [7.4.3/W-0-1] Bluetooth をサポートしなければなりません。

  • [7.6.1/W-0-1] アプリの個人データ(「/data」パーティション)に利用できる不揮発性ストレージが少なくとも 1 GB でなければなりません。

  • [7.6.1/W-0-2] カーネルとユーザー空間に利用できるメモリが少なくとも 416 MB でなければなりません。

  • [7.8.1/W-0-1] マイクを含まなければなりません。

  • [7.8.2/W] オーディオ出力があっても構いません。

2.4.2. マルチメディア

追加の要件はありません。

2.4.3. ソフトウェア

スマートウォッチ デバイス実装は:

  • [3/W-0-1] 機能 android.hardware.type.watch を宣言しなければなりません。
  • [3/W-0-2] uiMode = UI_MODE_TYPE_WATCH をサポートしなければなりません。
  • [3.2.3.1/W-0-1] こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードしなければなりません。

スマートウォッチ デバイス実装は:

  • [3.8.4/W-SR-1] アシスト アクションを処理するために、デバイスにアシスタントを実装することが強く推奨されます。

android.hardware.audio.output 機能フラグを宣言するスマートウォッチ デバイス実装は:

  • [3.10/W-1-1] サードパーティのユーザー補助サービスをサポートしなければなりません。
  • [3.10/W-SR-1] talkback オープンソース プロジェクトで提供されているスイッチ アクセスと TalkBack(プリインストールのテキスト読み上げエンジンでサポートされている言語)のユーザー補助サービスと同等かそれ以上の機能を持つユーザー補助サービスをデバイスにプリロードすることが強く推奨されます。

機能 android.hardware.audio.output をレポートする場合、スマートウォッチ デバイス実装は:

  • [3.11/W-SR-1] デバイスで利用可能な言語をサポートする TTS エンジンを含むことが強く推奨されます。

  • [3.11/W-0-1] サードパーティ TTS エンジンのインストールをサポートしなければなりません。

2.4.4. パフォーマンスと電力

AOSP に含まれるデバイス電源管理を改善する機能を含むか、AOSP に含まれる機能を拡張する場合、スマートウォッチ デバイス実装は:

  • [8.3/W-SR-1] アプリ スタンバイと Doze 省電力モードから除外されたすべてのアプリを表示するユーザー アフォーダンスを提供することが強く推奨されます。
  • [8.3/W-SR-2] バッテリー セーバー機能を有効または無効にするユーザー アフォーダンスを提供することが強く推奨されます。

スマートウォッチ デバイス実装は:

  • [8.4/W-0-1] Android オープンソース プロジェクトのサイトに記載されているとおり、ハードウェア コンポーネントごとの電流消費値と、時間の経過に伴ってコンポーネントによって発生するおおよそのバッテリー消耗量を定義する、コンポーネントごとの電力プロファイルを提供しなければなりません。
  • [8.4/W-0-2] すべての消費電力値をミリアンペア時(mAh)単位でレポートしなければなりません。
  • [8.4/W-0-3] プロセスの UID ごとの CPU 消費電力をレポートしなければなりません。Android オープンソース プロジェクトは、uid_cputime カーネル モジュール実装を通じて要件を満たしています。
  • [8.4/W-0-4] この電力使用量を、adb shell dumpsys batterystats シェルコマンドを介してアプリ デベロッパーが利用できるようにしなければなりません。
  • [8.4/W] ハードウェア コンポーネントの電力使用量をアプリに帰属させられない場合、ハードウェア コンポーネント自体に帰属されるべきです。

2.4.5. セキュリティ モデル

スマートウォッチ デバイス実装は:

  • [9/W-0-1] android.hardware.security.model.compatible 機能を宣言しなければなりません。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言しない場合、スマートウォッチ デバイス実装は:

  • [9.5/W-1-1] 制限付きプロファイル(追加のユーザーと、そのユーザーがデバイス上でできることを、デバイス所有者が管理できるようにする機能)をサポートしなければなりません。制限付きプロファイルにより、デバイス所有者は、追加のユーザーが使用する個別の環境をすばやく設定でき、その環境で利用できるアプリの制限をきめ細かく管理できます。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言する場合、スマートウォッチ デバイス実装は:

  • [9.5/W-2-1] 制限付きプロファイルをサポートしてはなりませんが、他のユーザーによる音声通話と SMS へのアクセスを可能 / 不可能にするコントロールの AOSP 実装に合わせなければなりません。

セキュアロック画面があり、TrustAgentService システム API を実装する信頼エージェントが 1 つ以上含まれる場合、デバイス実装は:

  • [9.11.1/W-1-1] 少なくとも 72 時間以内ごとに 1 回、推奨される第 1 の認証方法(PIN、パターン、パスワードなど)のいずれかをユーザーに求めなければなりません。

2.5. 自動車の要件

Android Automotive 実装とは、システムやインフォテインメント システムの一部または全部でオペレーティング システムとして Android を搭載した車両ヘッドユニットを指します。

機能 android.hardware.type.automotive を宣言するか次の基準をすべて満たす場合、Android デバイス実装は自動車に分類されます。

  • 自動車の一部として埋め込まれているか、自動車にプラグイン可能。
  • 運転席列の画面をプライマリ ディスプレイとして使用する。

このセクションでこれ以降記載する追加要件は、Android 自動車デバイス実装に固有のものです。

2.5.1. ハードウェア

自動車デバイス実装は:

  • [7.1.1.1/A-0-1] 画面の対角サイズが物理的に少なくとも 6 インチでなければなりません。
  • [7.1.1.1/A-0-2] 画面サイズのレイアウトが少なくとも 750 dp x 480 dp でなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[7.1.1.1/A-1-1 と A-1-2](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [7.1.1.1/A-1-1] メイン ディスプレイとして、各乗員ゾーンの物理的な対角画面サイズが 6 インチ以上ある別の画面がなければなりません。このディスプレイでは、各乗員ゾーンは CarOccupantZoneManager.DISPLAY_TYPE_MAIN としてタグ付けする必要があります。
  • [7.1.1.1/A-1-2] 画面サイズのレイアウトは、各メイン ディスプレイで 750 dp x 480 dp 以上でなければなりません。

新しい要件の終了

OpenGL ES 3.1 をサポートする場合、自動車デバイス実装は:

  • [7.1.4.1/A-0-1] OpenGL ES 3.1 以降を宣言しなければなりません。
  • [7.1.4.1/A-0-2] Vulkan 1.1 をサポートしなければなりません。
  • [7.1.4.1/A-0-3] Vulkan ローダーを含み、シンボルをすべてエクスポートしなければなりません。

Vulkan のサポートが含まれる場合、自動車デバイス実装は:

自動車デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[7.1.7/A-0-1](2024 年 5 月 29 日プレビュー)

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[7.2.3/A-0-1](2024 年 5 月 29 日プレビュー)

  • [7.2.3/A-0-1] ホーム機能と戻る機能を提供しなければなりません。また、戻る機能と履歴機能を提供しても構いません。

新しい要件の終了

  • [7.2.3/A-0-2] 戻る機能(KEYCODE_BACK)の通常イベントと長押しイベントの両方を、フォアグラウンド アプリに送信しなければなりません。
  • [7.3/A-0-1] GEAR_SELECTIONNIGHT_MODEPERF_VEHICLE_SPEEDPARKING_BRAKE_ON を実装しレポートしなければなりません。
  • [7.3/A-0-2] NIGHT_MODE フラグの値は、ダッシュボードの昼間 / 夜間モードと一致しなければならず、周囲光センサー入力に基づくべきです。基になる周囲光センサーは、光度計と同じでも構いません。
  • [7.3/A-0-3] 提供されるすべてのセンサーについて SensorAdditionalInfo の一部としてセンサー追加情報フィールド TYPE_SENSOR_PLACEMENT を提供しなければなりません。
  • [7.3/A-SR1] GPS/GNSS と追加のセンサーを融合することで、位置情報を推算しても構いません。位置情報を推算する場合、対応するセンサータイプや使用する車両プロパティ ID を実装し、レポートすることが強く推奨されます。
  • [7.3/A-0-4] LocationManager#requestLocationUpdates() を介してリクエストする位置情報は、マップマッチされてはなりません。

  • [7.3.1/A-0-4] Android 自動車センサー座標系に準拠しなければなりません。

  • [7.3/A-SR-1] 3 軸加速度計と 3 軸ジャイロスコープを含むことが強く推奨されます。

  • [7.3/A-SR-2] TYPE_HEADING センサーを実装し、レポートすることが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[7.3/A-1-1](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [7.3/A-1-1] NIGHT_MODE フラグの値は、リアシートのディスプレイを含めた、すべてのディスプレイでダッシュボードの日中 / 夜間モードと一致するように設定しなければなりません。

新しい要件の終了

加速度計が含まれる場合、自動車デバイス実装は:

  • [7.3.1/A-1-1] 少なくとも周波数 100 Hz までのイベントをレポートできなければなりません。

3 軸加速度計が含まれる場合、デバイス実装は:

  • [7.3.1/A-SR-1] 軸数制限付き加速度計用の複合センサーを実装することが強く推奨されます。

3 軸未満の加速度計が含まれる場合、自動車デバイス実装は:

  • [7.3.1/A-1-3] TYPE_ACCELEROMETER_LIMITED_AXES センサーを実装し、レポートしなければなりません。
  • [7.3.1/A-1-4] TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED センサーを実装し、レポートしなければなりません。

ジャイロスコープが含まれる場合、自動車デバイス実装は:

  • [7.3.4/A-2-1] 少なくとも周波数 100 Hz までのイベントをレポートできなければなりません。
  • [7.3.4/A-2-3] 250 度/秒までの方向変化を測定できなければなりません。
  • [7.3.4/A-SR-1] 解像度を可能な限り最大化するために、ジャイロスコープの測定範囲を +/-250 dps に設定することが強く推奨されます。

3 軸ジャイロスコープが含まれる場合、自動車デバイス実装は:

  • [7.3.4/A-SR-2] 軸数を制限されたジャイロスコープ用の複合センサーを実装することが強く推奨されます。

3 軸未満のジャイロスコープが含まれる場合、自動車デバイス実装は:

  • [7.3.4/A-4-1] TYPE_GYROSCOPE_LIMITED_AXES センサーを実装し、レポートしなければなりません。
  • [7.3.4/A-4-2] TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED センサーを実装し、レポートしなければなりません。

GPS / GNSS レシーバーが含まれるが、モバイル ネットワーク ベースのデータ接続が含まれない場合、自動車デバイス実装は:

  • [7.3.3/A-3-1] GPS / GNSS レシーバーが初めてオンになったとき、または 4 日以上経過した後、60 秒以内で位置を特定しなければなりません。
  • [7.3.3/A-3-2] 他のすべての位置情報リクエスト(初めてでもなく 4 日以上経過した後でもないリクエスト)について、7.3.3/C-1-27.3.3/C-1-6 に記載されている初期位置算出時間基準を満たさなければなりません。要件 7.3.3/C-1-2 は通常、モバイル ネットワーク ベースのデータ接続のない車両において、レシーバーで計算した GNSS 軌道予測を使用するか、7.3.3/C-1-3 を満たす位置精度で少なくとも 60 秒間推算する機能とともに最後の既知の車両位置情報を使用することで、または両方を組み合わせることで満たされます。

TYPE_HEADING センサーが含まれる場合、自動車デバイス実装は:

  • [7.3.4/A-4-3] 少なくとも周波数 1 Hz までのイベントをレポートできなければなりません。
  • [7.3.4/A-SR-3] 少なくとも周波数 10 Hz までのイベントをレポートすることが強く推奨されます。
  • 真北を指すべきです。
  • 車両が静止している間も利用できるべきです。
  • 解像度が少なくとも 1 度であるべきです。

自動車デバイス実装は:

  • [7.4.3/A-0-1] Bluetooth をサポートしなければならず、Bluetooth LE をサポートすべきです。
  • [7.4.3/A-0-2] Android Automotive 実装は、次の Bluetooth プロファイルをサポートしなければなりません。
    • Hands-Free Profile(HFP)での通話。
    • Audio Distribution Profile(A2DP)でのメディア再生。
    • Remote Control Profile(AVRCP)でのメディア再生コントロール。
    • Phone Book Access Profile(PBAP)を使用した連絡先の共有。

15(AOSP 試験運用版)の新しい要件の開始

[7.4.3/A-SR-1](2024 年 5 月 29 日プレビュー)

  • [7.4.3/A-SR-1] デバイスにドライバーの乗員ゾーンがある場合、Message Access Profile(MAP)をサポートすることが強く推奨されます。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[7.4.3/A-1-1](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [7.4.3/A-1-1] 独立していなければならず、他のユーザーの BT エクスペリエンスを妨げてはなりません。

新しい要件の終了

自動車デバイス実装は:

  • [7.4.5/A] モバイル ネットワーク ベースのデータ接続のサポートを含むべきです。
  • [7.4.5/A] システムアプリで利用可能にすべきネットワークについて、システム API の NetworkCapabilities#NET_CAPABILITY_OEM_PAID 定数を使用しても構いません。

AM/FM ブロードキャスト ラジオのサポートが含まれ、その機能を任意のアプリに公開する場合、デバイス実装は:

  • [7.4/A-1-1] FEATURE_BROADCAST_RADIO のサポートを宣言しなければなりません。

背面カメラとは、車両の任意の場所に設置でき、車室の外側に向いているワールド フェイシング カメラのことです。つまり、リアビュー カメラのように車体の向こう側の光景を撮影するものです。

前面カメラとは、車両の任意の場所に設置でき、車室の内側に向いているユーザー向きカメラのことです。つまり、ビデオ会議や同様のアプリのようにユーザーを撮影するものです。

自動車デバイス実装は:

  • [7.5/A-SR-1] 1 つ以上のワールド フェイシング カメラを含むことが強く推奨されます。
  • ユーザー向きカメラを 1 つ以上含んでも構いません。
  • [7.5/A-SR-2] 複数のカメラの同時ストリーミングをサポートすることが強く推奨されます。

ワールド フェイシング カメラが少なくとも 1 つ含まれる場合、当該のカメラについて、自動車デバイス実装は:

  • [7.5/A-1-1] カメラの長辺が Android Automotive センサーの軸の XY 平面に沿うよう向きを合わせなければなりません。
  • [7.5/A-SR-3] 固定焦点または EDOF(拡張被写界深度)のハードウェアを備えることが強く推奨されます。
  • [7.5/A-1-2] プライマリ ワールド フェイシング カメラが、カメラ ID が最も低いワールド フェイシング カメラでなければなりません。

自動車デバイス実装にユーザー向きカメラが 1 つ以上含まれる場合、当該のカメラについて:

  • [7.5/A-2-1] プライマリ ユーザー向きカメラは、カメラ ID が最も低いユーザー向きカメラでなければなりません。
  • カメラの長辺が Android Automotive センサーの軸の XY 平面と一致するような向きであっても構いません。

android.hardware.Camera API または android.hardware.camera2 API を介してアクセスできるカメラが含まれる場合、自動車デバイス実装は:

  • [7.5/A-3-1] セクション 7.5 のカメラのコア要件を遵守しなければなりません。

android.hardware.Camera API または android.hardware.camera2 API を介してアクセスできないカメラが含まれる場合、自動車デバイス実装は:

  • [7.5/A-4-1] 拡張ビューシステム サービスを介してアクセスできなければなりません。

拡張ビューシステム サービスを介してアクセス可能なカメラが 1 つ以上含まれる場合、そのようなカメラについて、自動車デバイス実装は:

  • [7.5/A-5-1] カメラ プレビューを回転または水平にミラーリングしてはなりません。
  • [7.5/A-SR-4] 解像度が 1.3 メガピクセル以上であることが強く推奨されます。

拡張ビューシステム サービスと android.hardware.Camera API または android.hardware.Camera2 API を介してアクセス可能なカメラが 1 つ以上含まれる場合、そのようなカメラについて、自動車デバイス実装は:

  • [7.5/A-6-1] 同じカメラ ID をレポートしなければなりません。

独自のカメラ API を提供する場合、自動車デバイス実装は:

  • [7.5/A-7-1] 当該のカメラ API を android.hardware.camera2 API または拡張ビューシステム API を使用して実装しなければなりません。

自動車デバイス実装は:

  • [7.6.1/A-0-1] アプリのプライベート データ(/data パーティション)の不揮発性ストレージが 4 GB 以上でなければなりません。

  • [7.6.1/A] たとえば f2fs ファイル システムを使用して、フラッシュ ストレージのパフォーマンスと寿命を改善するために、データ パーティションをフォーマットすべきです。

取り外し不可能な内部ストレージの一部を介して共有外部ストレージを提供する場合、自動車デバイス実装は:

  • [7.6.1/A-SR-1] たとえば SDCardFS を使用して、外部ストレージで行われる操作の I/O オーバーヘッドを削減することが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[7.6.1/A-1-1](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [7.6.1/A-1-1] 単一の AAOS インスタンスで、アプリのプライベート データ(/data パーティション)の不揮発性ストレージが、各 Android 同時ユーザーに対して 4 GB 以上なければなりません。

新しい要件の終了

自動車デバイス実装が 64 ビットの場合:

15(AOSP 試験運用版)の新しい要件の開始

[7.6.1/A-2-1 から 7.6.1/A-2-4](2024 年 5 月 29 日プレビュー)

  • [7.6.1/A-2-1] 以下のいずれかの密度で使用される場合、カーネルとユーザー空間に利用できるメモリが、メイン ディスプレイ 1 台につき 816 MB 以上でなければなりません。

    • 小 / 標準画面で 280 dpi 以下
    • 特大画面で ldpi 以下
    • 大画面で mdpi 以下
  • [7.6.1/A-2-2] 以下のいずれかの密度で使用される場合、カーネルとユーザー空間に利用できるメモリが、メイン ディスプレイ 1 台につき 944 MB 以上でなければなりません。

    • 小 / 標準画面で xhdpi 以上
    • 大画面で hdpi 以上
    • 特大画面で mdpi 以上
  • [7.6.1/A-2-3] 以下のいずれかの密度で使用される場合、カーネルとユーザー空間に利用できるメモリが、メイン ディスプレイ 1 台につき 1280 MB 以上でなければなりません。

    • 小 / 標準画面で 400 dpi 以上
    • 大画面で xhdpi 以上
    • 特大画面で tvdpi 以上
  • [7.6.1/A-2-4] 以下のいずれかの密度で使用される場合、カーネルとユーザー空間に利用できるメモリが、メイン ディスプレイ 1 台につき 1824 MB 以上でなければなりません。

    • 小 / 標準画面で 560 dpi 以上
    • 大画面で 400 dpi 以上
    • 特大画面で xhdpi 以上

なお、上記の「カーネルとユーザー空間に利用できるメモリ」とは、デバイス実装でカーネルの制御下にない、無線や動画などのハードウェア コンポーネント専用のメモリに加えて提供されるメモリ空間を指します。

新しい要件の終了

自動車デバイス実装は:

  • [7.7.1/A] ペリフェラル モードをサポートする USB ポートを含むべきです。

自動車デバイス実装は:

  • [7.8.1/A-0-1] マイクを含まなければなりません。

自動車デバイス実装は:

  • [7.8.2/A-0-1] オーディオ出力がなければならず、android.hardware.audio.output を宣言しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[7.8.2/A-1-1 と A-1-2](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [7.8.2/A-1-1] 同時マルチユーザー システムのメイン ディスプレイごとにオーディオ出力デバイスがなければなりません。
  • [7.8.2/A-1-2] 車内スピーカー全体を対象範囲とするドライバーのオーディオ ゾーンがなければなりません。助手席ゾーンには、ドライバーのオーディオ ゾーンを共有するか、または独自のオーディオ出力を使用することもできます。

新しい要件の終了

2.5.2. マルチメディア

自動車デバイス実装は、次の形式のオーディオ エンコードとデコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.1/A-0-1] MPEG-4 AAC プロファイル(AAC LC)
  • [5.1/A-0-2] MPEG-4 HE AAC プロファイル(AAC+)
  • [5.1/A-0-3] AAC ELD(Enhanced Low Delay AAC)

自動車デバイス実装は、次の形式の動画エンコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.2/A-0-1] H.264 AVC
  • [5.2/A-0-2] VP8

自動車デバイス実装は、次の形式の動画デコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [5.3/A-0-1] H.264 AVC
  • [5.3/A-0-2] MPEG-4 SP
  • [5.3/A-0-3] VP8
  • [5.3/A-0-4] VP9

自動車デバイス実装は、次の動画デコードをサポートすることが強く推奨されます。

  • [5.3/A-SR-1] H.265 HEVC

15(AOSP 試験運用版)の新しい要件の開始

[5.5.3/A-1-1](2024 年 5 月 29 日プレビュー)

同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [5.5.3/A-1-1] すべてのオーディオ出力ストリーム マッピングの同一のボリューム カーブは、カーオーディオ構成ファイルで定義されているのと同じ音量グループとして定義しなければなりません。

新しい要件の終了

2.5.3. ソフトウェア

自動車デバイス実装は:

  • [3/A-0-1] 機能 android.hardware.type.automotive を宣言しなければなりません。

  • [3/A-0-2] uiMode = UI_MODE_TYPE_CAR をサポートしなければなりません。

  • [3/A-0-3] android.car.* 名前空間のすべての公開 API をサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[3/A-0-4] [撤回](2024 年 4 月 8 日プレビュー)
この要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

[3/A-0-4](2023 年 12 月 11 日プレビュー)

  • [3/A-0-4] 自動車画面用 Adapt アプリをサポートしなければなりません。

新しい要件の終了

android.car.VehiclePropertyIdsandroid.car.CarPropertyManager を使用する独自の API を提供する場合、自動車デバイス実装は:

  • [3/A-1-1] システムアプリがこれらのプロパティを使用するための特別な権限を付与したり、サードパーティ アプリによるこれらのプロパティの使用を妨げたりしてはなりません。
  • [3/A-1-2] すでに SDK に存在する車両プロパティをレプリケートしてはなりません。

自動車デバイス実装は:

  • [3.2.1/A-0-1] 自動車の権限に関するリファレンス ページに記載されているすべての権限定数をサポートし、適用しなければなりません。

  • [3.2.3.1/A-0-1] こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードしなければなりません。

  • [3.4.1/A-0-1] android.webkit.Webview API の完全な実装を提供しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[3.8/A-1-1 と A-1-2](2024 年 5 月 29 日プレビュー)

  • [3.8/A-0-1] 現在のフォアグラウンド ユーザーではないフルセカンダリ ユーザーによるアクティビティの起動と画面上の UI へのアクセスを許可してはなりません。

現在のフォアグラウンド ユーザーではないものの、ディスプレイへの UI アクセス権を持っているフルセカンダリ ユーザーに対して、同時マルチユーザー(config_multiuserVisibleBackgroundUsers が有効である場合に、複数の Android ユーザーが、それぞれ自分のディスプレイを使用して同時にデバイスの操作が可能)をサポートする場合、自動車デバイス実装は:

  • [3.8/A-1-1] 以下のあらかじめ定義された UserRestrictions のリストを実装しなければなりません。

  • [3.8/A-1-2] ユーザーに、設定または API 経由で他のユーザーに対する以下の設定の変更を許可してはなりません。

    • 日中 / 夜間モード
    • 言語 / 地域
    • 日付
    • 時間
    • タイムゾーン
    • ディスプレイのカラー機能(明るさ、夜間モード、Digital Wellbeing グレースケール、明るい色の低減)

新しい要件の終了

自動車デバイス実装は:

  • [3.8.3/A-0-1] サードパーティ アプリがリクエストした場合、Notification.CarExtender API を使用する通知を表示しなければなりません。

  • [3.8.4/A-SR-1] アシスト アクションを処理するために、デバイスにアシスタントを実装することが強く推奨されます。

プッシュツートーク ボタンが含まれる場合、自動車デバイス実装は:

  • [3.8.4/A-1-1] ユーザー選択のアシストアプリ(VoiceInteractionService を実装するアプリ)を起動するための指定操作として、プッシュツートーク ボタンの短押しを使用しなければなりません。

自動車デバイス実装は:

  • [3.8.3.1/A-0-1] Notifications on Automotive OS SDK ドキュメントに記載されているとおり、リソースを正しくレンダリングしなければなりません。
  • [3.8.3.1/A-0-2] Notification.Builder.addAction() で提供されるものの代わりに、通知アクションの再生とミュートを表示しなければなりません。
  • [3.8.3.1/A] 通知チャンネルごとのコントロールのような、リッチな管理タスクの使用を制限すべきです。コントロールを減らすためにアプリごとに UI アフォーダンスを使用しても構いません。

ユーザー HAL プロパティをサポートする場合、自動車デバイス実装は:

自動車デバイス実装は:

  • [3.14/A-0-1] セクション 3.14 に記載されているとおり、メディア API を使用するサードパーティ アプリをサポートするために UI フレームワークを含めなければなりません。
  • [3.14/A-0-2] 運転中、ユーザーがメディアアプリを安全に操作できるようにしなければなりません。
  • [3.14/A-0-3] CAR_EXTRA_MEDIA_PACKAGE エクストラで暗黙的インテントのアクション CAR_INTENT_ACTION_MEDIA_TEMPLATE をサポートしなければなりません。
  • [3.14/A-0-4] メディアアプリの設定アクティビティにナビゲートするアフォーダンスを提供しなければなりません。ただし自動車 UX 制限が有効でない場合にのみ、有効にしなければなりません。
  • [3.14/A-0-5] メディアアプリによって設定されたエラー メッセージを表示しなければならず、オプションのエクストラ ERROR_RESOLUTION_ACTION_LABELERROR_RESOLUTION_ACTION_INTENT をサポートしなければなりません。
  • [3.14/A-0-6] 検索をサポートするアプリのためのアプリ内検索アフォーダンスをサポートしなければなりません。
  • [3.14/A-0-7] MediaBrowser 階層を表示するとき、CONTENT_STYLE_BROWSABLE_HINTCONTENT_STYLE_PLAYABLE_HINT の定義を尊重しなければなりません。

デフォルトのランチャー アプリが含まれる場合、自動車デバイス実装は:

自動車デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[3.14/A-0-8] [撤回](2024 年 5 月 29 日プレビュー)

この要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

[3.14/A-0-8](2024 年 4 月 8 日プレビュー)

新しい要件の終了

  • [3.8/A] immersive documentation に記載されているように、全画面モードに入るアプリ リクエストを制限しても構いません。
  • [3.8/A] ステータスバーとナビゲーション バーを常に表示し続けても構いません。
  • [3.8/A] システム UI 要素の背後の色を変更するアプリ リクエストを制限して、それらの要素が常に明確に見えるようにしても構いません。

2.5.4. パフォーマンスと電力

自動車デバイス実装は:

  • [8.2/A-0-1] デベロッパーがシステム API android.car.storagemonitoring.CarStorageMonitoringManager を通じて統計情報を利用できるよう、プロセスの UID ごとに、不揮発性ストレージに読み書きされたバイト数をレポートしなければなりません。Android オープンソース プロジェクトは、uid_sys_stats カーネル モジュールを通じて要件を満たしています。
  • [8.3/A-1-3] ガレージモードをサポートしなければなりません。
  • [8.3/A] 次の場合を除き、毎回運転した後、少なくとも 15 分間はガレージモードになるべきです。
    • バッテリーが消耗している。
    • アイドルジョブがスケジュールされていない。
    • 運転者がガレージモードを終了した。
  • [8.4/A-0-1] Android オープンソース プロジェクトのサイトに記載されているとおり、ハードウェア コンポーネントごとの電流消費値と、時間の経過に伴ってコンポーネントによって発生するおおよそのバッテリー消耗量を定義する、コンポーネントごとの電力プロファイルを提供しなければなりません。
  • [8.4/A-0-2] すべての消費電力値をミリアンペア時(mAh)単位でレポートしなければなりません。
  • [8.4/A-0-3] プロセスの UID ごとの CPU 消費電力をレポートしなければなりません。Android オープンソース プロジェクトは、uid_cputime カーネル モジュール実装を通じて要件を満たしています。
  • [8.4/A] ハードウェア コンポーネントの電力使用量をアプリに帰属させられない場合、ハードウェア コンポーネント自体に帰属されるべきです。
  • [8.4/A-0-4] この電力使用量を、adb shell dumpsys batterystats シェルコマンドを介してアプリ デベロッパーが利用できるようにしなければなりません。

2.5.5. セキュリティ モデル

複数ユーザーをサポートする場合、自動車デバイス実装は:

android.hardware.microphone を宣言する場合、自動車デバイス実装は:

  • [9.8.2/A-1-1] アプリがマイクからオーディオ データにアクセスしているときはマイク インジケーターを表示しなければなりません。ただし、HotwordDetectionServiceSOURCE_HOTWORDContentCaptureService、またはセクション 9.1 で CDD 識別子 [C-4-X] が割り当てられたロールを持つアプリからのみマイクにアクセスする場合は、この限りではありません。
  • [9.8.2/A-1-2] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、マイク インジケーターを非表示にしてはなりません。
  • [9.8.2/A-1-3] 設定アプリでマイクを切り替えるユーザー アフォーダンスを提供しなければなりません。

android.hardware.camera.any を宣言する場合、自動車デバイス実装は:

  • [9.8.2/A-2-1] アプリがライブ カメラデータにアクセスしているときはカメラ インジケーターを表示しなければなりません。ただし、セクション 9.1 権限で定義されているとおり、CDD 識別子 [C-4-X] を備えたロールを持つアプリからのみカメラにアクセスする場合は、この限りではありません。
  • [9.8.2/A-2-2] ユーザー インターフェースが表示されているか直接のユーザー操作があるシステムアプリについて、カメラ インジケーターを非表示にしてはなりません。
  • [9.8.2/A-2-3] 設定アプリでカメラの切り替えを行うユーザー アフォーダンスを提供しなければなりません。
  • [9.8.2/A-2-4] PermissionManager.getIndicatorAppOpUsageData() から返された、カメラを使用している最近使ったアプリとアクティブなアプリを、関連する属性メッセージとともに表示しなければなりません。

自動車デバイス実装は:

  • [9/A-0-1] android.hardware.security.model.compatible 機能を宣言しなければなりません。
  • [9.11/A-0-1] 隔離された実行環境でキーストア実装をバックアップしなければなりません。
  • [9.11/A-0-2] カーネル以上で動作するコードから安全に隔離されたエリアで、Android Keystore システムのサポート対象アルゴリズムを適切にサポートするために、RSA、AES、ECDSA、HMAC 暗号アルゴリズムと、MD5、SHA1、SHA-2 ファミリー ハッシュ関数の実装を持たなければなりません。安全な隔離では、DMA を含め、隔離された環境の内部状態にカーネルまたはユーザー空間のコードがアクセスする可能性のあるすべてのメカニズムをブロックしなければなりません。アップストリームの Android オープンソース プロジェクト(AOSP)は、Trusty 実装を使用することでこの要件を満たしています。ただし、別の ARM TrustZone ベースのソリューション、または、サードパーティのレビューによる適切なハイパーバイザベースの隔離オプションをセキュアに実装する方法を選択することもできます。
  • [9.11/A-0-3] 隔離された実行環境でロック画面認証を行わなければならず、成功した場合にのみ、認証にバインドされた鍵の使用を許可しなければなりません。ロック画面の認証情報は、隔離された実行環境のみがロック画面認証を行えるように保存しなければなりません。アップストリームの Android オープンソース プロジェクトは、ゲートキーパー Hardware Abstraction Layer(HAL)と Trusty を提供しており、これを使用してこの要件を満たすことができます。

15(AOSP 試験運用版)の新しい要件の開始

[9.11/A-0-4](2024 年 5 月 29 日プレビュー)

  • [9.11/A-0-4] 証明書署名鍵がセキュア ハードウェアによって保護され、署名がセキュア ハードウェアで行われるキー構成証明をサポートしなければなりません。証明書署名鍵は十分な数のデバイス間で共有し、鍵が恒久的なデバイス ID として使用されることを防止しなければなりません。この要件を満たす方法としては、特定の SKU が少なくとも 100,000 ユニット生成されない限り、同じ証明書鍵を共有することが挙げられます。生成される SKU が 100,000 ユニットを超える場合は、100,000 ユニットごとに異なるキーを使用しても構いません。

新しい要件の終了

なお、デバイス実装が以前のバージョンの Android ですでにリリースされている場合、そのようなデバイスは、隔離された実行環境で動作するキーストアが必要な android.hardware.fingerprint 機能を宣言する場合を除き、隔離された実行環境で動作するキーストアを持ち、キー構成証明をサポートする必要があるという要件を免除されます。

自動車デバイス実装は:

  • [9.14/A-0-1] Android フレームワークの車両サブシステムからのメッセージの送受信を管理しなければなりません(例: 許可されるメッセージ タイプとメッセージ ソースの許可リスト登録)。
  • [9.14/A-0-2] Android フレームワークまたはサードパーティ アプリからのサービス拒否攻撃に対して、ウォッチドッグを設定しなければなりません。これにより、車両サブシステムの誤作動を招くおそれのある、悪意のあるソフトウェアが車両ネットワークにフラッディングを行うことを防ぎます。

2.5.6. デベロッパー ツール、開発者向けオプションの互換性

15(AOSP 試験運用版)の新しい要件の開始

[6.1] Perfetto(2024 年 5 月 29 日プレビュー)

自動車デバイス実装は:

  • Perfetto
    • [6.1/A-0-1] cmdline が perfetto ドキュメントを遵守しているシェルユーザーに /system/bin/perfetto バイナリを公開しなければなりません。
    • [6.1/A-0-2] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf 構成を入力として受け入れなければなりません。
    • [6.1/A-0-3] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf トレースを出力として書き込まなければなりません。
    • [6.1/A-0-4] 少なくとも perfetto ドキュメントで規定されたデータソースを、perfetto バイナリを通じて提供しなければなりません。
    • [6.1/A-0-5] perfetto トレース対象デーモンは、デフォルトで有効でなければなりません(システム プロパティ persist.traced.enable)。

新しい要件の終了

2.6. タブレットの要件

Android タブレット デバイスとは一般に、次の基準をすべて満たす Android デバイス実装を指します。

  • 両手で持って使用する。
  • クラムシェルまたはコンバーチブル構成ではない。
  • 標準的な接続(USB、Bluetooth など)によるデバイス接続で使用する物理キーボードの実装。
  • バッテリーなど、持ち運びを可能にする電源がある。

  • 対角線で測定した画面ディスプレイ サイズが 7 インチより大きく 18 インチより小さい。

タブレット デバイス実装の要件は、ハンドヘルド デバイス実装と同様です。例外は、ハンドヘルド デバイスのセクションでは「*」で示されており、このセクションでは参考用に注記されています。

2.6.1. ハードウェア

ジャイロスコープ

3 軸ジャイロスコープが含まれる場合、タブレット デバイス実装は:

  • [7.3.4/Tab-1-1] 1,000 度/秒までの方向変化を測定できなければなりません。

最小のメモリとストレージ(セクション 7.6.1)

ハンドヘルドの要件で小 / 標準画面についてリストされている画面密度は、タブレットには適用されません。

15(AOSP 試験運用版)の新しい要件の開始

[7.7.1/Tab](2023 年 12 月 11 日プレビュー)

USB ペリフェラル モード(セクション 7.7.1)

ペリフェラル モードをサポートする USB ポートが含まれる場合、タブレット デバイス実装は:

  • [7.7.1/Tab] Android Open Accessory(AOA)API を実装しても構いません。

新しい要件の終了

バーチャル リアリティ モード(セクション 7.9.1)

バーチャル リアリティ ハイ パフォーマンス(セクション 7.9.2)

バーチャル リアリティ要件はタブレットには適用されません。

2.6.2. セキュリティ モデル

鍵と認証情報(セクション 9.11)

セクション [9.11] をご覧ください。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言しない場合、デバイス実装は:

  • [9.5/T-1-1] 制限付きプロファイル(追加のユーザーと、そのユーザーがデバイス上でできることを、デバイス所有者が管理できるようにする機能)をサポートしなければなりません。制限付きプロファイルにより、デバイス所有者は、追加のユーザーが使用する個別の環境をすばやく設定でき、その環境で利用できるアプリの制限をきめ細かく管理できます。

複数のユーザーが含まれ、android.hardware.telephony 機能フラグを宣言する場合、タブレット デバイス実装は:

  • [9.5/T-2-1] 制限付きプロファイルをサポートしてはなりませんが、他のユーザーによる音声通話と SMS へのアクセスを可能 / 不可能にするコントロールの AOSP 実装に合わせなければなりません。

2.6.2. ソフトウェア

  • [3.2.3.1/Tab-0-1] こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードしなければなりません。

3.ソフトウェア

3.1. マネージド API の互換性

Dalvik バイトコードによるマネージド実行環境は、Android アプリを実行する際の主要手段です。Android アプリケーション プログラミング インターフェース(API)は、マネージド ランタイム環境で動作するアプリに公開される Andoid プラットフォーム インターフェースのセットです。

デバイス実装は:

  • [C-0-1] Android SDK で公開されているドキュメント化された API、またはアップストリームの Android ソースコードにおいて「@SystemApi」マーカーで装飾されている API について、すべてのドキュメント化された動作も含めて、完全な実装を提供しなければなりません。

  • [C-0-2] TestApi アノテーション(@TestApi)でマークされたすべてのクラス、メソッド、関連要素をサポート / 維持しなければなりません。

  • [C-0-3] この互換性定義で特に許可されている場合を除き、マネージド API の省略、API インターフェースまたは署名の変更、ドキュメント化された動作からの逸脱、NoOps の対象とすることを行ってはなりません。

  • [C-0-4] Android に含まれている API のハードウェア機能のいくつかが省略されている場合でも、API を維持し、妥当な方法で動作させなければなりません。このシナリオに固有の要件については、セクション 7 をご覧ください。

  • [C-0-5] AOSP のブート クラスパスにあり、公開 SDK の一部を形成するわけではない、Java 言語パッケージのメソッドとフィールドとして定義される非 SDK インターフェースを、サードパーティ アプリが使用できるようにしてはなりません。これには、private と package-private のクラスメンバーや、SDK ドキュメントに記載されているとおり、@SystemAPI ではなく @hide アノテーションで装飾されている API が含まれます。

  • [C-0-6] すべての非 SDK インターフェースが、AOSP の該当する API レベルブランチの prebuilts/runtime/appcompat/hiddenapi-flags.csv パスにある provisional フラグと denylist フラグで提供されるものと同じ制限リストに含まれていなければなりません。

  • [C-0-7] AOSP にある既存の公開鍵を使用して、署名設定を APK に埋め込むことにより、非 SDK インターフェースを制限リストから削除できるように、署名設定の動的更新メカニズムをサポートしなければなりません。

    ただし:

    • デバイス実装で非表示 API が存在しないか異なる方法で実装されている場合は、非表示 API を拒否リストに移動するか、すべての制限リストから除外しても構いません。
    • AOSP に非表示 API がまだ存在していない場合は、非表示 API を制限リストに追加しても構いません。

15(AOSP 試験運用版)の新しい要件の開始

[C-0-8](2024 年 4 月 8 日プレビュー)

  • [C-0-8] API レベル 2324 未満をターゲットとするアプリのインストールをサポートしてはなりません。

新しい要件の終了

[C-0-8](2023 年 12 月 11 日プレビュー)

  • [C-0-8] API レベル 2325 未満をターゲットとするアプリのインストールをサポートしてはなりません。

新しい要件の終了

3.1.1. Android 拡張機能

Android は、特定の API レベルの拡張機能バージョンを更新することで、その API レベルのマネージド API サーフェスの拡張をサポートします。android.os.ext.SdkExtensions.getExtensionVersion(int apiLevel) API は、指定された API レベルの拡張機能がある場合、その apiLevel の拡張機能バージョンを返します。

Android デバイス実装は:

  • [C-0-1] 共有ライブラリ ExtShared とサービス ExtServices の両方の AOSP 実装を、API レベルごとに許可された最小バージョン以上のバージョンでプリロードしなければなりません。たとえば、API レベル 24 を搭載した Android 7.0 デバイス実装の場合、少なくともバージョン 1 を含まなければなりません。

  • [C-0-2] AOSP で定義された有効な拡張機能バージョン番号のみを返さなければなりません。

  • [C-0-3] 他のマネージド API のサポートと同様に、セクション 3.1 の要件に従い、android.os.ext.SdkExtensions.getExtensionVersion(int apiLevel) が返す拡張機能バージョンで定義されるすべての API をサポートしなければなりません。

3.1.2. Android ライブラリ

Apache HTTP クライアントのサポート終了により、デバイス実装は:

  • [C-0-1] org.apache.http.legacy ライブラリをブート クラスパスに配置してはなりません。
  • [C-0-2] アプリが次のいずれかの条件を満たす場合にのみ、org.apache.http.legacy ライブラリをアプリ クラスパスに追加しなければなりません。
    • API レベル 28 以前をターゲットとする。
    • <uses-library>android:name 属性を org.apache.http.legacy に設定することで、ライブラリが必要であることをマニフェストで宣言する。

AOSP 実装はこれらの要件を満たしています。

3.2. ソフト API の互換性

セクション 3.1 のマネージド API に加えて、Android には、アプリのコンパイル時には適用できない、Android アプリのインテントや権限などの形式で、重要なランタイム専用の「ソフト」API も含まれています。

3.2.1. 権限

  • [C-0-1] デバイス実装者は、権限に関するリファレンス ページに記載されているすべての権限定数をサポートし、適用しなければなりません。なお、セクション 9 に、Android セキュリティ モデルに関連する追加の要件を記載しています。

3.2.2. ビルド パラメータ

Android API には、現在のデバイスを記述するための android.os.Build クラスの定数がいくつか含まれています。

  • [C-0-1] デバイス実装間で一貫した意味のある値を提供するために、デバイス実装が従わなければならない、これらの値の形式に関する追加の制限を下表に示します。
パラメータ 詳細
VERSION.RELEASE 現在実行している Android システムのバージョン(人が読める形式)。このフィールドには、Android 15 で使用できるバージョン文字列で定義された文字列値のいずれかを指定しなければなりません。
VERSION.SDK 現在実行している Android システムのバージョン(サードパーティ アプリコードからアクセスできる形式)。Android 15 の場合、このフィールドには整数値 15_INT を指定しなければなりません。
VERSION.SDK&lowbar;INT 現在実行している Android システムのバージョン(サードパーティ アプリコードからアクセスできる形式)。Android 15 の場合、このフィールドには整数値 15&lowbar;INT を指定しなければなりません。
VERSION.INCREMENTAL 現在実行している Android システムの特定のビルドを指定する、デバイス実装者が選択した値(人が読める形式)。この値は、エンドユーザーが利用できる別のビルドに再利用してはなりません。このフィールドは主に、ビルドの生成に使用されたビルド番号またはソース管理変更 ID を示すために使用します。このフィールドの値は、印刷用の 7 ビット ASCII としてエンコード可能であって、正規表現 ^[^ :\/~]+$ に一致しなければなりません。
BOARD デバイスで使用される特定の内部ハードウェアを識別する、デバイス実装者が選択した値(人が読める形式)。このフィールドは、デバイスに電力を供給するボードの特定のリビジョンを示すために使用できます。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9_-]+$ と一致しなければなりません。
BRAND エンドユーザーが知っているデバイスに関連付けられたブランド名を反映する値。人が読める形式でなければならず、デバイスのメーカーまたはデバイスを販売する会社のブランドを表すべきです。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9_-]+$ と一致しなければなりません。
SUPPORTED&lowbar;ABIS ネイティブ コードの命令セット(CPU タイプ + ABI 規則)の名前。セクション 3.3 ネイティブ API の互換性をご覧ください。
SUPPORTED&lowbar;32&lowbar;BIT&lowbar;ABIS ネイティブ コードの命令セット(CPU タイプ + ABI 規則)の名前。セクション 3.3 ネイティブ API の互換性をご覧ください。
SUPPORTED&lowbar;64&lowbar;BIT&lowbar;ABIS ネイティブ コードの 2 番目の命令セット(CPU タイプ + ABI 規則)の名前。セクション 3.3 ネイティブ API の互換性をご覧ください。
CPU&lowbar;ABI ネイティブ コードの命令セット(CPU タイプ + ABI 規則)の名前。セクション 3.3 ネイティブ API の互換性をご覧ください。
CPU&lowbar;ABI2 ネイティブ コードの 2 番目の命令セット(CPU タイプ + ABI 規則)の名前。セクション 3.3 ネイティブ API の互換性をご覧ください。
DEVICE ハードウェア機能の構成とデバイスの工業デザインを識別する開発名またはコードネームを含む、デバイス実装者が選択した値。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9_-]+$ と一致しなければなりません。このデバイス名は、製品の全期間にわたって変更してはなりません。
FINGERPRINT このビルドを一意に識別する文字列。人が読める程度の形式にすべきです。次のテンプレートに従わなければなりません。

$(BRAND)/$(PRODUCT)/
    $(DEVICE):$(VERSION.RELEASE)/$(ID)/$(VERSION.INCREMENTAL):$(TYPE)/$(TAGS)

次に例を示します。

acme/myproduct/
    mydevice:15/LMYXX/3359:userdebug/test-keys

フィンガープリントには空白文字を含んではなりません。このフィールドの値は 7 ビット ASCII としてエンコード可能でなければなりません。

HARDWARE ハードウェアの名前(カーネル コマンドラインまたは /proc から)。人が読める程度の形式にすべきです。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9_-]+$ と一致しなければなりません。
HOST ビルドが構築されたホストを一意に識別する文字列(人が読める形式)。このフィールドの具体的な形式についての要件はありませんが、null または空の文字列("")であってはなりません。
ID 特定のリリースを参照するためにデバイス実装者が選択する識別子(人が読める形式)。このフィールドは android.os.Build.VERSION.INCREMENTAL と同じ内容にできますが、エンドユーザーがソフトウェア ビルドを区別できるような意味のある値にすべきです。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9._-]+$ と一致しなければなりません。
MANUFACTURER 製品の相手先ブランド製品製造企業(OEM)の商号。このフィールドの具体的な形式についての要件はありませんが、null または空の文字列("")であってはなりません。このフィールドは、製品の全期間にわたって変更してはなりません。
SOC&lowbar;MANUFACTURER 製品で使用しているプライマリ システム オン チップ(SOC)のメーカー名。SOC メーカーが同じデバイスでは、同じ定数値を使用すべきです。使用する正しい定数については、SOC メーカーにお問い合わせください。このフィールドの値は、7 ビットの ASCII としてエンコード可能であって、正規表現 ^([0-9A-Za-z ]+) に一致しなければなりません。また、空白文字で開始または終了してはならず、「unknown」であってはなりません。このフィールドは、製品の全期間にわたって変更してはなりません。
SOC&lowbar;MODEL 製品で使用しているプライマリ システム オン チップ(SOC)のモデル名。SOC モデルが同じデバイスでは、同じ定数値を使用すべきです。使用する正しい定数については、SOC メーカーにお問い合わせください。このフィールドの値は、7 ビットの ASCII としてエンコード可能であって、正規表現 ^([0-9A-Za-z ._/+-]+)$ に一致しなければなりません。また、空白文字で開始または終了してはならず、「unknown」であってはなりません。このフィールドは、製品の全期間にわたって変更してはなりません。
MODEL エンドユーザーが知っているデバイスの名前を含む、デバイス実装者が選択した値。これは、デバイスが市販されエンドユーザーに販売される際の名前と同じにすべきです。このフィールドの具体的な形式についての要件はありませんが、null または空の文字列("")であってはなりません。このフィールドは、製品の全期間にわたって変更してはなりません。
PRODUCT 特定の製品(SKU)の開発名またはコードネームを含む、デバイス実装者が選択した値。同じブランド内で一意でなければなりません。人が読める形式でなければなりませんが、必ずしもエンドユーザーに表示することを意図したものではありません。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9_-]+$ と一致しなければなりません。この製品名は、製品の全期間にわたって変更してはなりません。
ODM&lowbar;SKU デバイスの特定の構成(販売時にデバイスに付属する周辺機器など)を追跡するために使用される SKU(最小管理単位)を含む、デバイス実装者が選択した任意の値。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^([0-9A-Za-z.,_-]+)$ と一致しなければなりません。
SERIAL 「UNKNOWN」を返さなければなりません。
TAGS ビルドをさらに区別する、デバイス実装者が選択したタグのカンマ区切りのリスト。タグは、7 ビット ASCII としてエンコード可能であって、正規表現 ^[a-zA-Z0-9._-]+ に一致しなければなりません。また、典型的な 3 つの Android プラットフォーム署名設定(release-keys、dev-keys、test-keys)に対応する値のいずれかを持たなければなりません。
TIME ビルドが作成されたときのタイムスタンプを表す値。
TYPE ビルドのランタイム構成を指定する、デバイス実装者が選択した値。このフィールドには、典型的な 3 つの Android ランタイム構成(user、userdebug、eng)に対応する値のいずれかを指定しなければなりません。
USER ビルドを生成したユーザー(または自動ユーザー)の名前またはユーザー ID。このフィールドの具体的な形式についての要件はありませんが、null または空の文字列("")であってはなりません。
SECURITY&lowbar;PATCH ビルドのセキュリティ パッチレベルを示す値。指定の Android のセキュリティに関する公開情報で説明されている問題に対して、ビルドがいかなる脆弱性も持たないことを示さなければなりません。「2015-11-01」など、Android のセキュリティに関する公開情報または Android セキュリティ アドバイザリに記載されている定義文字列と一致する、[YYYY-MM-DD] の形式でなければなりません。
BASE&lowbar;OS ビルドの FINGERPRINT パラメータを表す値。Android のセキュリティに関する公開情報で提供されているパッチを除き、このビルドと同一です。正しい値をレポートしなければならず、そのようなビルドが存在しない場合は空の文字列("")をレポートしなければなりません。
BOOTLOADER デバイスで使用される特定の内部ブートローダー バージョンを識別する、デバイス実装者が選択した値(人が読める形式)。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9._-]+$ と一致しなければなりません。
getRadioVersion() デバイスで使用されている特定の内部無線 / モデム バージョンを識別する、デバイス実装者が選択した値(人が読める形式)でなければなりません。または、そのような値を返さなければなりません。デバイスに内部無線 / モデムがない場合は、NULL を返さなければなりません。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9._-,]+$ と一致しなければなりません。
getSerial() ハードウェア シリアル番号でなければなりません。または、ハードウェア シリアル番号を返さなければなりません。ハードウェア シリアル番号は、MODEL と MANUFACTURER が同じデバイス間で利用可能かつ一意でなければなりません。このフィールドの値は、7 ビット ASCII としてエンコード可能でなければならず、かつ正規表現 ^[a-zA-Z0-9]+$ と一致しなければなりません。

3.2.3. インテントの互換性

3.2.3.1. 一般的なアプリ インテント

Android インテントによって、アプリ コンポーネントは他の Android コンポーネントの機能をリクエストできます。Android のアップストリーム プロジェクトには、一般的なアクションを行うために複数のインテント パターンを実装するアプリのリストが含まれています。

デバイス実装は:

  • [C-SR-1] こちらに記載されているアプリ インテントで定義されるすべてのパブリック インテント フィルタ パターンについて、インテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードし、フルフィルメントを提供する(SDK に記載されているこれら一般的なアプリ インテントに対するデベロッパーの期待に応える)ことが強く推奨されます。

デバイスタイプごとの必須のアプリ インテントについては、セクション 2 をご覧ください。

3.2.3.2. インテントの解決
  • [C-0-1] Android は拡張可能なプラットフォームであるため、デバイス実装は、セクション 3.2.3.1 で参照されている各インテント パターンをサードパーティ アプリでオーバーライドできるようにしなければなりません。アップストリームの Android オープンソース実装では、デフォルトでこれを行えます。

  • [C-0-2] デバイス実装者は、システムアプリがこれらのインテント パターンを使用することに対し特別な権限を付与したり、サードパーティ アプリがこれらのパターンにバインドして制御を引き受けることを妨げたりしてはなりません。これによって禁止される行為には、たとえば、同じインテント パターンを処理する複数のアプリの中からユーザーが特定のアプリを選択することを許可する「選択的」ユーザー インターフェースを無効にすることが含まれますが、これに限定されません。

  • [C-0-3] デバイス実装は、ユーザーに対し、インテントのデフォルト アクティビティを変更するユーザー インターフェースを提供しなければなりません。

  • ただし、デバイス実装は、デフォルト アクティビティがより具体的な属性を提供する場合、具体的な URI パターン(例: http://play.google.com)用のデフォルト アクティビティを提供しても構いません。たとえば、データ URI「http://www.android.com」を指定するインテント フィルタ パターンは、「http://」に対するブラウザのコアインテント パターンよりも具体的です。

Android には、特定のウェブ URI インテントに対してサードパーティ アプリが正式なデフォルトのアプリリンク動作を宣言するメカニズムも含まれています。このような正式な宣言がアプリのインテント フィルタ パターンで定義されている場合、デバイス実装は:

  • [C-0-4] アップストリームの Android オープンソース プロジェクトのパッケージ マネージャーで実装される、デジタル アセット リンク仕様で規定されている検証手順を実施することで、インテント フィルタの検証を試行しなければなりません。
  • [C-0-5] アプリのインストール中にインテント フィルタの検証を試行し、検証に合格したすべての URI インテント フィルタを、その URI のデフォルト アプリハンドラとして設定しなければなりません。
  • 検証に合格したが、他の URI フィルタ候補が検証に不合格となった場合、具体的な URI インテント フィルタを URI のデフォルト アプリハンドラとして設定しても構いません。デバイス実装でこれを行う場合、設定メニューで、URI ごとの適切なパターン オーバーライドをユーザーに提供しなければなりません。
  • 次のように、設定でアプリごとのアプリリンク コントロールをユーザーに提供しなければなりません。
    • [C-0-6] ユーザーは、すべての URI インテント フィルタ候補に等しく適用しなければならない、デフォルトのアプリリンク動作(アプリを常に開く、常に確認する、開かない)を全体的にオーバーライドできなければなりません。
    • [C-0-7] ユーザーに、URI インテント フィルタ候補のリストが表示されなければなりません。
    • デバイス実装は、インテント フィルタごとに、検証に合格した具体的な URI インテント フィルタ候補をオーバーライドする機能をユーザーに提供しても構いません。
    • [C-0-8] デバイス実装で、ある URI インテント フィルタ候補が検証に合格し、他の候補が不合格になる可能性がある場合、デバイス実装は、特定の URI インテント フィルタ候補を表示しオーバーライドする機能をユーザーに提供しなければなりません。
3.2.3.3. インテントの名前空間
  • [C-0-1] デバイス実装は、android.* 名前空間または com.android.* 名前空間に、ACTION、CATEGORY、または他のキー文字列を使用して、新しいインテントまたはブロードキャスト インテント パターンを使用する Android コンポーネントを含んではなりません。
  • [C-0-2] デバイス実装者は、別の組織に属するパッケージ スペースに、ACTION、CATEGORY、または他のキー文字列を使用して、新しいインテントまたはブロードキャスト インテント パターンを使用する Android コンポーネントを含めてはなりません。
  • [C-0-3] デバイス実装者は、セクション 3.2.3.1 に記載されているインテント パターンのいずれも変更または拡張してはなりません。
  • デバイス実装は、組織に明確に関連付けられた名前空間を使用するインテント パターンを含んでも構いません。セクション 3.6 の Java 言語クラスに指定された制約と同様のものです。
3.2.3.4. ブロードキャスト インテント

サードパーティ アプリは、特定のインテントをブロードキャストしてハードウェアまたはソフトウェア環境の変更を通知する際、プラットフォームに依存します。

デバイス実装は:

  • [C-0-1] SDK ドキュメントに記載されているとおり、該当するシステム イベントに応じて、こちらに記載されているパブリック ブロードキャスト インテントをブロードキャストしなければなりません。なお、バックグラウンド アプリの制限も SDK ドキュメントに記載されているため、この要件はセクション 3.5 と競合しません。また、特定のブロードキャスト インテントはハードウェアのサポートを条件としており、必要なハードウェアをサポートしている場合、デバイスはインテントをブロードキャストし、SDK ドキュメントに沿った動作を提供しなければなりません。
3.2.3.5. 条件付きアプリ インテント

Android には、ホーム画面や SMS などのデフォルト アプリをユーザーが簡単に選択できるようにする設定があります。

そのような状態が合理的な場合、デバイス実装は、同様の設定メニューを提供しなければならず、SDK ドキュメントに記載されているインテント フィルタ パターンや API メソッドと下記のように互換性がなければなりません。

android.software.home_screen をレポートする場合、デバイス実装は:

  • [C-1-1] android.settings.HOME_SETTINGS インテントを使用して、ホーム画面用のデフォルトのアプリ設定メニューを表示しなければなりません。

android.hardware.telephony.calling をレポートする場合、デバイス実装は:

android.hardware.nfc.hce をレポートする場合、デバイス実装は:

  • [C-3-1] android.settings.NFC_PAYMENT_SETTINGS インテントを使用して、非接触型決済用のデフォルトのアプリ設定メニューを表示しなければなりません。
  • [C-3-2] SDK に記載されているとおり、android.nfc.cardemulation.action.ACTION_CHANGE_DEFAULT インテントを使用して、特定カテゴリのデフォルトのカード エミュレーション サービスの変更についてユーザーに確認するダイアログを開くアクティビティを表示しなければなりません。

android.hardware.nfc をレポートする場合、デバイス実装は:

android.hardware.bluetooth をレポートする場合、デバイス実装は:

DND 機能をサポートする場合、デバイス実装は:

  • [C-6-1] インテント ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS に応答するアクティビティを実装しなければなりません。UI_MODE_TYPE_NORMAL での実装の場合、これは DND ポリシー構成へのアプリアクセスをユーザーが許可または拒否できるアクティビティでなければなりません。

ユーザーがデバイスでサードパーティの入力方法を使用できるようにする場合、デバイス実装は:

  • [C-7-1] android.settings.INPUT_METHOD_SETTINGS インテントに応じてサードパーティの入力方法を追加、構成する、ユーザーがアクセス可能なメカニズムを提供しなければなりません。

サードパーティのユーザー補助サービスをサポートする場合、デバイス実装は:

  • [C-8-1] android.settings.ACCESSIBILITY_SETTINGS インテントを使用して、プリロードされたユーザー補助サービスとともにサードパーティのユーザー補助サービスの有効化と無効化を行う、ユーザーがアクセス可能なメカニズムを提供しなければなりません。

Wi-Fi Easy Connect のサポートが含まれ、その機能をサードパーティ アプリに公開する場合、デバイス実装は:

データセーバー モードを提供する場合、デバイス実装は:

  • [C-10-1] 設定に、Settings.ACTION_IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS インテントを処理するユーザー インターフェースを提供し、ユーザーがアプリを許可リストに追加したり、許可リストから削除したりできるようにしなければなりません。

データセーバー モードを提供しない場合、デバイス実装は:

android.hardware.camera.any を介してカメラのサポートを宣言する場合、デバイス実装は:

android.software.device_admin をレポートする場合、デバイス実装は:

android.software.autofill 機能フラグを宣言する場合、デバイス実装は:

プリインストール アプリが含まれるか、サードパーティ アプリによる使用統計情報へのアクセスを許可する場合、デバイス実装は:

  • [C-SR-2] android.permission.PACKAGE_USAGE_STATS 権限を宣言するアプリに対する android.settings.ACTION_USAGE_ACCESS_SETTINGS インテントに応じて、使用統計情報へのアクセス権を付与または取り消す、ユーザーがアクセス可能なメカニズムを提供することが強く推奨されます。

プリインストール アプリを含め、いかなるアプリに対しても使用統計情報へのアクセスを許可しないことを意図する場合、デバイス実装は:

  • [C-15-1] 引き続き android.settings.ACTION_USAGE_ACCESS_SETTINGS インテント パターンを処理するアクティビティを持たなければなりませんが、ユーザーがアクセスを拒否されたときと同等の動作をするように NoOps として実装しなければなりません。

設定内の AutofillService_passwordsActivity で指定されたアクティビティへのリンク、または同様のメカニズムを通じてユーザー パスワードへのリンクを表示する場合、デバイス実装は:

  • [C-16-1] インストール済みのすべての自動入力サービスについて、そのようなリンクを表示しなければなりません。

VoiceInteractionService をサポートし、この API を使用する複数のアプリが同時にインストールされている場合、デバイス実装は:

機能 android.hardware.audio.output をレポートする場合、デバイス実装は:

  • [C-SR-3] こちらの SDK に記載されているとおり、インテント android.intent.action.TTS_SERVICE、android.speech.tts.engine.INSTALL_TTS_DATA、android.speech.tts.engine.GET_SAMPLE_TEXT を使用し、これらのインテントに対するフルフィルメントを提供するアクティビティを持つことが強く推奨されます。

Android は、以前は Dreams と呼ばれていた、インタラクティブ スクリーンセーバーをサポートしています。スクリーン セーバーを使用すると、電源に接続されているデバイスがアイドル状態のとき、または卓上ホルダーにドッキングされているとき、ユーザーがアプリを操作できます。デバイス実装は:

  • スクリーン セーバーのサポートを含み、android.settings.DREAM_SETTINGS インテントに応じてユーザーがスクリーン セーバーを構成できる設定オプションを提供すべきです。

android.hardware.nfc.uicc または android.hardware.nfc.ese をレポートする場合、デバイス実装は:

3.2.4. セカンダリ / 複数ディスプレイでのアクティビティ

複数のディスプレイで通常の Android アクティビティを起動できるようにする場合、デバイス実装は:

  • [C-1-1] android.software.activities_on_secondary_displays 機能フラグを設定しなければなりません。
  • [C-1-2] プライマリ ディスプレイで動作するアクティビティと同様の API 互換性を保証しなければなりません。
  • [C-1-3] ActivityOptions.setLaunchDisplayId() API を介してターゲット ディスプレイを指定せずに新しいアクティビティが起動された場合、新しいアクティビティを起動したアクティビティと同じディスプレイに、新しいアクティビティを配置しなければなりません。
  • [C-1-4] Display.FLAG_PRIVATE フラグを指定したディスプレイが取り外された場合、すべてのアクティビティを破棄しなければなりません。
  • [C-1-5] アプリが Activity#setShowWhenLocked() API を使用してロック画面上に表示されるようにオプトインしない限り、デバイスがセキュアロック画面でロックされている場合、すべての画面のコンテンツを安全に非表示にしなければなりません。
  • セカンダリ ディスプレイでアクティビティが起動された場合に、表示、正しい動作、互換性が維持されるように、そのディスプレイに対応する android.content.res.Configuration を持つべきです。

セカンダリ ディスプレイで通常の Android アクティビティが起動できるようになっており、android.view.Display.FLAG_PRIVATE フラグが指定されている場合、デバイス実装は:

  • [C-3-1] そのディスプレイ、システム、そのディスプレイ上にすでにあるアクティビティの所有者のみが、起動できなければなりません。android.view.Display.FLAG_PUBLIC フラグが指定されているディスプレイは、誰でも起動できます。

3.3. ネイティブ API の互換性

ネイティブ コードの互換性は難しい問題です。そのため、デバイス実装者は:

  • [C-SR-1] アップストリームの Android オープンソース プロジェクトから、下記のライブラリの実装を使用することが強く推奨されます。

3.3.1. アプリケーション バイナリ インターフェース

Dalvik バイトコードによるマネージド実行環境では、アプリの .apk ファイルで提供されるネイティブ コードを、該当するデバイス ハードウェア アーキテクチャ向けにコンパイルされた ELF .so ファイルとして呼び出すことができます。ネイティブ コードは基となるプロセッサ技術に大きく依存するため、Android では、Android NDK に多数のアプリケーション バイナリ インターフェース(ABI)が定義されています。

デバイス実装は:

  • [C-0-1] 1 つ以上の定義済み Android NDK ABI と互換性がなければなりません。
  • [C-0-2] 標準の Java Native Interface(JNI)セマンティクスを使用して、ネイティブ コードを呼び出すためにマネージド環境で動作するコードのサポートを含まなければなりません。
  • [C-0-3] 下記のリストにある各必須ライブラリと、ソース互換(すなわちヘッダー互換)かつバイナリ互換(ABI 向け)でなければなりません。
  • [C-0-5] android.os.Build.SUPPORTED_ABISandroid.os.Build.SUPPORTED_32_BIT_ABISandroid.os.Build.SUPPORTED_64_BIT_ABIS のパラメータ(優先度の高い順にカンマ区切りになっている ABI のリスト)を介して、デバイスがサポートするネイティブ アプリケーション バイナリ インターフェース(ABI)を正確にレポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-0-6](2024 年 2 月 26 日プレビュー)

  • [C-0-6] 上記のパラメータを介して、次の ABI リストのサブセットをレポートしなければならず、リストにない ABI はレポートしてはなりません。

新しい要件の終了

  • [C-0-7] ネイティブ API を提供する次のすべてのライブラリを、ネイティブ コードを含むアプリで利用できるようにしなければなりません。

    • libaaudio.so(AAudio ネイティブ オーディオ サポート)
    • libamidi.so(ネイティブ MIDI サポート、機能 android.software.midi がセクション 5.9 の記載のとおりである場合)
    • libandroid.so(ネイティブ Android アクティビティ サポート)
    • libc(C ライブラリ)
    • libcamera2ndk.so
    • libdl(ダイナミック リンカー)
    • libEGL.so(ネイティブ OpenGL サーフェス管理)
    • libGLESv1_CM.so(OpenGL ES 1.x)
    • libGLESv2.so(OpenGL ES 2.0)
    • libGLESv3.so(OpenGL ES 3.x)
    • libicui18n.so
    • libicuuc.so
    • libjnigraphics.so
    • liblog(Android ロギング)
    • libmediandk.so(ネイティブ メディア API サポート)
    • libm(math ライブラリ)
    • libneuralnetworks.so(Neural Networks API)
    • libOpenMAXAL.so(OpenMAX AL 1.0.1 サポート)
    • libOpenSLES.so(OpenSL ES 1.0.1 オーディオ サポート)
    • libRS.so
    • libstdc++(C++ の最小限のサポート)
    • libvulkan.so(Vulkan)
    • libz(Zlib 圧縮)
    • JNI インターフェース
  • [C-0-8] 上のネイティブ ライブラリのパブリック関数を追加または削除してはなりません。

  • [C-0-9] /vendor/etc/public.libraries.txt でサードパーティ アプリに直接公開される AOSP 以外の追加のライブラリをリストしなければなりません。

  • [C-0-10] AOSP でシステム ライブラリとして実装され提供される他のネイティブ ライブラリを、API レベル 24 以降をターゲットとするサードパーティ アプリに公開してはなりません(予約されているため)。

  • [C-0-11] NDK で定義されているとおり、すべての OpenGL ES 3.1 と Android 拡張機能パックの関数シンボルを、libGLESv3.so ライブラリを介してエクスポートしなければなりません。なお、すべてのシンボルが存在しなければなりませんが、対応する関数それぞれの完全な実装が期待される場合の要件については、セクション 7.1.4.1 に詳しく記載しています。

  • [C-0-12] libvulkan.so ライブラリを通じて、主な Vulkan 1.1 関数シンボルと拡張機能 VK_KHR_surfaceVK_KHR_android_surfaceVK_KHR_swapchainVK_KHR_maintenance1VK_KHR_get_physical_device_properties2 の関数シンボルをエクスポートしなければなりません。なお、すべてのシンボルが存在しなければなりませんが、対応する関数それぞれの完全な実装が期待される場合の要件については、セクション 7.1.4.2 に詳しく記載しています。

  • アップストリームの Android オープンソース プロジェクトで入手可能なソースコードとヘッダー ファイルを使用してビルドすべきです。

なお、Android の今後のリリースで、追加の ABI のサポートが導入される可能性があります。

3.3.2. 32 ビット ARM ネイティブ コードの互換性

armeabi ABI のサポートをレポートする場合、デバイス実装は:

  • [C-3-1] armeabi は古いアプリとの下位互換性用でしかないため、armeabi-v7a もサポートし、そのサポートをレポートしなければなりません。

armeabi-v7a ABI のサポートをレポートする場合、この ABI を使用するアプリについて、デバイス実装は:

  • [C-2-1] /proc/cpuinfo に次の行を含まなければならず、他の ABI によって読み取られる場合であっても同じデバイスで値を変更すべきではありません。

    • Features: に続けて、デバイスでサポートされるオプションの ARMv7 CPU 機能のリスト。
    • CPU architecture: に続けて、デバイスでサポートされる最高の ARM アーキテクチャを示す整数(例: ARMv8 デバイスの場合は「8」)。
  • [C-2-2] ABI が ARMv8 アーキテクチャに実装されている場合であっても、ネイティブ CPU サポートを通じて、またはソフトウェア エミュレーションを通じて、常に次のオペレーションを利用できるように維持しなければなりません。

    • SWP 命令と SWPB 命令。
    • CP15ISB、CP15DSB、CP15DMB バリア オペレーション。
  • [C-2-3] Advanced SIMD(NEON)拡張のサポートを含まなければなりません。

3.4. ウェブの互換性

3.4.1. WebView の互換性

android.webkit.Webview API の完全な実装を提供する場合、デバイス実装は:

  • [C-1-1] android.software.webview をレポートしなければなりません。
  • [C-1-2] android.webkit.WebView API の実装に、Android 15 ブランチのアップストリームの Android オープンソース プロジェクトからビルドした Chromium プロジェクトを使用しなければなりません。
  • [C-1-3] WebView がレポートするユーザー エージェント文字列は、次の形式でなければなりません。

    Mozilla/5.0 (Linux; Android $(VERSION); [$(MODEL)] [Build/$(BUILD)]; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 $(CHROMIUM_VER) Mobile Safari/537.36

    • $(VERSION) 文字列の値は、android.os.Build.VERSION.RELEASE の値と同じでなければなりません。
    • $(MODEL) 文字列は空にしても構いませんが、空でない場合は、値が android.os.Build.MODEL と同じでなければなりません。
    • 「Build/$(BUILD)」は省略しても構いませんが、存在する場合、$(BUILD) 文字列は android.os.Build.ID の値と同じでなければなりません。
    • $(CHROMIUM_VER) 文字列の値は、アップストリームの Android オープンソース プロジェクトの Chromium バージョンでなければなりません。
    • デバイス実装は、ユーザー エージェント文字列で Mobile を省略しても構いません。
  • WebView コンポーネントは、可能な限り多くの HTML5 機能をサポートすべきであり、機能をサポートする場合、HTML5 仕様に準拠すべきです。

  • [C-1-4] WebView をインスタンス化するアプリとは異なるプロセスで、提供されたコンテンツまたはリモート URL コンテンツをレンダリングしなければなりません。具体的には、個別のレンダラ プロセスは、より低い権限を持ち、個別のユーザー ID として実行され、アプリのデータ ディレクトリへのアクセス権を持たず、直接ネットワーク アクセス権を持たず、Binder でシステム サービスへの必要最小限のアクセス権のみを持たなければなりません。WebView の AOSP 実装はこの要件を満たしています。

なお、デバイス実装が 32 ビットの場合、または機能フラグ android.hardware.ram.low を宣言する場合、C-1-3 は免除されます。

3.4.2. ブラウザの互換性

通常のウェブ ブラウジング用のスタンドアロン ブラウザアプリが含まれる場合、デバイス実装は:

  • [C-1-1] HTML5 に関連する次の API をそれぞれサポートしなければなりません。
  • [C-1-2] HTML5/W3C webstorage API をサポートしなければならず、HTML5/W3C IndexedDB API をサポートすべきです。なお、ウェブ開発標準化団体が webstorage よりも IndexedDB を優先するようになっているため、今後の Android バージョンでは、IndexedDB が必須コンポーネントになると見込まれます。
  • スタンドアロン ブラウザアプリでカスタムのユーザー エージェント文字列を送信しても構いません。
  • アップストリーム WebKit ブラウザアプリに基づくかサードパーティ代替アプリに基づくかにかかわらず、スタンドアロン ブラウザアプリで HTML5 のサポートを可能な限り多く実装すべきです。

ただし、スタンドアロン ブラウザアプリが含まれない場合、デバイス実装は:

  • [C-2-1] セクション 3.2.3.1 に記載されているとおり、パブリック インテント パターンを引き続きサポートしなければなりません。

3.5. API 動作の互換性

デバイス実装は:

  • [C-0-9] セクション 3.5.1 に記載されているように制限されている場合を除き、すべてのインストール済みアプリに API 動作の互換性が適用されるようにしなければなりません。
  • [C-0-10] デバイス実装者が選択したアプリに対してのみ API 動作の互換性を保証する許可リスト登録アプローチを実装してはなりません。

各 API タイプ(マネージド、ソフト、ネイティブ、ウェブ)の動作は、アップストリームの Android オープンソース プロジェクトの優先実装と一貫性がなければなりません。互換性の具体的な内容は次のとおりです。

  • [C-0-1] デバイスは、標準的なインテントの動作またはセマンティクスを変更してはなりません。
  • [C-0-2] デバイスは、特定の種類のシステム コンポーネント(Service、Activity、ContentProvider など)のライフサイクルまたはライフサイクル セマンティクスを変更してはなりません。
  • [C-0-3] デバイスは、標準的な権限のセマンティクスを変更してはなりません。
  • デバイスは、バックグラウンド アプリに適用される制限を変更してはなりません。より具体的には、バックグラウンド アプリについて:
    • [C-0-4] GnssMeasurementGnssNavigationMessage からの出力を受信するためにアプリが登録するコールバックの実行を停止しなければなりません。
    • [C-0-5] LocationManager API クラスまたは WifiManager.startScan() メソッドを通じてアプリに提供される更新の頻度をレート制限しなければなりません。
    • [C-0-6] アプリが API レベル 25 以降をターゲットとしている場合、ブロードキャスト インテントで "signature" または "signatureOrSystem" protectionLevel 権限を必要とするか、免除リストにある場合を除き、アプリのマニフェストで標準的な Android インテントの暗黙的ブロードキャストのためにブロードキャスト レシーバを登録することを許可してはなりません。
    • [C-0-7] アプリが API レベル 25 以降をターゲットとしている場合、ユーザーに表示されるタスクを処理するためにアプリが一時的に許可リスト登録されている場合を除き、アプリがサービスの stopSelf() メソッドを呼び出したときのように、アプリのバックグラウンド サービスを停止しなければなりません。
    • [C-0-8] アプリが API レベル 25 以降をターゲットとしている場合、アプリが保持しているウェイクロックをリリースしなければなりません。
  • [C-0-11] アプリが insertProviderAt() または removeProvider() を介してリストを変更した場合を除き、デバイスは Security.getProviders() メソッドの最初の 7 つの配列値として、指定した順序、名前(Provider.getName() で返されます)、クラスで、次のセキュリティ プロバイダを返さなければなりません。デバイスは、下記のプロバイダ指定リストの後に、追加のプロバイダを返しても構いません。
    1. AndroidNSSP - android.security.net.config.NetworkSecurityConfigProvider
    2. AndroidOpenSSL - com.android.org.conscrypt.OpenSSLProvider
    3. CertPathProvider - sun.security.provider.CertPathProvider
    4. AndroidKeyStoreBCWorkaround - android.security.keystore.AndroidKeyStoreBCWorkaroundProvider
    5. BC - com.android.org.bouncycastle.jce.provider.BouncyCastleProvider
    6. HarmonyJSSE - com.android.org.conscrypt.JSSEProvider
    7. AndroidKeyStore - android.security.keystore.AndroidKeyStoreProvider

上記のリストはすべてを網羅しているわけではありません。互換性テストスイート(CTS)は、動作の互換性についてプラットフォームの大部分をテストしますが、すべてではありません。Android オープンソース プロジェクトとの動作の互換性を確保することは、実装者の責任です。このため、デバイス実装者は、システムの重要な部分を再実装するのではなく、可能であれば Android オープンソース プロジェクトを介して入手可能なソースコードを使用すべきです。

3.5.1. アプリの制限

アプリを制限する独自のメカニズム(SDK に記載されている API の動作を変更または制限するなど)を実装していて、そのメカニズムが制限付きアプリ スタンバイ バケットより制限的である場合、デバイス実装は:

  • [C-1-1] 制限付きアプリのリストをユーザーが確認できるようにしなければなりません。
  • [C-1-2] アプリごとにこれらのすべての独自の制限をオン / オフするユーザー アフォーダンスを提供しなければなりません。
  • [C-1-3] システムの健全性に問題があることを示す証拠なしに、制限を自動的に適用してはなりません。ただし、ウェイクロックのスタック、サービスの長時間実行、その他の基準など、システムの健全性に問題があることを検出したときは、アプリに制限を適用しても構いません。基準はデバイス実装者が決定しても構いませんが、システムの健全性に対するアプリの影響に関連していなければなりません。アプリが市場で人気がないなど、システムの健全性に純粋に関係するわけではない他の基準は、基準として使用してはなりません。

  • [C-1-4] ユーザーがアプリの制限を手動でオフにした場合、アプリにこれらの独自の制限を自動的に適用してはなりません。これらの独自の制限を適用するようユーザーに提案することはできます。

  • [C-1-5] これらの独自の制限がアプリに自動的に適用される場合は、ユーザーに通知しなければなりません。このような通知は、これらの独自の制限が適用される 24 時間前までに提供しなければなりません。

  • [C-1-6] アプリからの API 呼び出しについては ActivityManager.isBackgroundRestricted() メソッドで true を返さなければなりません。

  • [C-1-7] ユーザーが明示的に使用しているトップ フォアグラウンド アプリを制限してはなりません。

  • [C-1-8] ユーザーが明示的にアプリの使用を開始する場合は常に、そのアプリがトップ フォアグラウンド アプリになるよう、アプリに対するこれらの独自の制限を停止しなければなりません。

  • [C-1-10] 独自の制限を適用する方法を説明する明確な公開ドキュメントまたはウェブサイトを提供しなければなりません。このドキュメントまたはウェブサイトは、Android SDK ドキュメントからリンクでき、以下を含まなければなりません。

    • 独自の制限についてのトリガー条件。
    • 制限できるアプリの種類と方法。
    • アプリに対しこのような制限を免除する方法。
    • ユーザーがインストールできるアプリの免除などがサポートされている場合に、アプリが独自の制限の適用免除をリクエストする方法。

アプリがデバイスにプリインストールされていて、30 日以上ユーザーが明示的に使用していない場合、[C-1-3]、[C-1-5] は適用されません。

AOSP で実装されるアプリ制限を拡張する場合、デバイス実装は:

  • [C-2-1] こちらのドキュメントに記載されている実装に従わなければなりません。

3.5.2. アプリの休止状態

AOSP に含まれるアプリの休止状態が含まれる場合、または AOSP に含まれる機能を拡張する場合、デバイス実装は:

  • [C-1-1] [C-1-6] と [C-1-3] を除き、セクション 3.5.1 のすべての要件を満たさなければなりません。
  • [C-1-2] ユーザーが一定期間アプリを使用していないという証拠がある場合にのみ、そのユーザーのアプリに対する制限を適用しなければなりません。この期間は 1 か月以上にすることが強く推奨されます。使用状況は、UsageStats#getLastTimeVisible() API を介した明示的なユーザー操作か、サービス バインディング、コンテンツ プロバイダ バインディング、明示的なブロードキャストなど、アプリが強制停止状態を脱する原因となる、なんらかのものによって定義しなければなりません(新しい API UsageStats#getLastTimeAnyComponentUsed() によってトラッキング)。
  • [C-1-3] パッケージがどのユーザーによっても一定期間使用されていないという証拠がある場合にのみ、すべてのデバイス ユーザーに影響する制限を適用しなければなりません。この期間は 1 か月以上にすることが強く推奨されます。
  • [C-1-4] アクティビティ インテント、サービス バインディング、コンテンツ プロバイダのリクエスト、または明示的なブロードキャストにアプリが応答できないようにしてはなりません。

AOSP のアプリの休止状態は、上記の要件を満たしています。

3.6. API 名前空間

Android は、Java プログラミング言語で定義されたパッケージとクラスの名前空間規則に従います。サードパーティ アプリとの互換性を確保するために、デバイス実装者は、次のパッケージ名前空間に対して禁止されている変更(下記参照)を行ってはなりません。

  • java.*
  • javax.*
  • sun.*
  • android.*
  • androidx.*
  • com.android.*

つまり:

  • [C-0-1] メソッド シグネチャかクラス シグネチャを変更することで、またはクラスかクラス フィールドを削除することで、Android プラットフォームで一般公開されている API を変更してはなりません。
  • [C-0-2] 一般公開されている要素(クラスまたはインターフェース、既存のクラスまたはインターフェースのフィールドまたはメソッドなど)やテスト API またはシステム API を、上記の名前空間の API に追加してはなりません。「一般公開されている要素」とは、アップストリームの Android ソースコードで使用されている「@hide」マーカーで装飾されていない構成要素のことです。

デバイス実装者は基となる API 実装を変更しても構いませんが、そのような変更は:

  • [C-0-3] 一般公開されている API の、所定の動作と Java 言語シグネチャに影響してはなりません。
  • [C-0-4] アドバタイズされたり、デベロッパーに公開されたりしてはなりません。

ただし、デバイス実装者は標準的な Android 名前空間の外にカスタム API を追加しても構いませんが、カスタム API は:

  • [C-0-5] 別の組織が所有または参照している名前空間にあってはなりません。たとえば、デバイス実装者は、com.google.* などの名前空間に API を追加してはなりません。これを行えるのは Google のみです。同様に、Google は他社の名前空間に API を追加してはなりません。
  • [C-0-6] そのような API のメモリ使用量増加の影響を受けるのが(<uses-library> メカニズムを介して)明示的に Android 共有ライブラリを使用するアプリのみになるように、Android 共有ライブラリにパッケージ化しなければなりません。

デバイス実装者は NDK API の外にネイティブ言語でカスタム API を追加しても構いませんが、そのカスタム API は:

  • [C-1-1] こちらに記載されているとおり、NDK ライブラリまたは別の組織が所有するライブラリにあってはなりません。

デバイス実装者が上記パッケージ名前空間のいずれかの改善(既存の API に便利な新機能を追加する、新しい API を追加するなど)を提案する場合、実装者は source.android.com にアクセスし、サイトに記載されている情報に従って、変更とコードに貢献するプロセスを開始すべきです。

なお、上記の制限は、Java プログラミング言語の標準的な API 命名規則に対応しています。このセクションは、この互換性定義に含めることでそれらの規則を補強し、拘束力を持たせることのみを目的としています。

3.7. ランタイムの互換性

デバイス実装は:

  • [C-0-1] 完全な Dalvik 実行ファイル(DEX)形式、Dalvik バイトコード仕様とセマンティクスをサポートしなければなりません。

  • [C-0-2] Dalvik ランタイムを構成して、アップストリーム Android プラットフォームに合わせて、下表に示すとおり、メモリを割り当てなければなりません(画面サイズと画面密度の定義については、セクション 7.1.1 をご覧ください)。

  • Dalvik 実行ファイル形式のリファレンス アップストリーム実装であり、リファレンス実装のパッケージ管理システムでもある Android ランタイム(ART)を使用すべきです。

  • ランタイムの安定性を確保するために、さまざまな実行モードとターゲット アーキテクチャでファズテストを行うべきです。Android オープンソース プロジェクトのウェブサイトで JFuzzDexFuzz をご覧ください。

なお、下記のメモリ値は最小値とみなされ、デバイス実装はアプリごとにより多くのメモリを割り当てても構いません。

画面レイアウト 画面密度 最小アプリメモリ
Android スマートウォッチ 120 dpi(ldpi) 32 MB
140 dpi(140dpi)
160 dpi(mdpi)
180 dpi(180dpi)
200 dpi(200dpi)
213 dpi(tvdpi)
220 dpi(220dpi) 36 MB
240 dpi(hdpi)
280 dpi(280dpi)
320 dpi(xhdpi) 48 MB
360 dpi(360dpi)
400 dpi(400dpi) 56 MB
420 dpi(420dpi) 64 MB
480 dpi(xxhdpi) 88 MB
560 dpi(560dpi) 112 MB
640 dpi(xxxhdpi) 154 MB
小 / 標準 120 dpi(ldpi) 32 MB
140 dpi(140dpi)
160 dpi(mdpi)
180 dpi(180dpi) 48 MB
200 dpi(200dpi)
213 dpi(tvdpi)
220 dpi(220dpi)
240 dpi(hdpi)
280 dpi(280dpi)
320 dpi(xhdpi) 80 MB
360 dpi(360dpi)
400 dpi(400dpi) 96 MB
420 dpi(420dpi) 112 MB
480 dpi(xxhdpi) 128 MB
560 dpi(560dpi) 192 MB
640 dpi(xxxhdpi) 256 MB
120 dpi(ldpi) 32 MB
140 dpi(140dpi) 48 MB
160 dpi(mdpi)
180 dpi(180dpi) 80 MB
200 dpi(200dpi)
213 dpi(tvdpi)
220 dpi(220dpi)
240 dpi(hdpi)
280 dpi(280dpi) 96 MB
320 dpi(xhdpi) 128 MB
360 dpi(360dpi) 160 MB
400 dpi(400dpi) 192 MB
420 dpi(420dpi) 228 MB
480 dpi(xxhdpi) 256 MB
560 dpi(560dpi) 384 MB
640 dpi(xxxhdpi) 512 MB
特大 120 dpi(ldpi) 48 MB
140 dpi(140dpi) 80 MB
160 dpi(mdpi)
180 dpi(180dpi) 96 MB
200 dpi(200dpi)
213 dpi(tvdpi)
220 dpi(220dpi)
240 dpi(hdpi)
280 dpi(280dpi) 144 MB
320 dpi(xhdpi) 192 MB
360 dpi(360dpi) 240 MB
400 dpi(400dpi) 288 MB
420 dpi(420dpi) 336 MB
480 dpi(xxhdpi) 384 MB
560 dpi(560dpi) 576 MB
640 dpi(xxxhdpi) 768 MB

3.8. ユーザー インターフェースの互換性

3.8.1. ランチャー(ホーム画面)

Android にはランチャー アプリ(ホーム画面)があり、デバイス ランチャー(ホーム画面)を置き換えるサードパーティ アプリをサポートしています。

サードパーティ アプリでデバイスのホーム画面を置き換えられるようにする場合、デバイス実装は:

  • [C-1-1] プラットフォーム機能 android.software.home_screen を宣言しなければなりません。
  • [C-1-2] サードパーティ アプリが <adaptive-icon> タグを使用してアイコンを提供し、アイコンを取得する PackageManager メソッドが呼び出された場合、AdaptiveIconDrawable オブジェクトを返さなければなりません。

ショートカットのアプリ内固定をサポートするデフォルト ランチャーが含まれる場合、デバイス実装は:

逆に、ショートカットのアプリ内固定をサポートしない場合、デバイス実装は:

ShortcutManager API を通じてサードパーティ アプリが提供する追加のショートカットへのクイック アクセスを提供するデフォルト ランチャーを実装する場合、デバイス実装は:

  • [C-4-1] 記載されたすべてのショートカット機能(静的ショートカット、動的ショートカット、固定ショートカットなど)をサポートし、ShortcutManager API クラスの API を完全に実装しなければなりません。

アプリアイコンのバッジを表示するデフォルト ランチャー アプリが含まれる場合、デバイス実装は:

  • [C-5-1] NotificationChannel.setShowBadge() API メソッドを尊重しなければなりません。つまり、値が true に設定されている場合はアプリアイコンに関連付けられたビジュアル アフォーダンスを表示し、アプリの通知チャンネルすべてで値が false に設定されている場合はアプリアイコンのバッジスキームを表示しません。
  • サードパーティ アプリが独自仕様の API を使用して独自仕様のバッジスキームをサポートすることを示している場合、アプリアイコン バッジを独自仕様のバッジスキームでオーバーライドしても構いません。ただし、Notification.Builder.setNumber() API や Notification.Builder.setBadgeIconType() API など、SDK に記載されている通知バッジ API を通じて提供されるリソースと値を使用すべきです。

デバイス実装がモノクロ アイコンをサポートする場合、モノクロ アイコンは:

  • [C-6-1] ユーザーが(設定アプリや壁紙選択ツールのメニューなどから)明示的に有効にした場合のみに使用しなければなりません。

3.8.2. ウィジェット

Android は、アプリが 「AppWidget」をエンドユーザーに公開できるようにするコンポーネント タイプとそれに対応する API、ライフサイクルを定義することで、サードパーティ アプリ ウィジェットをサポートします。

サードパーティ アプリ ウィジェットをサポートする場合、デバイス実装は:

  • [C-1-1] プラットフォーム機能 android.software.app_widgets のサポートを宣言しなければなりません。
  • [C-1-2] AppWidget の組み込みサポートを含まなければならず、AppWidget を追加、設定、表示、削除するユーザー インターフェース アフォーダンスを公開しなければなりません。
  • [C-1-3] 標準グリッドサイズで 4 x 4 のウィジェットをレンダリングできなければなりません。詳細については、Android SDK ドキュメントのアプリ ウィジェットのデザイン ガイドラインをご覧ください。
  • ロック画面でのアプリ ウィジェットをサポートしても構いません。

サードパーティ アプリ ウィジェットと、ショートカットのアプリ内固定をサポートする場合、デバイス実装は:

3.8.3. 通知

Android には Notification API と NotificationManager API があります。これを使用すると、サードパーティ アプリのデベロッパーは、デバイスのハードウェア コンポーネント(通知音、バイブレーション、ライトなど)とソフトウェア機能(通知シェード、システムバーなど)を使用して重要なイベントをユーザーに通知し、ユーザーの注意を引くことができます。

3.8.3.1. 通知の表示

サードパーティ アプリで重要なイベントをユーザーに通知できるようにする場合、デバイス実装は:

  • [C-1-1] SDK ドキュメントに記載されているとおり、デバイス実装ハードウェアで可能な範囲で、ハードウェア機能を使用する通知をサポートしなければなりません。たとえば、デバイス実装がバイブレーターを含む場合、バイブレーション API を正しく実装しなければなりません。デバイス実装にハードウェアがない場合、対応する API を NoOps として実装しなければなりません。この動作の詳細についてはセクション 7 をご覧ください。
  • [C-1-2] API、またはステータス / システムバーのアイコン スタイルガイドで提供されているすべてのリソース(アイコン、アニメーション ファイルなど)を正しくレンダリングしなければなりません。ただし、リファレンス Android オープンソース実装で提供されているものとは別のユーザー エクスペリエンスを通知で提供しても構いません。
  • [C-1-3] API について記述した動作を使用し、適切に実装して、通知を更新、削除、グループ化しなければなりません。
  • [C-1-4] SDK に記載されている NotificationChannel API のすべての動作を提供しなければなりません。
  • [C-1-5] チャンネルごと、アプリ パッケージ レベルごとに、特定のサードパーティ アプリの通知をブロック、変更するユーザー アフォーダンスを提供しなければなりません。
  • [C-1-6] 削除した通知チャンネルを表示するユーザー アフォーダンスも提供しなければなりません。
  • [C-1-7] 追加のユーザー操作なしで、Notification.MessagingStyle を通じて提供されるすべてのリソース(画像、ステッカー、アイコンなど)を、通知テキストとともに正しくレンダリングしなければなりません。たとえば、setGroupConversation を通じて設定されたグループの会話では、android.app.Person を通じて提供されたアイコンを含め、すべてのリソースを表示しなければなりません。

  • [C-SR-1] 通知リスナー権限が付与されたアプリに公開される通知をユーザーが制御するアフォーダンスを提供することが強く推奨されます。粒度は、そのような通知リスナーごとに、そのリスナーにブリッジされる通知タイプをユーザーが制御できるようなものでなければなりません。タイプには、「会話」、「アラート」、「サイレント」、「重要な進行中」の通知が含まれなければなりません。

  • [C-SR-2] ユーザーが特定の通知リスナーへの通知から除外するアプリを指定するアフォーダンスを提供することが強く推奨されます。

  • [C-SR-3] 特定のサードパーティ アプリの通知を、ユーザーがその通知を複数回閉じた後、チャンネルごと、アプリ パッケージ レベルごとにブロックするユーザー アフォーダンスを自動的に表示させることが強く推奨されます。

  • リッチ通知をサポートすべきです。

  • 一部の高優先度の通知をヘッドアップ通知として提示すべきです。

  • 通知をスヌーズするユーザー アフォーダンスがあるべきです。

  • ドライバーの注意散漫などの安全上の問題を軽減するために、サードパーティ アプリが重要なイベントをユーザーに通知できるタイミングと表示のみ、管理しても構いません。

Android 11 では、MessagingStyle を使用した、公開されている個人のショートカット ID を提供する通知である、会話通知のサポートが導入されています。

デバイス実装は:

  • [C-SR-4] 進行中のフォアグラウンド サービス通知と importance:high の通知を除き、会話以外の通知より前に conversation notifications をグループ化して表示することが強く推奨されます。

conversation notifications をサポートし、アプリが bubbles に必要なデータを提供する場合、デバイス実装は:

  • [C-SR-5] この会話をバブルとして表示することが強く推奨されます。AOSP 実装はデフォルトのシステム UI、設定、ランチャーで、この要件を満たしています。

リッチ通知をサポートする場合、デバイス実装は:

  • [C-2-1] Notification.Style API クラスとそのサブクラスを通じて提供されたとおりのリソースを、提示されたリソース要素に使用しなければなりません。
  • Notification.Style API クラスとそのサブクラスで定義された各リソース要素(アイコン、タイトル、概要テキストなど)をすべて提示すべきです。

ヘッドアップ通知とは、ユーザーがどの画面を表示しているかにかかわらず、着信時にユーザーに表示される通知です。ヘッドアップ通知をサポートする場合、デバイス実装は:

  • [C-3-1] ヘッドアップ通知を提示するとき、Notification.Builder API クラスに記載されているとおり、ヘッドアップ通知ビューとリソースを使用しなければなりません。
  • [C-3-2] SDK に記載されているとおり、追加のユーザー操作なしで、Notification.Builder.addAction() を通じて提供されるアクションを通知コンテンツとともに表示しなければなりません。
3.8.3.2. 通知リスナー サービス

Android には、NotificationListenerService API があります。これにより、アプリは通知がポストされたか更新されたときに、全通知のコピーを受け取ることができます(ユーザーが明示的に有効にした場合)。

デバイス実装は:

  • [C-0-1] 通知オブジェクトにアタッチされているすべてのメタデータを含め、インストールされていてユーザーが有効にしたすべてのリスナー サービスで、通知全体を正確かつ迅速に更新しなければなりません。
  • [C-0-2] snoozeNotification() API 呼び出しを尊重し、通知を閉じ、API 呼び出しに設定されたスヌーズ継続時間後にコールバックを行わなければなりません。

通知をスヌーズするユーザー アフォーダンスがある場合、デバイス実装は:

  • [C-1-1] NotificationListenerService.getSnoozedNotifications() などの標準 API を通じて、スヌーズされた通知ステータスを適切に反映しなければなりません。
  • [C-1-2] 永続 / フォアグラウンド サービスからのものでない限り、このユーザー アフォーダンスを、インストールされている各サードパーティー アプリからの通知をスヌーズするために利用できるようにしなければなりません。
3.8.3.3. DND(サイレント モード)/ 優先モード

DND 機能(優先モードともいいます)をサポートする場合、デバイス実装は:

  • [C-1-1] サードパーティ アプリに対して DND ポリシー構成へのアクセスを許可または拒否する手段をデバイス実装がユーザーに提供した場合、ユーザーが作成した事前定義済みルールとともに、アプリが作成した自動 DND ルールを表示しなければなりません。
  • [C-1-3] NotificationManager.Policy に沿って渡された suppressedVisualEffects 値を使用しなければならず、アプリが SUPPRESSED_EFFECT_SCREEN_OFF フラグまたは SUPPRESSED_EFFECT_SCREEN_ON フラグのいずれかを設定している場合、DND 設定メニューで視覚効果が抑制されていることをユーザーに示すべきです。

15(AOSP 試験運用版)の新しい要件の開始

3.8.3.4. プライベート通知保護

[3.8.3.4 プライベート通知保護](2024 年 4 月 8 日プレビュー)

デバイス実装は:

  • [C-1-1] リスナー サービスが次の場合を除き、通知コンテンツから通知リスナーへの機密情報を削除する通知アシスタント サービス(NAS)を含めなければなりません。

    • 10,000 未満の uid を含むシステム署名済みアプリ
    • システム UI
    • シェル
    • 指定されたコンパニオン デバイス アプリ(CompanionDeviceManager が定義)
    • SYSTEM_AUTOMOTIVE_PROJECTION ロール
    • SYSTEM_NOTIFICATION_INTELLIGENCE ロール
    • HOME ロール

ExtService に含まれる NotificationAssistantServices の AOSP 実装はこの要件を満たしています。

新しい要件の終了

[3.8.3.4 プライベート通知保護](2024 年 2 月 26 日プレビュー)

デバイス実装は:

  • [C-1-1] サービスが次の場合を除き、通知コンテンツから通知リスナーへの機密情報を削除する通知アシスタント サービス(NAS)を含めなければなりません。

    • 10,000 未満の uid を含むシステム署名済みアプリ
    • SysUI
    • シェル
    • 指定されたコンパニオン デバイス アプリ(CompanionDeviceManager が定義)
    • SYSTEM_AUTOMOTIVE_PROJECTION ロール
    • SYSTEM_NOTIFICATION_INTELLIGENCE ロール
    • HOME ロール

ExtService に含まれる NotificationAssistantServices の AOSP 実装はこの要件を満たしています。

新しい要件の終了

[3.8.3.4 プライベート通知保護](2024 年 2 月 5 日プレビュー)

デバイス実装は:

  • [C-1-1] 通知コンテンツから通知リスナーへの機密情報を削除する通知アシスタント サービス(NAS)を含めなければなりません。また、サービスが次の場合を除き、免除されていない通知リスナーに機密情報を送信してはなりません。

    • SysUI とシステム サーバー アプリ
    • シェル
    • 指定されたコンパニオン デバイス アプリ(CompanionDeviceManager API によって決定される)
    • SYSTEM_AUTOMOTIVE_PROJECTION ロール
    • SYSTEM_NOTIFICATION_INTELLIGENCE ロール
    • 処理中の通知が、特定の NLS と同じパッケージから送信された
    • HOME ロール

ExtService に含まれる NotificationAssistantServices の AOSP 実装はこの要件を満たしています。

新しい要件の終了

3.8.4. Assist API

Android には、現在のコンテキストの情報をデバイスのアシスタントとどの程度共有するかをアプリが選択できるようにする Assist API が用意されています。

アシスト アクションをサポートする場合、デバイス実装は:

  • [C-2-1] コンテキストが共有される際、次のいずれかによって、エンドユーザーに対し明確に示さなければなりません。
    • アシストアプリがコンテキストにアクセスするたびに、Android オープンソース プロジェクト実装での継続時間、明るさと同等以上の白色光を、画面の端に表示する。
    • プリインストールのアシストアプリでは、デフォルトのオーディオ入力とアシスタント アプリの設定メニューから 2 操作未満でユーザー アフォーダンスを提供し、起動ワードまたはアシスト ナビゲーション キー入力を通じてアシストアプリがユーザーによって明示的に起動された場合にのみコンテキストを共有する。
  • [C-2-2] セクション 7.2.3 に記載されている、アシストアプリを起動する指定操作は、ユーザーが選択したアシストアプリ、つまり VoiceInteractionService を実装したアプリまたは ACTION_ASSIST インテントを処理するアクティビティを起動しなければなりません。

3.8.5. アラートとトースト

アプリは Toast API を使用して、エンドユーザーに対し、短時間で消える短い非モーダル文字列を表示できます。また、TYPE_APPLICATION_OVERLAY ウィンドウ タイプ API を使用して、他のアプリに重ねてアラート ウィンドウを表示できます。

画面または動画出力が含まれる場合、デバイス実装は:

  • [C-1-1] TYPE_APPLICATION_OVERLAY を使用するアラート ウィンドウをアプリが表示しないようにブロックするユーザー アフォーダンスを提供しなければなりません。AOSP 実装は通知シェードにコントロールがあることで、この要件を満たしています。

  • [C-1-2] Toast API を使用し、アプリからエンドユーザーへのトーストを、なんらかの目立つ方法で表示しなければなりません。

3.8.6. テーマ

Android は、アプリがアクティビティまたはアプリ全体にスタイルを適用するためのメカニズムとして、「テーマ」を提供しています。

Android には、アプリ デベロッパーが Android SDK で定義された Holo テーマのデザインにマッチさせる場合に使用する定義済みスタイルのセットとして、「Holo」と「Material」があります。

画面または動画出力が含まれる場合、デバイス実装は:

  • [C-1-1] アプリに公開されているいずれの Holo テーマ属性も変更してはなりません。
  • [C-1-2] 「Material」テーマ ファミリーをサポートしなければならず、アプリに公開される Material テーマ属性またはそのアセットのいずれについても変更してはなりません。
  • [C-1-3] Roboto がサポートしている言語について「sans-serif」フォント ファミリーを Roboto バージョン 2.x に設定しなければなりません。または、Roboto がサポートしている言語について「sans-serif」フォント ファミリーに使用するフォントを Roboto バージョン 2.x に変更するユーザー アフォーダンスを提供しなければなりません。

  • [C-1-4] Settings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES の AOSP ドキュメント(android.theme.customization.system_paletteandroid.theme.customization.theme_style を参照)で指定されているとおりに、動的な色調パレットを生成しなければなりません。

  • [C-1-5] Settings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES ドキュメント(android.theme.customization.theme_styles を参照)に記載されているカラーテーマ スタイル(TONAL_SPOTVIBRANTEXPRESSIVESPRITZRAINBOWFRUIT_SALADMONOCHROMATIC)を使用して、動的な色調パレットを生成しなければなりません。

    「ソースカラー」は、Settings.THEME_CUSTOMIZATION_OVERLAY_PACKAGES に記載されているとおり、android.theme.customization.system_palette で送信されるときに動的な色調パレットを生成するために使用されます。

  • [C-1-6] CAM16 彩度の値が 5 以上でなければなりません。

    • com.android.systemui.monet.ColorScheme#getSeedColors を介して壁紙から取得すべきです。これにより、複数の有効なソースカラーが提供され、そこから色を選択できます。

    • 提供された色のいずれも上記のソースカラーの要件を満たしていない場合、値 0xFF1B6EF3 を使用すべきです。

Android には、アプリ デベロッパーがデバイス実装者によって定義されたデバイステーマのデザインにマッチさせる場合に使用する定義済みスタイルのセットとして、「デバイスのデフォルト」のテーマ ファミリーも用意されています。

Android は、異なる形のテーマとして、半透明のシステムバーを使用したテーマをサポートしています。これにより、アプリ デベロッパーは、ステータスバーとナビゲーション バーの背後のエリア全体にアプリ コンテンツを表示することができます。この構成でデベロッパー エクスペリエンスに一貫性を持たせるには、さまざまなデバイス実装でステータスバーのアイコン スタイルを維持することが重要です。

システム ステータスバーが含まれる場合、デバイス実装は:

  • [C-2-1] アイコンが問題のあるステータスを示すか、アプリが WindowInsetsController#APPEARANCE_LIGHT_STATUS_BARS フラグを使用してライト ステータスバーをリクエストする場合を除き、システム ステータス アイコン(信号強度やバッテリー残量など)と、システムが発行する通知には、白色を使用しなければなりません。
  • [C-2-2] Android デバイス実装は、アプリがライト ステータスバーをリクエストしたら、システム ステータス アイコンを黒色に変更しなければなりません(詳細については R.style をご覧ください)。

3.8.7. ライブ壁紙

Android では、アプリがエンドユーザーに 1 つ以上の 「ライブ壁紙」を公開できるようにするためのコンポーネント タイプとそれに対応する API、ライフサイクルを定義しています。ライブ壁紙とは、壁紙として他のアプリの背後に表示される、アニメーション、パターン、または入力機能が制限された同様の画像のことです。

ハードウェアは、他のアプリに悪影響を及ぼさず、妥当なフレームレートで、機能に制限なくすべてのライブ壁紙を実行できる場合、ライブ壁紙を確実に実行できるとみなされます。ハードウェアの制限によって、壁紙やアプリがクラッシュする、誤動作する、CPU やバッテリー電力を過剰に使用する、または許容できない低フレームレートで実行される場合、ハードウェアはライブ壁紙を実行できないとみなされます。たとえば、一部のライブ壁紙は、OpenGL 2.0 または 3.x コンテキストを使用してコンテンツをレンダリングすることがあります。複数の OpenGL コンテキストをサポートしていないハードウェアでは、OpenGL コンテキストを使用するライブ壁紙が、OpenGL コンテキストを使用する他のアプリと競合する可能性があるため、ライブ壁紙を確実には実行できません。

  • 上記のようにライブ壁紙を確実に実行できるデバイス実装は、ライブ壁紙を実装すべきです。

ライブ壁紙を実装する場合、デバイス実装は:

  • [C-1-1] プラットフォーム機能フラグ android.software.live_wallpaper をレポートしなければなりません。

3.8.8. アクティビティの切り替え

アップストリームの Android ソースコードには、概要画面が含まれます。これは、タスクの切り替えのためのシステムレベルのユーザー インターフェースです。ユーザーが最後にアプリを離れたときのアプリのグラフィック状態のサムネイル画像を使用して、最近アクセスしたアクティビティやタスクを表示することにも使われます。

セクション 7.2.3 で詳述するように、履歴機能のナビゲーション キーを含むデバイス実装は、インターフェースを変更しても構いません。

セクション 7.2.3 で詳述するように、履歴機能のナビゲーション キーが含まれ、インターフェースを変更する場合、デバイス実装は:

  • [C-1-1] 少なくとも 7 つまでのアクティビティ表示をサポートしなければなりません。
  • 少なくとも同時に 4 つのアクティビティのタイトルを表示すべきです。
  • ハイライトの色、アイコン、最近の画面タイトルを表示すべきです。
  • 閉じるアフォーダンス(「x」)を表示すべきですが、ユーザーが画面を操作するまで遅らせても構いません。
  • 以前のアクティビティに切り替えやすくするためのショートカットを実装すべきです。
  • 履歴機能のキーが 2 回タップされたとき、直近に使用した 2 つのアプリを素早く切り替えるアクションをトリガーすべきです。
  • 履歴機能のキーが長押しされたとき、分割画面のマルチウィンドウ モードをトリガーすべきです(サポートしている場合)。
  • 一緒に移動するグループとして関連する履歴を表示しても構いません。
  • [C-SR-1] 概要画面には、アップストリームの Android ユーザー インターフェース(またはサムネイルベースの同様のインターフェース)を使用することが強く推奨されます。

3.8.9. 入力管理

Android は、入力管理と、サードパーティのインプット メソッド エディタをサポートしています。

ユーザーがデバイスでサードパーティの入力方法を使用できるようにする場合、デバイス実装は:

  • [C-1-1] Android SDK ドキュメントで定義されているとおり、プラットフォーム機能 android.software.input_methods を宣言し、IME API をサポートしなければなりません。

3.8.10. ロック画面のメディア コントロール

Remote Control Client API のサポートは Android 5.0 で終了し、ロック画面に表示される再生コントロールとメディアアプリを統合できるメディア通知テンプレートに置き換えられました。

3.8.11. スクリーン セーバー(旧 Dreams)

スクリーン セーバーを構成するための設定についてはセクション 3.2.3.5 をご覧ください。

3.8.12. 位置情報

位置座標を提供できるハードウェア センサー(GPS など)が含まれる場合、デバイス実装は:

3.8.13. Unicode とフォント

Android は、Unicode 10.0 で定義されている絵文字をサポートしています。

画面または動画出力が含まれる場合、デバイス実装は:

  • [C-1-1] こうした絵文字をカラーグリフでレンダリングできなければなりません。
  • [C-1-2] 次のサポートを含まなければなりません。
    • ウェイトの異なる Roboto 2 フォント - デバイスで利用可能な言語の sans-serif-thin、sans-serif-light、sans-serif-medium、sans-serif-black、sans-serif-condensed、sans-serif-condensed-light。
    • ラテン文字拡張 A、B、C、D を含むラテン文字、ギリシャ文字、キリル文字の Unicode 7.0 全範囲、Unicode 7.0 の通貨記号ブロックのグリフすべて。
  • [C-1-3] システム イメージ内の NotoColorEmoji.tff を削除または変更してはなりません(新しい絵文字フォントを追加して NotoColorEmoji.tff の絵文字をオーバーライドすることは可能です)。
  • Unicode Technical Report #51 で規定されているとおり、肌の色と多様な家族の絵文字をサポートすべきです。

IME が含まれる場合、デバイス実装は:

  • これらの絵文字の入力方法をユーザーに提供すべきです。

Android は、ミャンマー フォントのレンダリングをサポートしています。ミャンマーには、ミャンマー語をレンダリングするための Unicode 非準拠のフォントがいくつかあります(一般に「Zawgyi」と呼ばれます)。

ビルマ語のサポートが含まれる場合、デバイス実装は:

  • [C-2-1] デフォルトでは、Unicode 準拠のフォントでテキストをレンダリングしなければなりません。ユーザーが言語選択ツールで選択した場合を除き、Unicode 非準拠のフォントをデフォルト フォントとして設定してはなりません。
  • [C-2-2] デバイスで Unicode 非準拠のフォントがサポートされている場合は、Unicode フォントと Unicode 非準拠のフォントをサポートしなければなりません。Unicode 非準拠のフォントで、Unicode フォントを削除または上書きしてはなりません。
  • [C-2-3] Unicode 非準拠のフォントでテキストをレンダリングしなければならないのは、スクリプト コード Qaag を使用する言語コード(my-Qaag など)が指定されている場合のみです。それ以外の ISO 言語または地域コード(割り当て済みか、未割り当てか、予約済みかを問わず)は、ミャンマー語の Unicode 非準拠フォントを参照するために使用することはできません。アプリ デベロッパーとウェブページ作成者は、他の言語の場合と同じように、指定の言語コードとして my-Qaag を指定できます。

3.8.14. マルチウィンドウ

複数のアクティビティを同時に表示する機能がある場合、デバイス実装は:

  • [C-1-1] Android SDK のマルチウィンドウ モードのサポートに関するドキュメントに記載されているアプリの動作と API に従ってマルチ ウィンドウ モードを実装し、下記の要件を満たさなければなりません。
  • [C-1-2] こちらの SDK に記載されているとおり、AndroidManifest.xml ファイル内の、アプリによって設定された android:resizeableActivity を使用しなければなりません。
  • [C-1-3] 画面の高さが 440 dp 未満、画面の幅が 440 dp 未満の場合、分割画面モードまたはフリーフォーム モードを提供してはなりません。
  • [C-1-4] ピクチャー イン ピクチャー以外のマルチウィンドウ モードで、アクティビティを 220dp 未満にサイズ変更してはなりません。
  • 画面サイズが xlarge のデバイス実装は、フリーフォーム モードをサポートすべきです。

マルチウィンドウ モードと分割画面モードをサポートする場合、デバイス実装は:

  • [C-2-2] 分割画面マルチウィンドウの固定されたアクティビティを切り抜かなければなりませんが、ランチャー アプリがフォーカスされたウィンドウの場合、コンテンツの一部を表示すべきです。
  • [C-2-3] サードパーティ ランチャー アプリの宣言された AndroidManifestLayout_minWidth 値と AndroidManifestLayout_minHeight 値を使用しなければならず、固定されたアクティビティの一部のコンテンツを表示する過程でこれらの値をオーバーライドしてはなりません。

マルチウィンドウ モードとピクチャー イン ピクチャー マルチウィンドウ モードをサポートする場合、デバイス実装は:

  • [C-3-1] アプリが次の場合、アクティビティをピクチャー イン ピクチャー マルチウィンドウ モードで起動しなければなりません: * API レベル 26 以降をターゲットとし、android:supportsPictureInPicture を宣言する場合、* API レベル 25 以前をターゲットとし、android:resizeableActivityandroid:supportsPictureInPicture の両方を宣言する場合。
  • [C-3-2] setActions() API を通じて現在の PIP アクティビティで指定されている SystemUI のアクションを公開しなければなりません。
  • [C-3-3] setAspectRatio() API を通じて PIP アクティビティで指定されているとおり、1:2.39 以上 2.39:1 以下のアスペクト比をサポートしなければなりません。
  • [C-3-4] KeyEvent.KEYCODE_WINDOW を使用して PIP ウィンドウをコントロールしなければなりません。PIP モードが実装されていない場合は、キーがフォアグラウンド アクティビティで利用可能でなければなりません。
  • [C-3-5] アプリが PIP モードで表示されないようにブロックするユーザー アフォーダンスを提供しなければなりません。AOSP 実装は通知シェードにコントロールがあることで、この要件を満たしています。
  • [C-3-6] アプリが AndroidManifestLayout_minWidthAndroidManifestLayout_minHeight の値を宣言しない場合、次に示す PIP ウィンドウの最小の幅と高さを割り当てなければなりません。

    • Configuration.uiMode が UI_MODE_TYPE_TELEVISION 以外に設定されたデバイスは、最小の幅と高さ 108 dp を割り当てなければなりません。
    • Configuration.uiMode が UI_MODE_TYPE_TELEVISION に設定されたデバイスは、最小の幅 240 dp、最小の高さ 135 dp を割り当てなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-4-1 and C-5-1](2024 年 5 月 29 日プレビュー)

1 つ以上の Android 互換ディスプレイ領域を含み、そうした領域をアプリで利用できるようにする場合、デバイス実装は:

  • [C-4-1] マルチ ウィンドウ モードをサポートしなければなりません。

マルチ ウィンドウ モードをサポートするデバイス実装は:

  • [C-5-1] WindowManager Extensions に記載されているとおりに、正しいバージョンの Window Manager Extensions API レベルを実装しなければなりません。

新しい要件の終了

[C-4-1 と C-5-1](2024 年 2 月 5 日プレビュー)

1 つ以上の折りたたみ式の Android 互換ディスプレイ領域が含まれるか、複数の Android 互換ディスプレイ領域間の折りたたみヒンジが含まれ、そうした領域をアプリで利用できるようにする場合、デバイス実装は:

  • [C-4-1] マルチ ウィンドウ モードをサポートしなければなりません。

マルチ ウィンドウ モードをサポートする場合、デバイス実装は:

  • [C-5-1] WindowManager Extensions に記載されているとおりに、正しいバージョンの Window Manager Extensions API レベルを実装しなければなりません。

新しい要件の終了

3.8.15. ディスプレイ カットアウト

Android は、SDK ドキュメントに記載されているとおり、ディスプレイ カットアウトをサポートしています。DisplayCutout API は、縁のディスプレイ カットアウトまたは曲面ディスプレイのためにアプリで機能しないことがある、ディスプレイの縁のエリアを定義します。

ディスプレイ カットアウトが含まれる場合、デバイス実装は:

  • [C-1-5] デバイスのアスペクト比が 1.0(1:1)の場合、カットアウトがあってはなりません。
  • [C-1-2] 縁 1 つにつきカットアウトが 1 つを超えてはなりません。
  • [C-1-3] SDK に記載されているとおり、WindowManager.LayoutParams API を通じてアプリが設定したディスプレイ カットアウト フラグを使用しなければなりません。
  • [C-1-4] DisplayCutout API で定義されたすべてのカットアウト指標について正しい値をレポートしなければなりません。

3.8.16. デバイス コントロール

Android には、サードパーティ アプリがユーザーにクイック ステータスとアクションのデバイス コントロールを公開できる、ControlsProviderService API と Control API があります。

デバイス固有の要件についてはセクション 2_2_3 をご覧ください。

3.8.17. クリップボード

デバイス実装は:

  • [C-0-1] 9.8.6 コンテンツ キャプチャとアプリ検索に記載されているサービスを除き、ユーザーによる明示的な操作(オーバーレイのボタンを押すなど)なしに、コンポーネント、アクティビティ、サービスに対して、またはネットワーク接続を介して、クリップボード データを送信してはなりません。

ClipData.getDescription().getExtras()android.content.extra.IS_SENSITIVE を含むいずれかの ClipData アイテムのクリップボードに、コンテンツがコピーされたときにユーザーに表示されるプレビューを生成する場合、デバイス実装は:

  • [C-1-1] ユーザーに表示されるプレビューを編集しなければなりません。

AOSP リファレンス実装は、これらのクリップボードの要件を満たしています。

15(AOSP 試験運用版)の新しい要件の開始

3.8.18. ローカライズと言語の選択 [撤回]

3.8.18 [撤回](2024 年 4 月 8 日プレビュー)

この要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

3.8.18(2024 年 2 月 5 日プレビュー)

複数の地域と言語をサポートする場合、デバイス実装は:

新しい要件の終了

3.9. デバイス管理

15(AOSP 試験運用版)の新しい要件の開始

[3.9/C-1-1 および C-1-2](2024 年 2 月 26 日プレビュー)

Android には、Android Device Administration API Device Policy Manager API を通じて、セキュリティ対応アプリ Device Policy Controller アプリがシステムレベルでデバイス管理機能(パスワード ポリシーの適用、リモートワイプの実施など)を実行できる機能があります。

Android SDK ドキュメントで規定されているすべてのデバイス管理ポリシーを実装する場合、デバイス実装は:

  • [C-1-1] android.software.device_admin を宣言しなければなりません。
  • [C-1-2] セクション 3.9.1セクション 3.9.1.1 に記載されているとおり、デバイス所有者のプロビジョニングをサポートしなければなりません。

新しい要件の終了

3.9.1. デバイスのプロビジョニング

3.9.1.1. デバイス所有者のプロビジョニング

android.software.device_admin を宣言する場合、デバイス実装は:

  • [C-1-1] 下記のとおり、デバイス所有者アプリとしてのデバイス ポリシー クライアント(DPC)の登録をサポートしなければなりません。
    • ユーザーもユーザーデータも設定されていない場合、デバイス実装は:
      • [C-1-5] デバイスが機能フラグ android.hardware.nfc を介して近距離無線通信(NFC)のサポートを宣言していて、MIME タイプ MIME_TYPE_PROVISIONING_NFC のレコードを含む NFC メッセージを受信する場合は、DPC アプリをデバイス所有者アプリとして登録するか、DPC アプリがデバイス所有者とプロファイル所有者のどちらになるかを選択できるようにしなければなりません。
      • [C-1-8] android.app.extra.PROVISIONING_ALLOWED_PROVISIONING_MODES の値に応じて DPC アプリがデバイス所有者とプロファイル所有者のどちらになるかを選択できるように、デバイス所有者のプロビジョニングがトリガーされた後、ACTION_GET_PROVISIONING_MODE インテントを送信しなければなりません。ただし、有効なオプションが 1 つしかないことがコンテキストから判断できる場合を除きます。
      • [C-1-9] 使用するプロビジョニング方法にかかわらず、プロビジョニング中にデバイス所有者が確定したら、デバイス所有者アプリに ACTION_ADMIN_POLICY_COMPLIANCE インテントを送信しなければなりません。デバイス所有者アプリが終了するまで、ユーザーが設定ウィザードを続行できてはなりません。
    • ユーザーまたはユーザーデータがある場合、デバイス実装は:
      • [C-1-7] これ以上、DPC アプリをデバイス所有者アプリとして登録してはなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-2 から C-2-3](2024 年 2 月 26 日プレビュー)

  • [C-1-2] 適切な開示通知(AOSP で参照)を示し、アプリがデバイス所有者として設定される前に、エンドユーザーから明示的な同意を得なければなりません。ただし、エンドユーザーによる画面操作の前に、デバイスがプログラムによって販売店デモモードに設定されている場合を除きます。android.software.device_admin を宣言するだけでなく、独自のデバイス管理ソリューションも含んでいて、そのソリューションで「デバイス所有者相当」として構成されたアプリを、標準の Android DevicePolicyManager API によって認識される標準の「デバイス所有者」に昇格させるメカニズムを提供する場合、デバイス実装は:

  • [C-2-1] 昇格された特定のアプリが正当な企業デバイス管理ソリューションに属し、独自のソリューションにより「デバイス所有者」と同等の権限を持つように構成されていることを検証するためのプロセスが定められていなければなりません。

  • [C-2-2] DPC アプリを「デバイス所有者」として登録する前に、android.app.action.PROVISION_MANAGED_DEVICE で開始されるフローと同じ AOSP デバイス所有者同意開示を示さなければなりません。

  • [C-2-3] 同意をハードコードしたり、他のデバイス所有者アプリの使用を妨げたりしてはなりません。

新しい要件の終了

3.9.1.2. 管理対象プロファイルのプロビジョニング

android.software.managed_users を宣言する場合、デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[C-1-2](2024 年 2 月 26 日プレビュー)

  • [C-1-2] 管理対象プロファイルのプロビジョニング プロセス(android.app.action.PROVISION_MANAGED_PROFILE を使用して DPC によって開始されるフロー)、同意画面、ユーザー エクスペリエンスは、AOSP 実装に合わせなければなりません。

新しい要件の終了

  • [C-1-3] 特定のシステム機能が Device Policy Controller(DPC)によって無効にされたことをユーザーに示すために、設定内で次のユーザー アフォーダンスを提供しなければなりません。

    • 特定の設定がデバイス管理者によって制限されている場合に表示される、一貫したアイコンまたはその他のユーザー アフォーダンス(たとえば、アップストリームの AOSP の情報アイコン)。
    • setShortSupportMessage を介してデバイス管理者によって提供される、短い説明メッセージ。
    • DPC アプリのアイコン。
  • [C-1-4] android.app.action.PROVISION_MANAGED_PROFILE インテントによってプロビジョニングが開始されたときにプロファイル所有者が確定し、DPC がハンドラを実装していれば、ACTION_PROVISIONING_SUCCESSFUL インテントのハンドラを起動しなければなりません。

  • [C-1-5] android.app.action.PROVISION_MANAGED_PROFILE インテントによってプロビジョニングが開始されたら、ACTION_PROFILE_PROVISIONING_COMPLETE ブロードキャストを仕事用プロファイル DPC に送信しなければなりません。

  • [C-1-6] DPC アプリがデバイス所有者とプロファイル所有者のどちらになるか選択できるように、プロファイル所有者のプロビジョニングがトリガーされた後、ACTION_GET_PROVISIONING_MODE インテントを送信しなければなりません。ただし、インテント android.app.action.PROVISION_MANAGED_PROFILE によってプロビジョニングがトリガーされた場合を除きます。

  • [C-1-7] 使用するプロビジョニング方法にかかわらず、プロビジョニング中にプロファイル所有者が確定したら、ACTION_ADMIN_POLICY_COMPLIANCE インテントを仕事用プロファイルに送信しなければなりません。ただし、インテント android.app.action.PROVISION_MANAGED_PROFILE によってプロビジョニングがトリガーされた場合を除きます。プロファイル所有者アプリが終了するまで、ユーザーが設定ウィザードを続行できてはなりません。

  • [C-1-8] 使用するプロビジョニング方法にかかわらず、プロファイル所有者が確定したら、ACTION_MANAGED_PROFILE_PROVISIONED ブロードキャストを個人用プロファイル DPC に送信しなければなりません。

3.9.2. 管理対象プロファイルのサポート

android.software.managed_users を宣言する場合、デバイス実装は:

  • [C-1-1] android.app.admin.DevicePolicyManager API を介して管理対象プロファイルをサポートしなければなりません。
  • [C-1-2] 管理対象プロファイルを 1 つだけ作成できるようにしなければなりません。
  • [C-1-3] アイコンバッジ(AOSP のアップストリームの仕事用バッジに類似)を使用して、管理対象アプリとウィジェットや、履歴と通知のような他のバッジ付き UI 要素を表さなければなりません。
  • [C-1-4] 通知アイコン(AOSP のアップストリームの仕事用バッジに類似)を表示して、ユーザーが管理対象プロファイル アプリ内にいることを示さなければなりません。
  • [C-1-5] デバイスが復帰(ACTION_USER_PRESENT)し、フォアグラウンド アプリが管理対象プロファイル内にある場合、ユーザーが管理対象プロファイル内にいることを示すトーストを表示しなければなりません。
  • [C-1-6] 管理対象プロファイルが存在する場合、Device Policy Controller によって有効にされていれば、インテントを選択するユーザーにビジュアル アフォーダンスを表示して、ユーザーが管理対象プロファイルからプライマリ ユーザーに(またはその逆に)インテントを転送できるようにしなければなりません。
  • [C-1-7] 管理対象プロファイルが存在する場合、プライマリ ユーザーと管理対象プロファイルの両方について、次のユーザー アフォーダンスを公開しなければなりません。
    • プライマリ ユーザーと管理対象プロファイルの、バッテリー、位置情報、モバイルデータ、ストレージ使用量に関する個別の計算。
    • プライマリ ユーザーまたは管理対象プロファイルにインストールされている VPN アプリの独立した管理。
    • プライマリ ユーザーまたは管理対象プロファイルにインストールされているアプリの独立した管理。
    • プライマリ ユーザーまたは管理対象プロファイル内のアカウントの独立した管理。
  • [C-1-8] Device Policy Controller が許可している場合、プリインストールの電話アプリ、連絡先アプリ、メッセージ アプリが、プライマリ プロファイルからの情報とともに管理対象プロファイル(存在する場合)からの発信者情報を検索できるようにしなければなりません。
  • [C-1-9] 管理対象プロファイルがプライマリ ユーザーに加えて別のユーザーとしてカウントされない場合でも、複数のユーザーが有効になっている(セクション 9.5 参照)デバイスに適用されるセキュリティ要件をすべて満たしていることを確認しなければなりません。
  • [C-1-10] スクリーンショットが、フォーカスされた topActivity ウィンドウ(すべてのアクティビティの中でユーザーが最後に操作したウィンドウ)でキャプチャされ、仕事用プロファイル アプリに属する場合、スクリーンショット データが仕事用プロファイル ストレージに保存されることを確認しなければなりません。
  • [C-1-11] 個人用プロファイルのデータが仕事用プロファイルに保存されないようにするため、スクリーンショットを仕事用プロファイルに保存する場合は、仕事用プロファイル アプリのウィンドウを除き、他の画面コンテンツ(システムバー、通知、個人用プロファイルのコンテンツ)をキャプチャしてはなりません。

android.software.managed_usersandroid.software.secure_lock_screen を宣言する場合、デバイス実装は:

  • [C-2-1] 次の要件を満たす個別のロック画面を指定する機能をサポートして、管理対象プロファイルのみで実行されているアプリへのアクセス権を付与しなければなりません。
    • デバイス実装は、DevicePolicyManager.ACTION_SET_NEW_PASSWORD インテントを使用し、管理対象プロファイルの個別のロック画面認証情報を設定するインターフェースを表示しなければなりません。
    • Android オープンソース プロジェクトのサイトに記載されているとおり、管理対象プロファイルのロック画面認証情報は、親プロファイルと同じ認証情報ストレージと管理メカニズムを使用しなければなりません。
    • DPC パスワード ポリシーは、getParentProfileInstance によって返される DevicePolicyManager インスタンスで呼び出されない限り、管理対象プロファイルのロック画面認証情報にのみ適用しなければなりません。
  • 管理対象プロファイルの連絡先が、プリインストールの通話履歴、通話 UI、通話中通知、不在着信通知、連絡先、メッセージ アプリに表示される場合、管理対象プロファイル アプリを示すために使用されるものと同じバッジを付けるべきです。

3.9.3. 管理対象ユーザーのサポート

android.software.managed_users を宣言する場合、デバイス実装は:

  • [C-1-1] isLogoutEnabledtrue を返す場合、複数ユーザー セッションでは、現在のユーザーからログアウトしてプライマリ ユーザーに切り戻すユーザー アフォーダンスを提供しなければなりません。ユーザー アフォーダンスは、デバイスをロック解除せずにロック画面からアクセスできなければなりません。

android.software.device_admin を宣言し、他のセカンダリ ユーザーを追加するオンデバイス ユーザー アフォーダンスを提供する場合、デバイス実装は:

  • [C-SR-1] 新しいセカンダリ ユーザーにアカウントを追加できるようにする前に、android.app.action.PROVISION_MANAGED_DEVICE によって開始されたフローで示されたものと同じ AOSP デバイス所有者同意開示を示すことが強く推奨されます。これにより、ユーザーはデバイスが管理されていることを把握できます。

3.9.4. デバイス ポリシー管理ロールの要件

android.software.device_admin または android.software.managed_users をレポートする場合、デバイス実装は:

  • [C-1-1] セクション 9.1 で定義されているとおり、デバイス ポリシー管理のロールをサポートしなければなりません。デバイス ポリシー管理ロールを保持するアプリは、config_devicePolicyManagement をパッケージ名に設定することで定義しても構いません。アプリがプリロードされていない限り、パッケージ名の後に : と署名証明書を付けなければなりません。

config_devicePolicyManagement のパッケージ名が上記のように定義されていない場合:

  • [C-2-1] デバイス実装は、デバイス ポリシー管理のロールを保持するアプリなしでのプロビジョニングをサポートしなければなりません(AOSP がリファレンス実装を提供)。

config_devicePolicyManagement のパッケージ名が上記のように定義されている場合:

  • [C-3-1] ユーザーのすべてのプロファイルに、アプリをインストールしなければなりません。
  • [C-3-2] デバイス実装は、config_devicePolicyManagementUpdater を設定することで、プロビジョニング前にデバイス ポリシー管理のロール保持者を更新するアプリを定義しても構いません。

config_devicePolicyManagementUpdater のパッケージ名が上記のように定義されている場合:

  • [C-4-1] アプリをデバイスにプリインストールしなければなりません。
  • [C-4-2] アプリは、android.app.action.UPDATE_DEVICE_POLICY_MANAGEMENT_ROLE_HOLDER を解決するインテント フィルタを実装しなければなりません。

3.9.5. デバイス ポリシー解決フレームワーク

android.software.device_admin または android.software.managed_users をレポートする場合、デバイス実装は:

3.10. ユーザー補助

Android は、障がいのあるユーザーがより簡単にデバイスを操作できるようにするためのユーザー補助レイヤを提供します。また、ユーザー補助サービスの実装によってユーザーとシステム イベントのコールバックを受信し、テキスト読み上げ、触覚フィードバック、トラックボール / D-pad ナビゲーションなどの代替フィードバック メカニズムを生成できるプラットフォーム API を提供します。

サードパーティのユーザー補助サービスをサポートする場合、デバイス実装は:

  • [C-1-1] ユーザー補助 API の SDK ドキュメントに記載されているとおり、Android ユーザー補助フレームワークの実装を提供しなければなりません。
  • [C-1-2] SDK に記載されているとおり、ユーザー補助イベントを生成し、登録されているすべての AccessibilityService 実装に、適切な AccessibilityEvent を配信しなければなりません。
  • [C-1-4] AccessibilityServiceInfo.FLAG_REQUEST_ACCESSIBILITY_BUTTON を宣言するユーザー補助サービスをコントロールするユーザー アフォーダンスを提供しなければなりません。なお、システム ナビゲーション バーのあるデバイス実装では、システムのナビゲーション バーのボタンで、こうしたサービスをコントロールするオプションをユーザーに認めるべきです。

プリインストールのユーザー補助サービスが含まれる場合、デバイス実装は:

  • [C-2-1] データ ストレージがファイルベースの暗号化(FBE)で暗号化される場合、こうしたプリインストールのユーザー補助サービスをダイレクト ブート対応アプリとして実装しなければなりません。
  • 関連するユーザー補助サービスや、フォントサイズ、ディスプレイ サイズ、拡大操作を調節するオプションをユーザーが有効にする初期設定フロー メカニズムを提供すべきです。

3.11. テキスト読み上げ

Android には、アプリがテキスト読み上げ(TTS)サービスを利用できるようにし、サービス プロバイダが TTS サービスの実装を提供できるようにする API があります。

機能 android.hardware.audio.output をレポートする場合、デバイス実装は:

サードパーティ TTS エンジンのインストールをサポートする場合、デバイス実装は:

  • [C-2-1] システムレベルで使用する TTS エンジンをユーザーが選択できるようにするユーザー アフォーダンスを提供しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

3.12. テレビ入力フレームワーク

[3.12](2024 年 2 月 26 日プレビュー)

Android テレビ入力フレームワーク(TIF)により、Android テレビデバイスへのライブ コンテンツの配信が簡単になります。TIF は、Android テレビデバイスをコントロールする入力モジュールを作成するための標準 API を提供します。

TIF をサポートする場合、デバイス実装は:

  • [C-1-1] プラットフォーム機能 android.software.live_tv を宣言しなければなりません。
  • [C-1-2] TIF API とサードパーティの TIF ベースの入力サービスを使用するアプリをデバイスにインストールして使用できるように、すべての TIF API をサポートしなければなりません。

新しい要件の終了

3.13. クイック設定

Android は、よく使用するアクションや緊急に必要なアクションにすばやくアクセスできるクイック設定 UI コンポーネントを提供します。

クイック設定 UI コンポーネントが含まれ、サードパーティのクイック設定をサポートする場合、デバイス実装は:

  • [C-1-1] サードパーティ アプリから quicksettings API を通じて提供されるタイルを、ユーザーが追加または削除できるようにしなければなりません。
  • [C-1-2] タイルをサードパーティ アプリからクイック設定に直接自動的に追加してはなりません。
  • [C-1-3] システム提供のクイック設定タイルとともに、サードパーティ アプリからユーザーが追加したタイルをすべて表示しなければなりません。

3.14. メディア UI

デバイス実装に、MediaBrowser または MediaSession を介してサードパーティ アプリを操作する音声認識以外のアプリが含まれる場合、そのアプリは:

  • [C-1-2] MediaDescription に記載されているとおり、getIconBitmap() または getIconUri() を介して取得したアイコンと、getTitle() を介して取得したタイトルを、明確に表示しなければなりません。安全規則(ドライバーの注意散漫など)を遵守するためにタイトルを短縮しても構いません。

  • [C-1-3] サードパーティ アプリが提供するコンテンツを表示する際、必ずそのサードパーティ アプリのアイコンを表示しなければなりません。

  • [C-1-4] ユーザーが MediaBrowser 階層全体を操作できるようにしなければなりません。安全規則(ドライバーの注意散漫など)を遵守するために階層の一部へのアクセスを制限しても構いませんが、コンテンツまたはコンテンツ プロバイダに基づいて優先的な取り扱いをしてはなりません。

  • [C-1-5] KEYCODE_HEADSETHOOK または KEYCODE_MEDIA_PLAY_PAUSE のダブルタップを MediaSession.Callback#onMediaButtonEventKEYCODE_MEDIA_NEXT とみなさなければなりません。

3.15. Instant Apps

デバイス実装は、Instant Apps をサポートする場合、以下の要件を満たさなければなりません。

  • [C-1-1] Instant Apps には、android:protectionLevel"instant" に設定された権限のみを付与しなければなりません。
  • [C-1-2] Instant Apps は、次のいずれかに該当する場合を除き、暗黙的インテントを介してインストール済みのアプリを操作してはなりません。
    • コンポーネントのインテント パターン フィルタが公開されており、CATEGORY_BROWSABLE が設定されている
    • アクションが、ACTION_SEND、ACTION_SENDTO、ACTION_SEND_MULTIPLE のいずれかである
    • ターゲットが android:visibleToInstantApps で明示的に公開されている
  • [C-1-3] Instant Apps は、コンポーネントが android:visibleToInstantApps を介して公開されている場合を除き、インストール済みのアプリを明示的に操作してはなりません。
  • [C-1-4] インストール済みのアプリは、Instant Apps がインストール済みのアプリに明示的に接続する場合を除き、デバイスの Instant Apps の詳細を表示してはなりません。
  • デバイス実装は、Instant Apps を操作するために次のユーザー アフォーダンスを提供しなければなりません。AOSP はデフォルトのシステム UI、設定、ランチャーで、この要件を満たしています。デバイス実装は:

    • [C-1-5] 個々のアプリ パッケージごとにローカルにキャッシュされた Instant Apps を表示、削除するユーザー アフォーダンスを提供しなければなりません。
    • [C-1-6] Instant App がフォアグラウンドで実行されている間に閉じることができる永続的なユーザー通知を提供しなければなりません。このユーザー通知は、Instant Apps がインストールを必要としないことを含まなければならず、ユーザーを設定のアプリ情報画面に誘導するユーザー アフォーダンスを提供しなければなりません。ウェブ インテントを介して起動された Instant Apps の場合、アクションが Intent.ACTION_VIEW に設定され、「http」または「https」のスキームを持つインテントを使用して定義されていることから、追加のユーザー アフォーダンスでは、ユーザーが Instant App を起動できず、デバイスでブラウザを利用できるのであれば、設定済みのウェブブラウザで関連リンクを起動できるようにすべきです。
    • [C-1-7] デバイスで履歴機能が利用可能な場合、実行中の Instant Apps に履歴機能からアクセスできるようにしなければなりません。
  • [C-1-8] こちらの SDK に記載されているインテントのインテント ハンドラで 1 つ以上のアプリまたはサービス コンポーネントをプリロードし、インテントを Instant Apps で表示しなければなりません。

3.16. コンパニオン デバイスのペア設定

Android では、コンパニオン デバイスのペア設定をサポートしてコンパニオン デバイスとの関連付けを効果的に管理できるようになっており、アプリでこの機能にアクセスするための CompanionDeviceManager API が提供されています。

コンパニオン デバイスのペア設定機能をサポートする場合、デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[C-1-3](2024 年 2 月 5 日プレビュー)

  • [C-1-3] コンパニオン デバイスがあり動作可能であることをユーザーが選択 / 確認するユーザー アフォーダンスを提供しなければなりません。コンパニオン デバイスは、追加や変更を加えずに AOSP に実装されているものと同じメッセージを使用しなければなりません

新しい要件の終了

3.17. 重いアプリ

機能 FEATURE_CANT_SAVE_STATE を宣言する場合、デバイス実装は:

  • [C-1-1] インストール済みのアプリで cantSaveState が指定されている場合、システムで一度に実行するのは 1 つだけにしなければなりません。ユーザーがそのようなアプリを明示的に終了せずに離れる場合(たとえば、システムにアクティブなアクティビティが残っていない状態で戻るボタンを押すのではなく、システムにアクティブなアクティビティを残したままホームボタンを押すことで離れる場合)、デバイス実装は、フォアグラウンド サービスなど、動作し続けることが想定されるサービスと同様に、そのアプリを RAM 内で優先しなければなりません。そのようなアプリがバックグラウンドにあっても、システムは引き続き、CPU やネットワーク アクセスの制限などの電源管理機能を適用できます。
  • [C-1-2] cantSaveState 属性で宣言された第 2 のアプリをユーザーが起動した後、通常の状態保存 / 復元メカニズムに加わらないアプリを選択する UI アフォーダンスを提供しなければなりません。
  • [C-1-3] CPU パフォーマンスの変更やスケジュール設定の優先順位の変更など、cantSaveState を指定するアプリに対して他のポリシー変更を適用してはなりません。

機能 FEATURE_CANT_SAVE_STATE を宣言しない場合、デバイス実装は:

  • [C-1-1] アプリによって設定された cantSaveState 属性を無視しなければならず、この属性に基づいてアプリの動作を変更してはなりません。

3.18. 連絡先

Android には、デバイスに保存された連絡先情報をアプリが管理できるようにする Contacts Provider API があります。通常、デバイスに直接入力された連絡先データはウェブサービスと同期されますが、データはデバイスにローカルに配置されるだけでも構いません。デバイスに保存されるだけの連絡先のことを、ローカルの連絡先といいます。

ACCOUNT_NAME 列と ACCOUNT_TYPE 列が、アカウントの対応する Account.name フィールドと Account.type フィールドに一致する場合、RawContactsAccount に関連付けられるか、保存されます。

デフォルト ローカル アカウント: デバイスにのみ保存される、AccountManager のアカウントに関連付けられていない未加工連絡先のアカウントであって、ACCOUNT_NAME 列と ACCOUNT_TYPE 列が null 値の場合に作成されるもの。

カスタム ローカル アカウント: デバイスにのみ保存される、AccountManager のアカウントに関連付けられていない未加工連絡先のアカウントであって、ACCOUNT_NAME 列と ACCOUNT_TYPE 列の少なくとも 1 つが非 null 値の場合に作成されるもの。

デバイス実装は:

  • [C-SR-1] カスタム ローカル アカウントを作成しないことが強く推奨されます。

デバイス実装がカスタム ローカル アカウントを使用する場合:

  • [C-1-1] カスタム ローカル アカウントACCOUNT_NAME が、ContactsContract.RawContacts.getLocalAccountName によって返さなければなりません。
  • [C-1-2] カスタム ローカル アカウントACCOUNT_TYPE が、ContactsContract.RawContacts.getLocalAccountType によって返さなければなりません。
  • [C-1-3] デフォルト ローカル アカウントでサードパーティ アプリによって挿入される(ACCOUNT_NAMEACCOUNT_TYPE に null 値を設定することで挿入される)未加工連絡先は、カスタム ローカル アカウントに挿入されなければなりません。
  • [C-1-4] カスタム ローカル アカウントに挿入された未加工連絡先は、アカウントが追加または削除されたときに削除されてはなりません。
  • [C-1-5] カスタム ローカル アカウントに対して行われた削除操作では、CALLER\_IS\_SYNCADAPTER パラメータが false に設定されているか指定されていない場合であっても、未加工連絡先がすぐに削除されなければなりません(CALLER_IS_SYNCADAPTER パラメータが true に設定されている場合と同様に削除されなければなりません)。

15(AOSP 試験運用版)の新しい要件の開始

3.19. 言語設定

[3.19. 言語設定](2024 年 2 月 26 日プレビュー)

デバイス実装は:

  • [C-0-1] 性別を区別する翻訳をサポートしない言語について、性別を区別する言語処理を選択するユーザー アフォーダンスを提供してはなりません。詳しくは、文法リソースをご覧ください。

新しい要件の終了

4. アプリ パッケージの互換性

デバイス実装は:

  • [C-0-1] 公式の Android SDK に含まれる「aapt」ツールによって生成された Android「.apk」ファイルをインストールして実行できなければなりません。

    • 上記の要件が難しい場合もあるため、デバイス実装は、AOSP リファレンス実装のパッケージ管理システムを使用することが推奨されます。
  • [C-0-2] APK 署名スキーム v3.1、APK 署名スキーム v3APK 署名スキーム v2JAR 署名を使用した「.apk」ファイルの検証をサポートしなければなりません。

  • [C-0-3] .apkAndroid マニフェストDalvik バイトコード、RenderScript バイトコードのいずれかの形式を、他の互換デバイスでファイルのインストールと実行が正しく行われないような方法で拡張してはなりません。

  • [C-0-4] DELETE_PACKAGE 権限の SDK に記載されているとおり、パッケージの現在の「レコードのインストーラ」以外のアプリが、ユーザーの確認なしで通知せずにアプリをアンインストールできるようにしてはなりません。例外は、PACKAGE_NEEDS_VERIFICATION インテントを処理するシステム パッケージ検証アプリと、ACTION_MANAGE_STORAGE インテントを処理するストレージ管理アプリです。

  • [C-0-5] android.settings.MANAGE_UNKNOWN_APP_SOURCES インテントを処理するアクティビティがなければなりません。

  • [C-0-6] インストールをリクエストするアプリが次の要件をすべて満たす場合を除き、提供元不明のアプリ パッケージをインストールしてはなりません。

    • REQUEST_INSTALL_PACKAGES 権限を宣言するか、android:targetSdkVersion を 24 以下に設定しなければなりません。
    • ユーザーによって、提供元不明のアプリをインストールする権限が付与されていなければなりません。
  • 提供元不明のアプリをインストールする権限をアプリごとに付与する / 取り消すユーザー アフォーダンスを提供すべきですが、デバイス実装でユーザーにこの選択を許可しない場合、これを NoOps として実装し、startActivityForResult() について RESULT_CANCELED を返すことにしても構いません。ただし、そのような場合であっても、そうした選択が提示されない理由をユーザーに示すべきです。

  • [C-0-7] システム API PackageManager.setHarmfulAppWarning によって有害な可能性があるとマークされたアプリでアクティビティを起動する前に、同じシステム API PackageManager.setHarmfulAppWarning を通じて提供される警告文字列による警告ダイアログを表示しなければなりません。

  • 警告ダイアログで、アプリをアンインストールするか起動するかを選択するユーザー アフォーダンスを提供すべきです。

  • [C-0-8] こちらに記載されているとおり、増分ファイル システムのサポートを実装しなければなりません。

  • [C-0-9] APK 署名スキーム v4 と APK 署名スキーム v4.1 を使用した .apk ファイルの検証をサポートしなければなりません。

5. マルチメディアの互換性

デバイス実装は:

  • [C-0-1] MediaCodecList で宣言された各コーデックすべてについて、セクション 5.1 で規定するメディア形式、エンコーダ、デコーダ、ファイル形式、コンテナ形式をサポートしなければなりません。
  • [C-0-2] MediaCodecList を介してサードパーティ アプリが利用できるエンコーダ、デコーダのサポートを宣言し、レポートしなければなりません。
  • [C-0-3] 適切にデコードできなければならず、エンコード可能なすべての形式をサードパーティ アプリが利用できるようにしなければなりません。これには、エンコーダが生成するすべてのビットストリームと、CamcorderProfile でレポートされるプロファイルが含まれます。

デバイス実装は:

  • コーデック遅延を最小限に抑えるべきです。つまり
    • 入力バッファを消費、保存すべきでなく、1 回処理されただけで入力バッファを返すべきではありません。
    • デコードされたバッファを、標準(例: SPS)で指定されているよりも長く保持すべきではありません。
    • エンコードされたバッファを、GOP 構造が必要とするよりも長く保持すべきではありません。

以下のセクションに記載されているコーデックはすべて、Android オープンソース プロジェクトの推奨 Android 実装でソフトウェア実装として提供されています。

Google もオープン ハンドセット アライアンスも、これらのコーデックにサードパーティの特許がないことを表明しているわけではないことにご注意ください。オープンソース ソフトウェアまたはシェアウェアを含め、このソースコードをハードウェアまたはソフトウェア製品で使用する場合は、このコードの実装に関連する特許権者からの特許ライセンスが必要になることがあります。

5.1. メディア コーデック

5.1.1. オーディオ エンコード

詳細については 5.1.3. オーディオ コーデックの詳細をご覧ください。

android.hardware.microphone を宣言する場合、デバイス実装は、次のオーディオ形式のエンコードをサポートし、サードパーティ アプリで利用できるようにしなければなりません。

  • [C-1-1] PCM/WAVE
  • [C-1-2] FLAC
  • [C-1-3] Opus

オーディオ エンコーダはすべて、下記をサポートしなければなりません。

  • [C-3-1] android.media.MediaCodec API を介した PCM 16 ビット ネイティブ バイトオーダーのオーディオ フレーム。

5.1.2. オーディオ デコード

詳細については 5.1.3. オーディオ コーデックの詳細をご覧ください。

android.hardware.audio.output 機能のサポートを宣言する場合、デバイス実装は、次のオーディオ形式のデコードをサポートしなければなりません。

  • [C-1-1] MPEG-4 AAC プロファイル(AAC LC)
  • [C-1-2] MPEG-4 HE AAC プロファイル(AAC+)
  • [C-1-3] MPEG-4 HE AACv2 プロファイル(Enhanced AAC+)
  • [C-1-4] AAC ELD(Enhanced Low Delay AAC)
  • [C-1-11] xHE-AAC(USAC ベースライン プロファイルを含む ISO/IEC 23003-3 Extended HE AAC プロファイル、ISO/IEC 23003-4 Dynamic Range Control プロファイル)
  • [C-1-5] FLAC
  • [C-1-6] MP3
  • [C-1-7] MIDI
  • [C-1-8] Vorbis
  • [C-1-9] 24 ビット、サンプルレート 192 kHz、8 チャンネルまでのハイレゾリューション オーディオ形式を含む、PCM/WAVE。なお、この要件はデコード向けに限られ、デバイスには再生フェーズ中のダウンサンプルとダウンミックスが許可されます。
  • [C-1-10] Opus

デバイス実装が、android.media.MediaCodec API のデフォルト AAC オーディオ デコーダを通じて PCM へのマルチチャンネル ストリーム(2 チャンネル以上)の AAC 入力バッファのデコードをサポートする場合、下記をサポートしなければなりません。

  • [C-2-1] デコードは、ダウンミックスせずに行わなければなりません(たとえば、5.0 AAC ストリームは 5 チャンネルの PCM にデコードされなければならず、5.1 AAC ストリームは 6 チャンネルの PCM にデコードされなければなりません)。
  • [C-2-2] ダイナミック レンジ メタデータは、ISO/IEC 14496-3 の「Dynamic Range Control(DRC)」と、オーディオ デコーダのダイナミック レンジ関連の動作を構成するための android.media.MediaFormat DRC キーで定義されているとおりでなければなりません。AAC DRC キーは KEY_AAC_DRC_ATTENUATION_FACTORKEY_AAC_DRC_BOOST_FACTORKEY_AAC_DRC_HEAVY_COMPRESSIONKEY_AAC_DRC_TARGET_REFERENCE_LEVELKEY_AAC_ENCODED_TARGET_LEVEL であり、API 21 で導入されました。
  • [C-SR-1] 上記の要件 C-2-1 と C-2-2 を、すべての AAC オーディオ デコーダで満たすことが強く推奨されます。

USAC オーディオをデコードするとき、MPEG-D(ISO/IEC 23003-4)は:

  • [C-3-1] ラウドネスと DRC メタデータは、MPEG-D DRC Dynamic Range Control プロファイル レベル 1 に従って解釈し、適用しなければなりません。
  • [C-3-2] デコーダは、android.media.MediaFormat キー(KEY_AAC_DRC_TARGET_REFERENCE_LEVELKEY_AAC_DRC_EFFECT_TYPE)で設定した構成に従って動作しなければなりません。

MPEG-4 AAC、HE AAC、HE AACv2 プロファイルのデコーダは:

  • ISO/IEC 23003-4 Dynamic Range Control プロファイルを使用した、ラウドネスとダイナミック レンジ コントロールをサポートしても構いません。

ISO/IEC 23003-4 がサポートされている場合であって、デコードされたビットストリームに ISO/IEC 23003-4 と ISO/IEC 14496-3 の両方のメタデータが存在する場合:

  • ISO/IEC 23003-4 メタデータが優先されるものとします。

オーディオ デコーダはすべて、次の出力をサポートしなければなりません。

  • [C-6-1] android.media.MediaCodec API を介した PCM 16 ビット ネイティブ バイトオーダーのオーディオ フレーム。

デバイス実装が、android.media.MediaCodec API のデフォルト AAC オーディオ デコーダを通じて PCM へのマルチチャンネル ストリーム(2 チャンネル以上)の AAC 入力バッファのデコードをサポートする場合、下記をサポートしなければなりません。

  • [C-7-1] コンテンツをステレオにダウンミックスするか(値 2 を使用する場合)ネイティブ チャンネル数を使用して出力するか(その数以上の値を使用する場合)を制御するために、鍵 KEY_MAX_OUTPUT_CHANNEL_COUNT によるデコードを使用してアプリで設定できなければなりません。たとえば、値を 6 以上に設定すると、5.1 のコンテンツを供給する際に 6 つのチャンネルを出力するようにデコーダを設定できます。
  • [C-7-2] デコーダはデコード時に、android.media.AudioFormat 定数(例: CHANNEL_OUT_5POINT1)を使用して、KEY_CHANNEL_MASK 鍵での出力形式で使用されるチャンネル マスクをアドバタイズしなければなりません。

デバイス実装が、デフォルトの AAC オーディオ デコーダ以外のオーディオ デコーダをサポートし、圧縮されたマルチチャンネル コンテンツを供給する際にマルチチャンネル オーディオ(2 チャンネルを超えるオーディオ)を出力できる場合:

  • [C-SR-2] デコーダは、コンテンツをステレオにダウンミックスするか(値 2 を使用する場合)ネイティブ チャンネル数を使用して出力するか(その数以上の値を使用する場合)を制御するために、鍵 KEY_MAX_OUTPUT_CHANNEL_COUNT によるデコードを使用してアプリで設定できるようにすることを強く推奨します。たとえば、値を 6 以上に設定すると、5.1 のコンテンツを供給する際に 6 つのチャンネルを出力するようにデコーダを設定できます。
  • [C-SR-3] デコーダはデコード時に、android.media.AudioFormat 定数(例: CHANNEL_OUT_5POINT1)を使用して、KEY_CHANNEL_MASK 鍵での出力形式で使用されるチャンネル マスクをアドバタイズすることが強く推奨されます。

5.1.3. オーディオ コーデックの詳細

形式 / コーデック 詳細 サポートされるファイル形式 / コンテナ形式
MPEG-4 AAC プロファイル
(AAC LC)
標準サンプリング レート 8~48 kHz のモノラル / ステレオ / 5.0 / 5.1 コンテンツをサポート。
  • 3GPP(.3gp)
  • MPEG-4(.mp4、.m4a)
  • ADTS raw AAC(.aac、ADIF 非対応)
  • MPEG-TS(.ts、シーク不可、デコードのみ)
  • Matroska(.mkv、デコードのみ)
MPEG-4 HE AAC プロファイル(AAC+) 標準サンプリング レート 16~48 kHz のモノラル / ステレオ / 5.0 / 5.1 コンテンツをサポート。
  • 3GPP(.3gp)
  • MPEG-4(.mp4、.m4a)
MPEG-4 HE AACv2
プロファイル(Enhanced AAC+)
標準サンプリング レート 16~48 kHz のモノラル / ステレオ / 5.0 / 5.1 コンテンツをサポート。
  • 3GPP(.3gp)
  • MPEG-4(.mp4、.m4a)
AAC-ELD(Enhanced Low Delay AAC) 標準サンプリング レート 16~48 kHz のモノラル / ステレオ コンテンツをサポート。
  • 3GPP(.3gp)
  • MPEG-4(.mp4、.m4a)
USAC 標準サンプリング レート 7.35~48 kHz のモノラル / ステレオ コンテンツをサポート。 MPEG-4(.mp4、.m4a)
AMR-NB 8 kHz でサンプリングされた 4.75~12.2 kbps 3GPP(.3gp)
AMR-WB 16 kHz でサンプリングされた、6.60 kbit/s~23.85 kbit/s の 9 種類のレート(AMR-WB、Adaptive Multi-Rate - Wideband Speech Codec で定義) 3GPP(.3gp)
FLAC エンコーダとデコーダの両方について: 少なくともモノラルモードとステレオモードをサポートしなければなりません。192 kHz までのサンプルレートをサポートしなければなりません。16 ビットと 24 ビットの解像度をサポートしなければなりません。FLAC 24 ビット オーディオ データ処理が浮動小数点オーディオ構成で利用できなければなりません。
  • FLAC(.flac)
  • MPEG-4(.mp4、.m4a、デコードのみ)
  • Matroska(.mkv、デコードのみ)
MP3 モノラル / ステレオの 8~320 Kbps 固定ビットレート(CBR)または可変ビットレート(VBR)
  • MP3(.mp3)
  • MPEG-4(.mp4、.m4a、デコードのみ)
  • Matroska(.mkv、デコードのみ)
MIDI MIDI タイプ 0 と 1。DLS バージョン 1 と 2。XMF と Mobile XMF。着信音形式 RTTTL/RTX、OTA、iMelody をサポート。
  • タイプ 0 と 1(.mid、.xmf、.mxmf)
  • RTTTL/RTX(.rtttl、.rtx)
  • iMelody(.imy)
Vorbis デコード: サンプリング レート 8,000、12,000、16,000、24,000、48,000 Hz のモノラル、ステレオ、5.0、5.1 のコンテンツをサポート。
エンコード: サンプリング レート 8,000、12,000、16,000、24,000、48,000 Hz のモノラル、ステレオのコンテンツをサポート。
  • Ogg(.ogg)
  • MPEG-4(.mp4、.m4a、デコードのみ)
  • Matroska(.mkv)
  • Webm(.webm)
PCM(WAVE) PCM コーデックは 16 ビットのリニア PCM と 16 ビット浮動小数点をサポートしなければなりません。WAVE エクストラクタは 16 ビット、24 ビット、32 ビットのリニア PCM と 32 ビット浮動小数点をサポートしなければなりません(最大レートはハードウェアの上限値)。サンプリング レートは 8 kHz から 192 kHz までをサポートしなければなりません。 WAVE(.wav)
Opus デコード: サンプリング レート 8,000、12,000、16,000、24,000、48,000 Hz のモノラル、ステレオ、5.0、5.1 のコンテンツをサポート。
エンコード: サンプリング レート 8,000、12,000、16,000、24,000、48,000 Hz のモノラル、ステレオのコンテンツをサポート。
  • Ogg(.ogg)
  • MPEG-4(.mp4、.m4a、デコードのみ)
  • Matroska(.mkv)
  • Webm(.webm)

5.1.4. 画像のエンコード

詳細については、5.1.6. 画像コーデックの詳細をご覧ください。

デバイス実装は、次の画像エンコードのエンコードをサポートしなければなりません。

  • [C-0-1] JPEG
  • [C-0-2] PNG
  • [C-0-3] WebP
  • [C-0-4] AVIF
    • デバイスは、BITRATE_MODE_CQ とベースライン プロファイルをサポートしなければなりません。

メディアタイプ MIMETYPE_IMAGE_ANDROID_HEICandroid.media.MediaCodec を介して HEIC エンコードをサポートする場合、デバイス実装は:

  • [C-1-1] BITRATE_MODE_CQ ビットレート コントロール モード、HEVCProfileMainStill プロファイル、512 x 512 px フレームサイズをサポートするハードウェア アクセラレーテッド HEVC エンコーダ コーデックを提供しなければなりません。

5.1.5. 画像のデコード

詳細については、5.1.6. 画像コーデックの詳細をご覧ください。

デバイス実装は、次の画像エンコードのデコードをサポートしなければなりません。

  • [C-0-1] JPEG
  • [C-0-2] GIF
  • [C-0-3] PNG
  • [C-0-4] BMP
  • [C-0-5] WebP
  • [C-0-6] Raw
  • [C-0-7] AVIF(ベースライン プロファイル)

HEVC 動画デコードをサポートする場合、デバイス実装は: * [C-1-1] HEIF(HEIC)画像デコードをサポートしなければなりません。

高ビット深度形式(チャンネルあたり 9 ビット以上)をサポートする画像デコーダ

  • [C-2-1] アプリが、たとえば android.graphics.BitmapARGB_8888 設定を介してリクエストする場合、8 ビット相当の形式の出力をサポートしなければなりません。

5.1.6. 画像コーデックの詳細

形式 / コーデック 詳細 サポートされているファイル形式 / コンテナ形式
JPEG ベースラインとプログレッシブ JPEG(.jpg)
GIF GIF(.gif)
PNG PNG(.png)
BMP BMP(.bmp)
WebP WebP(.webp)
Raw ARW(.arw)、CR2(.cr2)、DNG(.dng)、NEF(.nef)、NRW(.nrw)、ORF(.orf)、PEF(.pef)、RAF(.raf)、RW2(.rw2)、SRW(.srw)
HEIF 画像、画像コレクション、画像シーケンス HEIF(.heif)、HEIC(.heic)
AVIF(ベースライン プロファイル) 画像、画像コレクション、画像シーケンスのベースライン プロファイル HEIF コンテナ(.avif)

MediaCodec API を通じて公開される画像エンコーダとデコーダ

  • [C-1-1] CodecCapabilities を通じて YUV420 8:8:8 フレキシブル カラー形式(COLOR_FormatYUV420Flexible)をサポートしなければなりません。

  • [C-SR-1] 入力サーフェス モードで RGB888 カラー形式をサポートすることが強く推奨されます。

  • [C-1-3] 少なくとも Planar または SemiPlanar いずれかの YUV420 8:8:8 カラー形式をサポートしなければなりません: COLOR_FormatYUV420PackedPlanarCOLOR_FormatYUV420Planar 相当)または COLOR_FormatYUV420PackedSemiPlanarCOLOR_FormatYUV420SemiPlanar 相当)。両方をサポートすることが強く推奨されます。

5.1.7. 動画コーデック

  • ウェブ動画ストリーミング サービスとビデオ会議サービスの品質を許容可能なものにするために、デバイス実装は、要件を満たすハードウェア VP8 コーデックを使用すべきです。

デバイス実装に動画デコーダまたはエンコーダが含まれる場合:

  • [C-1-1] 動画コーデックは、標準と設定で規定されているとおり、実現可能な最大の圧縮フレームと非圧縮フレームに対応する入出力バイトバッファ サイズをサポートしなければなりませんが、過剰に割り当ててはなりません。

  • [C-1-2] 動画エンコーダとデコーダは、CodecCapabilities を通じて YUV420 8:8:8 フレキシブル カラー形式(COLOR_FormatYUV420Flexible)をサポートしなければなりません。

  • [C-1-3] 動画エンコーダとデコーダは、少なくとも Planar または SemiPlanar いずれかの YUV420 8:8:8 カラー形式をサポートしなければなりません: COLOR_FormatYUV420PackedPlanarCOLOR_FormatYUV420Planar 相当)または COLOR_FormatYUV420PackedSemiPlanarCOLOR_FormatYUV420SemiPlanar 相当)。両方をサポートすることが強く推奨されます。

  • [C-SR-1] 動画エンコーダとデコーダは、ハードウェアに最適化された少なくとも Planar または SemiPlanar いずれかの YUV420 8:8:8 カラー形式をサポートすることが強く推奨されます(YV12、NV12、NV21、またはベンダーに最適化された同等の形式)。

  • [C-1-5] 高ビット深度形式(チャンネルあたり 9 ビット以上)をサポートする動画デコーダは、アプリがリクエストする場合、8 ビット相当の形式の出力をサポートしなければなりません。これは、android.media.MediaCodecInfo を介して YUV420 8:8:8 カラー形式をサポートすることで反映されなければなりません。

Display.HdrCapabilities を通じて HDR プロファイルのサポートをアドバタイズする場合、デバイス実装は:

  • [C-2-1] HDR 静的メタデータの解析と処理をサポートしなければなりません。

MediaCodecInfo.CodecCapabilities クラスの FEATURE_IntraRefresh を通じてイントラ更新のサポートをアドバタイズする場合、デバイス実装は:

  • [C-3-1] 更新周期 10~60 フレームをサポートし、設定した更新周期の 20% 以内で正確に動作しなければなりません。

アプリが KEY_COLOR_FORMAT 形式キーを使用して別の指定をする場合を除き、動画デコーダ実装は:

  • [C-4-1] サーフェス出力を使用して構成されている場合、デフォルトでハードウェア ディスプレイ用に最適化されたカラー形式にしなければなりません。
  • [C-4-2] サーフェス出力を使用しないように構成されている場合、デフォルトで CPU 読み込み用に最適化された YUV420 8:8:8 カラー形式にしなければなりません。

5.1.8. 動画コーデックのリスト

形式 / コーデック 詳細 サポートされるファイル形式 / コンテナ形式
H.263
  • 3GPP(.3gp)
  • MPEG-4(.mp4)
  • Matroska(.mkv、デコードのみ)
H.264 AVC 詳細についてはセクション 5.25.3 をご覧ください
  • 3GPP(.3gp)
  • MPEG-4(.mp4)
  • MPEG-2-TS(.ts、シーク不可)
  • Matroska(.mkv、デコードのみ)
H.265 HEVC 詳細についてはセクション 5.3 をご覧ください
  • MPEG-4(.mp4)
  • Matroska(.mkv、デコードのみ)
MPEG-2 メイン プロファイル
  • MPEG2-TS(.ts、シーク不可)
  • MPEG-4(.mp4、デコードのみ)
  • Matroska(.mkv、デコードのみ)
MPEG-4 SP
  • 3GPP(.3gp)
  • MPEG-4(.mp4)
  • Matroska(.mkv、デコードのみ)
VP8 詳細についてはセクション 5.25.3 をご覧ください
VP9 詳細についてはセクション 5.3 をご覧ください
AV1 詳細についてはセクション 5.2セクション 5.3 をご覧ください
  • MPEG-4(.mp4)
  • Matroska(.mkv、デコードのみ)

5.1.9. メディア コーデックのセキュリティ

デバイス実装は、下記のとおり、メディア コーデックのセキュリティ機能に確実に準拠しなければなりません。

Android は、クロス プラットフォームのマルチメディア アクセラレーション API である OMX と、低オーバーヘッド マルチメディア アクセラレーション API である Codec 2.0 をサポートしています。

マルチメディアをサポートする場合、デバイス実装は:

  • [C-1-1] Android オープンソース プロジェクトにあるように、OMX または Codec 2.0 API のいずれか(あるいは両方)を介してメディア コーデックのサポートを提供しなければならず、セキュリティ保護を無効化または回避してはなりません。具体的には、これはすべてのコーデックが OMX または Codec 2.0 API のいずれかを使用しなければならないということではなく、これらの API の少なくとも 1 つのサポートが利用可能でなければならず、利用可能な API のサポートは、存在するセキュリティ保護を含まなければならないということです。
  • [C-SR-1] Codec 2.0 API のサポートを含むことが強く推奨されます。

Codec 2.0 API をサポートしない場合、デバイス実装は:

  • [C-2-1] デバイスでサポートされているメディア形式とタイプ(エンコーダまたはデコーダ)ごとに、Android オープンソース プロジェクトの対応する OMX ソフトウェア コーデック(利用可能な場合)を含まなければなりません。
  • [C-2-2] 名前が「OMX.google」で始まるコーデックは、Android オープンソース プロジェクトのソースコードに基づいていなければなりません。
  • [C-SR-2] OMX ソフトウェア コーデックを、メモリマッパー以外のハードウェア ドライバにアクセスできないコーデック プロセスで実行することが強く推奨されます。

Codec 2.0 API をサポートする場合、デバイス実装は:

  • [C-3-1] デバイスでサポートされているメディア形式とタイプ(エンコーダまたはデコーダ)ごとに、Android オープンソース プロジェクトの対応する Codec 2.0 ソフトウェア コーデック(利用可能な場合)を含まなければなりません。
  • [C-3-2] Android オープンソース プロジェクトで提供されているように、Codec 2.0 ソフトウェア コーデックをソフトウェア コーデック プロセスに含めて、ソフトウェア コーデックへのアクセス権付与をより狭い範囲で行えるようにしなければなりません。
  • [C-3-3] 名前が「c2.android.」で始まるコーデックは、Android オープンソース プロジェクトのソースコードに基づいていなければなりません。

5.1.10. メディア コーデックの特性

メディア コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] MediaCodecInfo API を介して、メディア コーデックの正しい特性値を返さなければなりません。

具体的には、次のとおりです。

  • [C-1-2] 名前が「OMX.」で始まるコーデックは、OMX API を使用し、OMX IL 命名ガイドラインに沿った名前でなければなりません。
  • [C-1-3] 名前が「c2.」で始まるコーデックは、Codec 2.0 API を使用し、Android の Codec 2.0 命名ガイドラインに沿った名前でなければなりません。
  • [C-1-4] 名前が「OMX.google.」または「c2.android.」で始まるコーデックは、ベンダーまたはハードウェア アクセラレーションによるものとされてはなりません。
  • [C-1-5] メモリ アロケータとメモリマッパー以外のハードウェア ドライバにアクセスできるコーデック プロセス(ベンダーまたはシステム)で実行されるコーデックは、ソフトウェアのみとされてはなりません。
  • [C-1-6] Android オープンソース プロジェクトに存在しないか、そのソースコードに基づいていないコーデックは、ベンダーによるものとされなければなりません。
  • [C-1-7] ハードウェア アクセラレーションを利用するコーデックは、ハードウェア アクセラレーションによるものとされなければなりません。
  • [C-1-8] コーデック名は、誤解を招きやすいものであってはなりません。たとえば、名前が「decoders」のコーデックはデコードをサポートしなければならず、名前が「encoders」のコーデックはエンコードをサポートしなければなりません。名前にメディア形式を含むコーデックは、その形式をサポートしなければなりません。

デバイス実装が動画コーデックをサポートする場合:

  • [C-2-1] 動画コーデックはすべて、コーデックがサポートしている場合、次のサイズの達成可能なフレームレート データを公開しなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p UHD
動画の解像度
  • 176 x 144 px(H263、MPEG2、MPEG4)
  • 352 x 288 px(MPEG4 エンコーダ、H263、MPEG2)
  • 320 x 180 px(VP8、VP8)
  • 320 x 240 px(その他)
  • 704 x 576 px(H263)
  • 640 x 360 px(VP8、VP9)
  • 640 x 480 px(MPEG4 エンコーダ)
  • 720 x 480 px(その他、AV1)
  • 1,408 x 1,152 px(H263)
  • 1,280 x 720 px(その他、AV1)
1,920 x 1,080 px(MPEG4 以外、AV1) 3,840 x 2,160 px(HEVC、VP9、AV1)
  • [C-2-2] ハードウェア アクセラレーションによるものとされた動画コーデックは、パフォーマンス ポイント情報を公開しなければなりません。これらのコーデックは、サポート対象の別の標準パフォーマンス ポイントでカバーされている場合を除き、サポート対象のすべての標準パフォーマンス ポイント(PerformancePoint API に記載)をそれぞれリストしなければなりません。
  • さらに、リストされた標準的なもの以外の持続的な動画パフォーマンスをサポートする場合、拡張パフォーマンス ポイントを公開すべきです。

5.2. 動画のエンコード

デバイス実装が動画エンコーダをサポートし、サードパーティ アプリで利用でき、
MediaFormat.KEY_BITRATE_MODEBITRATE_MODE_VBR に設定してエンコーダが可変ビットレート モードで動作する場合、最低限の品質基準に影響しない限り、エンコード結果のビットレートは:

  • 1 つのスライディング ウィンドウで、イントラフレーム(I フレーム)間隔のビットレートが 15% を超えるべきではありません。
  • 1 秒のスライディング ウィンドウで、ビットレートが 100% を超えるべきではありません。

デバイス実装が動画エンコーダをサポートし、サードパーティ アプリで利用でき、MediaFormat.KEY_BITRATE_MODEBITRATE_MODE_CBR に設定してエンコーダが固定ビットレート モードで動作する場合、エンコード結果のビットレートは:

  • [C-SR-2] 1 秒のスライディング ウィンドウで、ターゲット ビットレートを 15% 以上超えないことが強く推奨されます。

対角長が 2.5 インチ以上の埋め込みスクリーン ディスプレイか動画出力ポートが含まれる場合、または android.hardware.camera.any 機能フラグを介してカメラのサポートを宣言する場合、デバイス実装は:

  • [C-1-1] VP8 または H.264 動画エンコーダのいずれかをサポートし、サードパーティ アプリで利用できるようにしなければなりません。
  • VP8 と H.264 の両方の動画エンコーダをサポートし、サードパーティ アプリで利用できるようにすべきです。

H.264、VP8、VP9、HEVC 動画エンコーダのいずれかをサポートし、サードパーティ アプリで利用できるようにする場合、デバイス実装は:

  • [C-2-1] 動的に設定可能なビットレートをサポートしなければなりません。
  • 可変フレームレートをサポートすべきです。ここで動画エンコーダは、入力バッファのタイムスタンプに基づいて瞬間的なフレーム持続時間を求め、そのフレーム持続時間に基づいてビットバケットを割り当てるべきです。

MPEG-4 SP 動画エンコーダをサポートし、サードパーティ アプリで利用できるようにする場合、デバイス実装は:

  • サポート対象のエンコーダの動的に設定可能なビットレートをサポートすべきです。

デバイス実装がハードウェア アクセラレーションの動画エンコーダまたは画像エンコーダを提供し、android.camera API を介して公開される接続されているかプラグイン可能なハードウェア カメラを 1 つ以上サポートする場合:

  • [C-4-1] ハードウェア アクセラレーションの動画エンコーダと画像エンコーダはすべて、ハードウェア カメラからのフレームのエンコードをサポートしなければなりません。
  • すべての動画エンコーダまたは画像エンコーダを通じて、ハードウェア カメラからのフレームのエンコードをサポートすべきです。

HDR エンコードを提供する場合、デバイス実装は:

  • [C-SR-1] HDR 形式から SDR 形式に変換するシームレスなコード変換 API のプラグインを提供することが強く推奨されます。

5.2.1. H.263

H.263 エンコーダをサポートし、サードパーティ アプリで利用できるようにする場合、デバイス実装は:

  • [C-1-1] ベースライン プロファイル レベル 45 を使用して QCIF 解像度(176 x 144)をサポートしなければなりません。SQCIF 解像度は省略可能です。

5.2.2. H.264

H.264 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] ベースライン プロファイル レベル 3 をサポートしなければなりません。ただし、ASO(Arbitrary Slice Ordering)、FMO(Flexible Macroblock Ordering)、RS(Redundant Slices)のサポートは任意です。さらに、他の Android デバイスとの互換性を維持するために、エンコーダでベースライン プロファイルに ASO、FMO、RS を使用しないことが推奨されます。
  • [C-1-2] 下表の SD(標準画質)動画エンコード プロファイルをサポートしなければなりません。
  • メイン プロファイル レベル 4 をサポートすべきです。
  • 下表に示すとおり、HD(高画質)動画エンコード プロファイルをサポートすべきです。

メディア API を通じて解像度が 720p または 1080p である動画の H.264 エンコードのサポートをレポートする場合、デバイス実装は:

  • [C-2-1] 下表のエンコード プロファイルをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p
動画の解像度 320 x 240 px 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px
動画のフレームレート 20 fps 30 fps 30 fps 30 fps
動画のビットレート 384 Kbps 2 Mbps 4 Mbps 10 Mbps

5.2.3. VP8

VP8 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] SD 動画エンコード プロファイルをサポートしなければなりません。
  • 次の HD(高画質)動画エンコード プロファイルをサポートすべきです。
  • [C-1-2] Matroska WebM ファイルの書き込みをサポートしなければなりません。
  • ウェブ動画配信サービスとビデオ会議サービスの質を許容可能なものにするために、WebM プロジェクトの RTC ハードウェア コーディング要件を満たすハードウェア VP8 コーデックを提供すべきです。

メディア API を通じて解像度が 720p または 1080p である動画の VP8 エンコードのサポートをレポートする場合、デバイス実装は:

  • [C-2-1] 下表のエンコード プロファイルをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p
動画の解像度 320 x 180 ピクセル 640 x 360 ピクセル 1,280 x 720 ピクセル 1,920 x 1,080 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps
動画のビットレート 800 Kbps 2 Mbps 4 Mbps 10 Mbps

5.2.4. VP9

VP9 コーデックをサポートする場合、デバイス実装は:

  • [C-1-2] プロファイル 0 レベル 3 をサポートしなければなりません。
  • [C-1-1] Matroska WebM ファイルの書き込みをサポートしなければなりません。
  • [C-1-3] CodecPrivate データを生成しなければなりません。
  • 下表に示すとおり、HD デコード プロファイルをサポートすべきです。
  • [C-SR-1] ハードウェア エンコーダがある場合、下表に示すとおり、HD デコード プロファイルをサポートすることが強く推奨されます。
SD HD 720p HD 1080p UHD
動画の解像度 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps
動画のビットレート 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

メディア API を通じてプロファイル 2 またはプロファイル 3 をサポートすることを主張する場合、デバイス実装は:

  • 12 ビット形式のサポートは任意です。

5.2.5. H.265

H.265 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] メイン プロファイル レベル 3 と最大 512 x 512 の解像度をサポートしなければなりません。
  • [C-SR-1] ハードウェア エンコーダがある場合、下表に示すとおり、720 x 480 SD プロファイルと HD エンコード プロファイルをサポートすることが強く推奨されます。
SD HD 720p HD 1080p UHD
動画の解像度 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps
動画のビットレート 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

5.2.6. AV1

AV1 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] 8 ビットと 10 ビットのコンテンツを含め、メイン プロファイルをサポートしなければなりません。
  • [C-1-2] 下表に示すサポート対象の解像度について、パフォーマンス データを公開、つまり、getSupportedFrameRatesFor() API または getSupportedPerformancePoints() API を介してパフォーマンス データをレポートしなければなりません。

  • [C-1-3] HDR メタデータを受け入れ、ビットストリームに出力しなければなりません。

ハードウェア アクセラレーションを使用している場合、AV1 エンコーダは:

  • [C-2-1] 下表に示す HD 1080p のエンコード プロファイルまでサポートしなければなりません。
SD HD 720p HD 1080p UHD
動画の解像度 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps
動画のビットレート 5 Mbps 8 Mbps 16 Mbps 50 Mbps

5.3. 動画のデコード

VP8、VP9、H.264 または H.265 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] VP8、VP9、H.264、H.265 のすべてのコーデックについて、デバイスで各コーデックがサポートする最大解像度まで、同じストリーム内で標準の Android API を通じて、動的な動画解像度とフレームレートの切り替えをサポートしなければなりません。

5.3.1. MPEG-2

MPEG-2 デコーダをサポートする場合、デバイス実装は:

  • [C-1-1] メイン プロファイル ハイレベルをサポートしなければなりません。

5.3.2. H.263

H.263 デコーダをサポートする場合、デバイス実装は:

  • [C-1-1] ベースライン プロファイル レベル 30(CIF、QCIF、SQCIF 解像度、30 fps、384 kbps)とレベル 45(QCIF、SQCIF 解像度、30 fps、128 kbps)をサポートしなければなりません。

5.3.3. MPEG-4

MPEG-4 デコーダを備える場合、デバイス実装は:

  • [C-1-1] シンプル プロファイル レベル 3 をサポートしなければなりません。

5.3.4. H.264

H.264 デコーダをサポートする場合、デバイス実装は:

  • [C-1-1] メイン プロファイル レベル 3.1 とベースライン プロファイルをサポートしなければなりません。ASO(Arbitrary Slice Ordering)、FMO(Flexible Macroblock Ordering)、RS(Redundant Slices)のサポートは任意です。
  • [C-1-2] 下表に記載されている SD(標準画質)プロファイルで動画をデコードでき、ベースライン プロファイルとメイン プロファイル レベル 3.1(720p30 を含む)でエンコードできなければなりません。
  • 下表に示すとおり、HD(高画質)プロファイルで動画をデコードできるべきです。

Display.getSupportedModes() メソッドでレポートされる高さが動画の解像度以上である場合、デバイス実装は:

  • [C-2-1] 下表の HD 720p 動画デコード プロファイルをサポートしなければなりません。
  • [C-2-2] 下表の HD 1080p 動画デコード プロファイルをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p
動画の解像度 320 x 240 px 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px
動画のフレームレート 30 fps 30 fps 60 fps 30 fps(60 fpsテレビ
動画のビットレート 800 Kbps 2 Mbps 8 Mbps 20 Mbps

5.3.5. H.265(HEVC)

H.265 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] 下表に示すとおり、メイン プロファイル レベル 3 メインティアと SD 動画エンコード プロファイルをサポートしなければなりません。
  • 下表に示すとおり、HD デコード プロファイルをサポートすべきです。
  • [C-1-2] ハードウェア デコーダがある場合、下表に示すとおり、HD デコード プロファイルをサポートしなければなりません。

Display.getSupportedModes() メソッドによってレポートされる高さが動画の解像度以上である場合:

  • [C-2-1] デバイス実装は、720、1080、UHD プロファイルの H.265 または VP9 デコードのうち少なくとも 1 つをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p UHD
動画の解像度 352 x 288 px 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 / 60 fps(60 fpsH.265 ハードウェア デコードを備えたテレビ 60 fps
動画のビットレート 600 Kbps 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

メディア API を通じて HDR プロファイルのサポートを主張する場合、デバイス実装は:

  • [C-3-1] デバイス実装は、必要な HDR メタデータをアプリから受け入れ、必要な HDR メタデータをビットストリームやコンテナから抽出、出力することをサポートしなければなりません。
  • [C-3-2] デバイス実装は、HDR コンテンツをデバイスの画面または標準の動画出力ポート(例: HDMI)に適切に表示しなければなりません。

5.3.6. VP8

VP8 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] 下表の SD デコード プロファイルをサポートしなければなりません。
  • 要件を満たすハードウェア VP8 コーデックを使用すべきです。
  • 下表の HD デコード プロファイルをサポートすべきです。

Display.getSupportedModes() メソッドによってレポートされる高さが動画の解像度以上である場合:

  • [C-2-1] デバイス実装は下表の 720p プロファイルをサポートしなければなりません。
  • [C-2-2] デバイス実装は下表の 1080p プロファイルをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p
動画の解像度 320 x 180 ピクセル 640 x 360 ピクセル 1,280 x 720 ピクセル 1,920 x 1,080 px
動画のフレームレート 30 fps 30 fps 30 fps(60 fpsテレビ 30(60 fpsテレビ
動画のビットレート 800 Kbps 2 Mbps 8 Mbps 20 Mbps

5.3.7. VP9

VP9 コーデックをサポートする場合、デバイス実装は:

  • [C-1-1] 下表に示すとおり SD 動画デコード プロファイルをサポートしなければなりません。
  • 下表に示すとおり、HD デコード プロファイルをサポートすべきです。

デバイス実装が VP9 コーデックとハードウェア デコーダをサポートする場合:

  • [C-2-1] 下表に示すとおり、HD デコード プロファイルをサポートしなければなりません。

Display.getSupportedModes() メソッドによってレポートされる高さが動画の解像度以上である場合:

  • [C-3-1] デバイス実装は、720、1080、UHD プロファイルの VP9 または H.265 デコードのうち少なくとも 1 つをサポートしなければなりません。
SD(低画質) SD(高画質) HD 720p HD 1080p UHD
動画の解像度 320 x 180 ピクセル 640 x 360 ピクセル 1,280 x 720 ピクセル 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps(60 fpsVP9 ハードウェア デコードを備えたテレビ 60 fps
動画のビットレート 600 Kbps 1.6 Mbps 4 Mbps 5 Mbps 20 Mbps

デバイス実装が CodecProfileLevel メディア API を通じて VP9Profile2 または VP9Profile3 のサポートを主張する場合:

  • 12 ビット形式のサポートは任意です。

デバイス実装がメディア API を通じて HDR プロファイル(VP9Profile2HDRVP9Profile2HDR10PlusVP9Profile3HDRVP9Profile3HDR10Plus)のサポートを主張する場合:

  • [C-4-1] デバイス実装は、必要な HDR メタデータ(すべての HDR プロファイルで KEY_HDR_STATIC_INFO、HDR10Plus プロファイルで 'KEY_HDR10_PLUS_INFO')をアプリから受け入れなければなりません。また、必要な HDR メタデータをビットストリームやコンテナから抽出、出力することをサポートしなければなりません。
  • [C-4-2] デバイス実装は、HDR コンテンツをデバイスの画面または標準の動画出力ポート(例: HDMI)に適切に表示しなければなりません。

5.3.8. ドルビー ビジョン

HDR_TYPE_DOLBY_VISION を通じてドルビー ビジョン デコーダのサポートを宣言する場合、デバイス実装は:

  • [C-1-1] ドルビー ビジョン対応エクストラクタを提供しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-2](2023 年 12 月 11 日プレビュー)

  • [C-1-2] ドルビー ビジョン コンテンツをデバイスの画面または標準の動画出力ポート(例: HDMI)経由でアタッチされた外部ディスプレイどちらかに適切に表示しなければなりません。

新しい要件の終了

  • [C-1-3] 下位互換性のあるベースレイヤ(存在する場合)のトラック ID を、結合したドルビー ビジョンレイヤのトラック ID と同じに設定しなければなりません。

5.3.9. AV1

AV1 コーデックをサポートし、サードパーティ アプリで利用可能にする場合、デバイス実装は:

  • [C-1-1] 8 ビットと 10 ビットのコンテンツを含め、メイン プロファイルをサポートしなければなりません。

ハードウェア アクセラレーテッド デコーダによる AV1 コーデックのサポートを提供する場合、デバイス実装は:

  • [C-2-1] Display.getSupportedModes() メソッドによって報告される高さが 720p 以上である場合、下表から少なくとも HD 720p の動画デコード プロファイルをデコードできなければなりません。
  • [C-2-2] Display.getSupportedModes() メソッドによって報告される高さが 1080p 以上である場合、下表から少なくとも HD 1080p の動画デコード プロファイルをデコードできなければなりません。
SD HD 720p HD 1080p UHD
動画の解像度 720 x 480 px 1,280 x 720 px 1,920 x 1,080 px 3,840 x 2,160 px
動画のフレームレート 30 fps 30 fps 30 fps 30 fps
動画のビットレート 5 Mbps 8 Mbps 16 Mbps 50 Mbps

Media API を通じて HDR プロファイルをサポートする場合、デバイス実装は:

  • [C-3-1] ビットストリームとコンテナの両方または一方からの HDR メタデータの抽出と出力をサポートしなければなりません。
  • [C-3-2] HDR コンテンツをデバイスの画面または標準の動画出力ポート(例: HDMI)に適切に表示しなければなりません。

5.4. 録音

このセクションで概説している一部の要件は、Android 4.3 以降「すべき」として記載されていますが、今後のバージョンの互換性定義では「しなければならない」に変更される予定です。既存と新規の Android デバイスは、「すべき」として記載されている要件を満たすことが強く推奨されます。満たさなかった場合、今後のバージョンにアップグレードした際に、Android の互換性が得られなくなります。

5.4.1. 未加工オーディオのキャプチャとマイク情報

android.hardware.microphone を宣言する場合、デバイス実装は:

  • [C-1-1] 正常にオープンされた AudioRecord または AAudio のすべての入力ストリームについて、未加工オーディオ コンテンツをキャプチャできるようにしなければなりません。少なくとも、次の特性をサポートしなければなりません。

  • 次の特性を持つ未加工オーディオ コンテンツをキャプチャできるようにすべきです。

    • 形式: リニア PCM、16 ビットと 24 ビット
    • サンプリング レート: 8,000、11,025、16,000、22,050、24,000、32,000、44,100、48,000 Hz
    • チャンネル: デバイスのマイクと同じ数のチャンネル
  • [C-1-2] アップサンプリングせずに上記のサンプルレートでキャプチャしなければなりません。

  • [C-1-3] 上記のサンプルレートがダウンサンプリングでキャプチャされる場合、適切なアンチエイリアス フィルタを含まなければなりません。

  • 未加工オーディオ コンテンツを、AM ラジオと DVD の品質(つまり下記の特性)でキャプチャできるようにすべきです。

    • 形式: リニア PCM、16 ビット
    • サンプリング レート: 22,050、48,000 Hz
    • チャンネル: ステレオ
  • [C-1-4] MediaRecorder.AudioSources DEFAULTMICCAMCORDERVOICE_RECOGNITIONVOICE_COMMUNICATIONUNPROCESSED、または VOICE_PERFORMANCE を使用するアクティブな AudioRecord については、MicrophoneInfo API を尊重し、AudioManager.getMicrophones() API を介してサードパーティ アプリがアクセスできるデバイス上の利用可能なマイクの情報を適切に入力しなければなりません。未加工オーディオ コンテンツを AM ラジオと DVD の品質でキャプチャできるようにする場合、デバイス実装は:

  • [C-2-1] 16,000:22,050 または 44,100:48,000 を超える比率でアップサンプリングせずにキャプチャしなければなりません。

  • [C-2-2] アップサンプリングまたはダウンサンプリングのための適切なアンチエイリアス フィルタを含まなければなりません。

5.4.2. 音声認識用のキャプチャ

android.hardware.microphone を宣言する場合、デバイス実装は:

  • [C-1-1] 44,100 と 48,000 いずれかのサンプリング レートで android.media.MediaRecorder.AudioSource.VOICE_RECOGNITION 音源をキャプチャしなければなりません。
  • [C-1-2] AudioSource.VOICE_RECOGNITION 音源からのオーディオ ストリームを録音するとき、ノイズ リダクション オーディオ処理をデフォルトで無効にしなければなりません。
  • [C-1-3] AudioSource.VOICE_RECOGNITION 音源からのオーディオ ストリームを録音するとき、自動ゲイン コントロールをデフォルトで無効にしなければなりません。

  • 音声認識の音源を録音するために使用する各マイクすべてについて、中間周波数範囲でほぼ平坦な振幅周波数特性を示すべきです(具体的には ±3 dB、100 Hz~4,000 Hz)。

  • [C-SR-1] 音声認識の音源を録音するために使用する各マイクすべてについて、中間周波数範囲と比較して低い周波数範囲の振幅レベルを示すことが強く推奨されます(具体的には ±20 dB、30 Hz~100 Hz)。

  • [C-SR-2] 音声認識の音源を録音するために使用する各マイクすべてについて、中間周波数範囲と比較して高い周波数範囲の振幅レベルを示すことが強く推奨されます(具体的には ±30 dB、4,000 Hz~22 kHz)。

  • 音声認識の音源を録音するために使用する各マイクすべてについて、音圧レベル(SPL)90 dB で再生された 1,000 Hz 正弦波音源(マイクの隣で測定)が、16 ビットサンプルで RMS 1,770~3,530 の範囲のレスポンス(理想的には RMS 2,500)になるように(浮動小数点 / 倍精度サンプルの場合は -22.35 dB ±3dB フルスケール)、オーディオ入力感度を設定すべきです。

  • マイクでの 90 dB SPL から少なくとも 30 dB(-18 dB~+12 dB)の範囲で PCM 振幅レベルが入力 SPL の変化を線形的にトラックするように、音声認識のオーディオ ストリームを録音すべきです。

  • 全高調波歪み(THD)がマイクでの SPL 入力レベル 90 dB で 1 kHz に対して 1% 未満になるように、音声認識のオーディオ ストリームを録音すべきです。

android.hardware.microphone と、音声認識用に調整したノイズ キャンセレーション(リダクション)技術を宣言する場合、デバイス実装は:

  • [C-2-1] このオーディオ エフェクトを android.media.audiofx.NoiseSuppressor API で制御できるようにしなければなりません。
  • [C-2-2] AudioEffect.Descriptor.uuid フィールドを介して各ノイズ キャンセレーション技術実装を一意に識別しなければなりません。

5.4.3. 再生のリルート用のキャプチャ

android.media.MediaRecorder.AudioSource クラスには REMOTE_SUBMIX 音源が含まれています。

android.hardware.audio.outputandroid.hardware.microphone を両方とも宣言する場合、デバイス実装は:

  • [C-1-1] REMOTE_SUBMIX 音源を適切に実装して、アプリが android.media.AudioRecord API を使用してこの音源から録音するとき、下記を除くすべてのオーディオ ストリームのミックスをキャプチャするようにしなければなりません。

    • AudioManager.STREAM_RING
    • AudioManager.STREAM_ALARM
    • AudioManager.STREAM_NOTIFICATION

5.4.4. 音響エコー キャンセラ

android.hardware.microphone を宣言する場合、デバイス実装は:

  • AudioSource.VOICE_COMMUNICATION を使用してキャプチャするときにキャプチャパスに適用される、音声通信用に調整された音響エコー キャンセラ(AEC)技術を実装すべきです。

AudioSource.VOICE_COMMUNICATION が選択されたときにキャプチャ オーディオパスに挿入される音響エコー キャンセラを提供する場合、デバイス実装は:

5.4.5. 同時キャプチャ

android.hardware.microphone を宣言する場合、デバイス実装は、こちらのドキュメントに記載されているとおり同時キャプチャを実装しなければなりません。具体的には次のとおりです。

  • [C-1-1] AudioSource.VOICE_RECOGNITION でキャプチャするユーザー補助サービスと、任意の AudioSource でキャプチャする少なくとも 1 つのアプリから、マイクに同時アクセスできるようにしなければなりません。
  • [C-1-2] アシスタントのロールを持つプリインストール アプリと、任意の AudioSourceAudioSource.VOICE_COMMUNICATION または AudioSource.CAMCORDER を除く)でキャプチャする少なくとも 1 つのアプリから、マイクに同時アクセスできるようにしなければなりません。
  • [C-1-3] アプリが AudioSource.VOICE_COMMUNICATION または AudioSource.CAMCORDER でキャプチャしている間、ユーザー補助サービスを除き、他のアプリのオーディオ キャプチャを消音しなければなりません。ただし、アプリが AudioSource.VOICE_COMMUNICATION を介してキャプチャしているときは、別のアプリ(権限 CAPTURE_AUDIO_OUTPUT を付与されたプリインストールの特権アプリ)で音声通話をキャプチャできます。
  • [C-1-4] 複数のアプリが同時にキャプチャしていて、どちらのアプリも UI が最上位にない場合、最後にキャプチャを開始したアプリがオーディオを受信します。

5.5. オーディオの再生

Android には、セクション 7.8.2 で規定されているとおり、アプリがオーディオ出力周辺機器を通じてオーディオを再生できるようにするサポートが含まれています。

5.5.1. 未加工オーディオの再生

android.hardware.audio.output を宣言する場合、デバイス実装は:

  • [C-1-1] 次の特性を持つ未加工オーディオ コンテンツを再生できるようにしなければなりません。

    • 音源形式: リニア PCM、16 ビット、8 ビット、浮動小数点
    • チャンネル: モノラル、ステレオ、最大 8 チャンネルの有効なマルチチャンネル構成
    • サンプリング レート(Hz):
      • 上のチャンネル構成で 8,000、11,025、16,000、22,050、24,000、32,000、44,100、48,000
      • モノラルとステレオで 96,000

5.5.2. オーディオ エフェクト

Android は、デバイス実装にオーディオ エフェクト用の API を提供します。

機能 android.hardware.audio.output を宣言する場合、デバイス実装は:

  • [C-1-1] AudioEffect のサブクラス EqualizerLoudnessEnhancer を通じて制御できる EFFECT_TYPE_EQUALIZER 実装と EFFECT_TYPE_LOUDNESS_ENHANCER 実装をサポートしなければなりません。
  • [C-1-2] Visualizer クラスを通じて制御できるビジュアライザ API 実装をサポートしなければなりません。
  • [C-1-3] AudioEffect のサブクラス DynamicsProcessing を通じて制御できる EFFECT_TYPE_DYNAMICS_PROCESSING 実装をサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-4](2024 年 2 月 5 日プレビュー)

  • [C-1-4] エフェクト結果がフレームワーク オーディオ パイプラインに返される場合、浮動小数点入力と出力によるオーディオ エフェクトをサポートしなければなりません。これは、イコライザーのような典型的なインサート エフェクトや aux エフェクトを指します。フレームワーク オーディオ パイプライン(ポストプロセスやオフロード エフェクトなど)からエフェクト結果が確認できない場合、同等の挙動が強く推奨されます

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-5](2024 年 2 月 5 日プレビュー)

  • [C-1-5] エフェクト結果がフレームワーク オーディオ パイプラインに返される場合、オーディオ エフェクトが、最大でミキサー チャンネル数(FCC_LIMIT)と同じ数までの複数のチャンネルをサポートするようにしなければなりません。これは、典型的なインサート エフェクトや aux エフェクトを指しますが、チャンネル カウントを変更するダウンミックス、アップミックス、立体化エフェクトなどの特別なエフェクトは除きます。フレームワーク オーディオ パイプライン(ポストプロセスやオフロード エフェクトなど)からエフェクト結果が確認できない場合、同等の挙動が推奨されます

新しい要件の終了

  • AudioEffect のサブクラス BassBoostEnvironmentalReverbPresetReverbVirtualizer を通じて制御できる EFFECT_TYPE_BASS_BOOSTEFFECT_TYPE_ENV_REVERBEFFECT_TYPE_PRESET_REVERBEFFECT_TYPE_VIRTUALIZER 実装をサポートすべきです。
  • [C-SR-1] 浮動小数点とマルチチャンネルのエフェクトをサポートすることが強く推奨されます。

5.5.3. 出力音量

自動車デバイス実装は:

  • AudioAttributes で定義されているコンテンツ タイプまたは用途と、android.car.CarAudioManager で公開で定義されているカーオーディオ用途を使用して、音量をオーディオ ストリームごとに調整できるようにすべきです。

5.5.4. オーディオ オフロード

オーディオ オフロード再生をサポートする場合、デバイス実装は:

  • [C-SR-1] AudioTrack gapless API と MediaPlayer のメディア コンテナで指定されている場合、再生されるギャップレス オーディオ コンテンツを、同じ形式の 2 つのクリップ間でトリミングすることが強く推奨されます。

5.6. オーディオ レイテンシ

オーディオ レイテンシとは、オーディオ信号がシステムを通過する際に発生する遅延時間のことです。アプリのクラスの多くで、リアルタイムのサウンド エフェクトを実現するには、レイテンシが短くなっている必要があります。

このセクションでは、次の定義を使用します。

  • 出力レイテンシ。アプリが PCM 符号化データを書き込んでから、対応するサウンドがデバイス上のトランスデューサで環境に提供されるか、信号がポートを介してデバイスから出て外部で確認されるまでの間隔。
  • コールド出力レイテンシ。リクエストの前にオーディオ出力システムがアイドル状態になり、電源がオフになった場合の、出力ストリームの開始からタイムスタンプに基づく最初のフレームの表示時間までの時間。
  • 連続出力レイテンシ。デバイスがオーディオを再生した後の、後続フレームの出力レイテンシ。
  • 入力レイテンシ。サウンドが環境によってデバイス上のトランスデューサでデバイスに提供されるか、信号がポートを介してデバイスに入ってから、PCM 符号化データの対応するフレームをアプリが読み取るまでの間隔。
  • 欠損入力。使用または利用できない、入力信号の最初の部分。
  • コールド入力レイテンシ。リクエストの前にオーディオ入力システムがアイドル状態になり、電源がオフになった場合の、ストリームの開始から最初の有効なフレームを受信するまでの時間。
  • 連続入力レイテンシ。デバイスがオーディオをキャプチャしている間の、後続フレームの入力レイテンシ。
  • 連続ラウンドトリップ レイテンシ。連続入力レイテンシ、連続出力レイテンシ、1 バッファ期間の合計。バッファ期間により、アプリが信号を処理するための時間と、アプリが入出力ストリーム間の位相差を緩和するための時間を確保できます。
  • OpenSL ES PCM バッファキュー APIAndroid NDK 内にある、PCM 関連の OpenSL ES API のセット。
  • AAudio ネイティブ オーディオ APIAndroid NDK 内にある、AAudio API のセット。
  • タイムスタンプ。ストリーム内の相対フレーム位置と、そのフレームが関連エンドポイントのオーディオ処理パイプラインに出入りする推定時間からなるペア。AudioTimestamp もご覧ください。
  • グリッチ。オーディオ信号の一時的な中断または不正なサンプル値。通常は、出力のバッファ アンダーラン、入力のバッファ オーバーラン、他のデジタルまたはアナログノイズ発生源によって発生します。
  • 平均絶対偏差(MAD)。一連の値の平均からの偏差の絶対値の平均。

15(AOSP 試験運用版)の新しい要件の開始

[TTL、RTL、MPC、FEATURE_AUDIO_PRO の定義]

  • CTS 検証ツールで測定されるタップツートーン レイテンシ(TTL)とは、画面がタップされてから、タップの結果として生成される音がスピーカーから聞こえるまでの時間のことです。出力には AAudio ネイティブ オーディオ API を使用し、5 回の測定が平均化されます。

  • CTS 検証ツールで測定されるラウンドトリップ レイテンシ(RTL)とは、AAudio ネイティブ オーディオ API を使用し、出力を入力に送るループバック パスで測定された、5 回の測定における平均連続レイテンシです。ループバック パスは次のとおりです。

    • スピーカー / マイク: 内蔵スピーカーから内蔵マイク。
    • アナログ: 3.5 mm のアナログ ジャックとループバック アダプタ。
    • USB: USB から 3.5 mm アダプタとループバック アダプタ、もしくは USB オーディオ インターフェースとループバック ケーブル。
  • FEATURE_AUDIO_PROandroid.hardware.audio.pro 機能は宣言されています。

  • MPC。メディア パフォーマンス クラス

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[ヘッド トラッキング レイテンシの定義](2024 年 2 月 26 日プレビュー)

  • ヘッド トラッキング レイテンシ。慣性計測装置(IMU)が頭の動きを捉えてから、その動きに起因する音の変化をヘッドフォン トランスデューサが検出するまでの時間として定義されます。

新しい要件の終了

android.hardware.audio.output を宣言する場合、デバイス実装は、次の要件を満たすか上回らなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-1](2024 年 2 月 5 日プレビュー)

  • [C-1-1] AudioTrack.getTimestampAAudioStream_getTimestamp から返される出力タイムスタンプの正確度が +/- 2 ms。

新しい要件の終了

  • [C-1-2] コールド出力レイテンシが 500 ミリ秒以下。

  • [C-1-3] AAudioStreamBuilder_openStream() を使用して出力ストリームを開始するのに要する時間が 1,000 ミリ秒未満でなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-4](2024 年 2 月 5 日プレビュー)

  • [C-1-4] AAudioStream_getTimestamp によって返される入力タイムスタンプと出力タイムスタンプに基づいて計算されたラウンドトリップ レイテンシと、スピーカー、有線ヘッドセット、ワイヤレス ヘッドセットの AAUDIO_PERFORMANCE_MODE_NONEAAUDIO_PERFORMANCE_MODE_LOW_LATENCY で測定されたラウンドトリップ レイテンシとの誤差は 200 ミリ秒以内でなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-1、C-SR-2、C-SR-4](2024 年 2 月 5 日プレビュー)

android.hardware.audio.output を宣言する場合、デバイス実装は、次の要件を満たすか上回ることが強く推奨されます。

  • [C-SR-1] スピーカー データパスでコールド出力レイテンシが 100 ミリ秒以下。

  • [C-SR-2] タップツートーン レイテンシが 80 ミリ秒以下。

  • [C-SR-4] AAudioStream_getTimestamp によって返される入力タイムスタンプと出力タイムスタンプに基づいて計算されたラウンドトリップ レイテンシと、スピーカー、有線ヘッドセット、ワイヤレス ヘッドセットの AAUDIO_PERFORMANCE_MODE_NONEAAUDIO_PERFORMANCE_MODE_LOW_LATENCY について測定されたラウンド トリップ レイテンシとの誤差が 30 ミリ秒以内であることが強く推奨されます。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-5、C-SR-6、C-SR-7](2024 年 2 月 5 日プレビュー)

上記の要件を満たす場合、初期キャリブレーションの後、AAudio ネイティブ オーディオ API を使用しているとき、少なくとも 1 つのサポート対象オーディオ出力デバイスでの連続出力レイテンシとコールド出力レイテンシについて、デバイス実装は:

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-2-1](2024 年 2 月 5 日プレビュー)

AAudio ネイティブ オーディオ API を介して低レイテンシ オーディオの要件を満たさない場合、デバイス実装は:

  • [C-2-1] 低レイテンシ オーディオのサポートをレポートしてはなりません。

新しい要件の終了

android.hardware.microphone が含まれる場合、デバイス実装は下記の入力オーディオの要件を満たさなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-3-1](2024 年 2 月 5 日プレビュー)

  • [C-3-1] AudioRecord.getTimestamp または AAudioStream_getTimestamp が返す入力タイムスタンプの誤差を +/- 2 ms に制限します。ここでいう誤差とは、正しい値からのずれのことです。

新しい要件の終了

  • [C-3-2] コールド入力レイテンシが 500 ミリ秒以下。
  • [C-3-3] AAudioStreamBuilder_openStream() を使用して入力ストリームを開くために要する時間が 1,000 ミリ秒未満でなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-8、C-SR-11](2024 年 2 月 5 日プレビュー)

android.hardware.microphone が含まれる場合、デバイス実装は下記の入力オーディオの要件を満たすことが強く推奨されます。

  • [C-SR-8] マイク データパスでコールド入力レイテンシが 100 ミリ秒以下。
  • [C-SR-11] AudioRecord.getTimestamp または AAudioStream_getTimestamp が返す入力タイムスタンプの誤差を +/- 1 ms に制限する。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-12](2024 年 2 月 5 日プレビュー)

android.hardware.audio.outputandroid.hardware.microphone を宣言する場合、デバイス実装は:

  • [C-SR-12] 少なくとも 1 つのサポート対象パスで、5 回測定して平均連続ラウンドトリップ レイテンシが 50 ミリ秒以下、平均絶対偏差が 10 ミリ秒未満であることが強く推奨されます。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[RTL の要件](2024 年 2 月 5 日プレビュー)

次の表は、android.hardware.audio.output および android.hardware.microphone を宣言し、2.2.1 で定義されたハンドヘルド デバイスの実装における RTL の要件を定義しています。

デバイスと宣言 RTL(ミリ秒) MAD(ミリ秒) ループバック パス
ハンドヘルド 250 30 スピーカー / マイク、アナログ 3.5 mm(サポートされている場合)、USB(サポートされている場合)
>= MPC_T (14) 80 15 少なくとも 1 つのパス
FEATURE_AUDIO_LOW_LATENCY 50 10 少なくとも 1 つのパス
FEATURE_AUDIO_PRO 25 5 少なくとも 1 つのパス
FEATURE_AUDIO_PRO 20 5 アナログ(サポートされている場合)
FEATURE_AUDIO_PRO 25 5 USB(アナログがサポートされていない場合)

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[TTL の要件](2024 年 2 月 5 日プレビュー)

次の表は、android.hardware.audio.output および android.hardware.microphone を宣言し、2.2.1 で定義されたハンドヘルド デバイスの実装における TTL の要件を定義しています。

デバイスと宣言 TTL(ミリ秒)
ハンドヘルド 250
>= MPC_T (14) 80
MPC_S (13) 100
FEATURE_AUDIO_PRO 80

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-4-1](2024 年 2 月 26 日プレビュー)

ヘッド トラッキングを備える spatial audio のサポートが含まれ、PackageManager.FEATURE_AUDIO_SPATIAL_HEADTRACKING_LOW_LATENCY フラグを宣言する場合、デバイス実装は:

  • [C-4-1] 最大 300 ミリ秒のヘッド トラッキングからオーディオ更新のレイテンシを示さなければなりません。

新しい要件の終了

5.7. ネットワーク プロトコル

デバイス実装は、Android SDK ドキュメントで規定されているとおり、オーディオと動画を再生するためにメディア ネットワーク プロトコルをサポートしなければなりません。

サポートするためにデバイス実装が必要となるコーデックとコンテナ形式ごとに、デバイス実装は:

  • [C-1-1] HTTP と HTTPS でそのコーデックまたはコンテナをサポートしなければなりません。

  • [C-1-2] HTTP Live Streaming ドラフト プロトコル バージョン 7 で、下表「メディア セグメント形式」に示す対応するメディア セグメント形式をサポートしなければなりません。

  • [C-1-3] 下表「RTSP」に示す対応する RTSP ペイロード形式をサポートしなければなりません。例外については、セクション 5.1 の表の脚注をご覧ください。

メディア セグメント形式

セグメント形式 参照 必要なコーデックのサポート
MPEG-2 トランスポート ストリーム ISO 13818 動画コーデック:
  • H264 AVC
  • MPEG-4 SP
  • MPEG-2
H264 AVC、MPEG2-4 SP、MPEG-2 の詳細についてはセクション 5.1.8 をご覧ください。

オーディオ コーデック:

  • 先進的音響符号化
AAC とそのバリアントの詳細についてはセクション 5.1.3 をご覧ください。
ADTS フレーム処理と ID3 タグを伴う AAC ISO 13818-7 AAC とそのバリアントの詳細についてはセクション 5.1.1 をご覧ください
WebVTT WebVTT

RTSP(RTP、SDP)

プロファイル名 参照 必要なコーデックのサポート
H264 AVC RFC 6184 H264 AVC の詳細についてはセクション 5.1.8 をご覧ください
MP4A-LATM RFC 6416 AAC とそのバリアントの詳細についてはセクション 5.1.3 をご覧ください
H263-1998 RFC 3551
RFC 4629
RFC 2190
H263 の詳細についてはセクション 5.1.8 をご覧ください
H263-2000 RFC 4629 H263 の詳細についてはセクション 5.1.8 をご覧ください
AMR RFC 4867 AMR-NB の詳細についてはセクション 5.1.3 をご覧ください
AMR-WB RFC 4867 AMR-WB の詳細についてはセクション 5.1.3 をご覧ください
MP4V-ES RFC 6416 MPEG-4 SP の詳細についてはセクション 5.1.8 をご覧ください
mpeg4-generic RFC 3640 AAC とそのバリアントの詳細についてはセクション 5.1.3 をご覧ください
MP2T RFC 2250 詳細については HTTP Live Streaming の下の MPEG-2 トランスポート ストリームをご覧ください

5.8. セキュア メディア

セキュア動画出力をサポートし、セキュア サーフェスをサポートできる場合、デバイス実装は:

  • [C-1-1] Display.FLAG_SECURE のサポートを宣言しなければなりません。

Display.FLAG_SECURE のサポートを宣言し、ワイヤレス ディスプレイ プロトコルをサポートする場合、デバイス実装は:

  • [C-2-1] Miracast のようなワイヤレス プロトコルを通じて接続されたディスプレイについて、HDCP 2.x 以降のような暗号強度の高いメカニズムによって、リンクをセキュアにしなければなりません。

Display.FLAG_SECURE のサポートを宣言し、有線外部ディスプレイをサポートする場合、デバイス実装は:

  • [C-3-1] ユーザーがアクセス可能な有線ポートを介して接続されたすべての外部ディスプレイについて、HDCP 1.2 以降をサポートしなければなりません。

5.9. 電子楽器デジタル インターフェース(MIDI)

android.content.pm.PackageManager クラスを介して機能 android.software.midi のサポートをレポートする場合、デバイス実装は:

  • [C-1-1] 一般的な非 MIDI 接続を提供するすべての MIDI 対応ハードウェア トランスポートで MIDI をサポートしなければなりません。ここでいうトランスポートは次のとおりです。

  • [C-1-2] アプリ間 MIDI ソフトウェア トランスポート(仮想 MIDI デバイス)をサポートしなければなりません。

  • [C-1-3] libamidi.so(ネイティブ MIDI サポート)を含まなければなりません。

  • USB ペリフェラル モードの MIDI をサポートすべきです(セクション 7.7)。

5.10. プロフェッショナル オーディオ

android.content.pm.PackageManager クラスを介して機能 android.hardware.audio.pro のサポートをレポートする場合、デバイス実装は:

  • [C-1-1] 機能 android.hardware.audio.low_latency のサポートをレポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-2](2024 年 2 月 5 日プレビュー)

  • [C-1-2] セクション 5.6 オーディオ レイテンシで規定しているとおり、少なくとも 1 つのサポート対象パスで連続ラウンドトリップ オーディオ レイテンシが 25 ミリ秒以下でなければなりませんFEATURE_AUDIO_PRO のレイテンシ要件を満たさなければなりません。

新しい要件の終了

  • [C-1-3] USB ホストモードと USB ペリフェラル モードをサポートする USB ポートを含まなければなりません。
  • [C-1-4] 機能 android.software.midi のサポートをレポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-5](2024 年 2 月 5 日プレビュー)

  • [C-1-5] AAudio ネイティブ オーディオ API と AAUDIO_PERFORMANCE_MODE_LOW_LATENCY を使用して、レイテンシと USB オーディオ レイテンシの要件を満たさなければなりません。

新しい要件の終了

  • [C-1-6] コールド出力レイテンシが 200 ミリ秒以下でなければなりません。
  • [C-1-7] コールド入力レイテンシが 200 ミリ秒以下でなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-8、C-SR-1、C-SR-2、C-SR-3](2024 年 2 月 5 日プレビュー)

  • [C-1-8] スピーカーからマイクのデータパスで、少なくとも 5 回測定して平均タップツートーン レイテンシが 80 ミリ秒以下でなければなりません。
  • [C-SR-1] セクション 5.6 オーディオ レイテンシで規定されているとおり、スピーカーからマイクのパスで、5 回測定してレイテンシが 20 ミリ秒以下、平均絶対偏差 5 ミリ秒未満を満たすことが強く推奨されます。
  • [C-SR-2] MMAP パスで、AAudio ネイティブ オーディオ API を使用して、連続ラウンドトリップ オーディオ レイテンシ、コールド入力レイテンシ、コールド出力レイテンシの Pro Audio 要件と、USB オーディオ要件を満たすことが強く推奨されます。
  • [C-SR-3] オーディオがアクティブで CPU 負荷が変動していても、一貫した CPU パフォーマンス レベルを提供することが強く推奨されます。これは、Android アプリ SynthMark を使用してテストすべきです。SynthMark は、システム パフォーマンスを測定するシミュレート オーディオ フレームワークで動作する、ソフトウェア シンセサイザーを使用します。ベンチマークの説明については、SynthMark のドキュメントをご覧ください。SynthMark アプリは「自動テスト」オプションを使用して実行し、次の結果を得る必要があります。

    • voicemark.90 >= 32 voices
    • latencymark.fixed.little <= 15 msec
    • latencymark.dynamic.little <= 50 msec
  • オーディオ クロックの不正確さと標準時間に対するずれを最小限に抑えるべきです。

  • 両方ともアクティブな場合、CPU CLOCK_MONOTONIC に対するオーディオ クロックのずれを最小限に抑えるべきです。

  • デバイス上のトランスデューサでオーディオ レイテンシを最小限に抑えるべきです。

  • USB デジタル オーディオでオーディオ レイテンシを最小限に抑えるべきです。

  • すべてのパスでオーディオ レイテンシ測定値を記録すべきです。

  • コールバックによる CPU 帯域幅全体の使用可能率に影響するため、オーディオ バッファ完了コールバック エントリ時間のジッターを最小限に抑えるべきです。

  • レポートされたレイテンシで通常の使用におけるオーディオ グリッチをゼロにすべきです。

  • チャンネル間のレイテンシ差をゼロにすべきです。

  • すべてのトランスポートで MIDI 平均レイテンシを最小限に抑えるべきです。

  • すべてのトランスポートで負荷がかかった状態での MIDI レイテンシのばらつき(ジッター)を最小限に抑えるべきです。

  • すべてのトランスポートで MIDI タイムスタンプを正確にすべきです。

  • コールド スタート直後の期間を含め、デバイス上のトランスデューサでオーディオ信号ノイズを最小限に抑えるべきです。

  • 両方ともアクティブな場合、対応するエンドポイントの入力側と出力側でオーディオ クロックの差をゼロにすべきです。対応するエンドポイントの例としては、デバイス上のマイクとスピーカーや、オーディオ ジャックの入出力が挙げられます。

  • 両方ともアクティブな場合、同じスレッド上の対応するエンドポイントの入力側と出力側のオーディオ バッファ完了コールバックを処理し、入力コールバックからのリターンの直後に出力コールバックに入るべきです。または、同じスレッド上でコールバックを処理できない場合は、入力コールバックの直後に出力コールバックに入り、アプリが入力側と出力側のタイミングを一貫させられるようにします。

  • 対応するエンドポイントの入力側と出力側で、HAL オーディオ バッファの位相差を最小限に抑えるべきです。

  • タップ レイテンシを最小限に抑えるべきです。

  • 負荷がかかった状態でのタップ レイテンシのばらつき(ジッター)を最小限に抑えるべきです。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-4](2024 年 2 月 5 日プレビュー)

上記の要件をすべて満たす場合、デバイス実装は:

  • [C-SR-4] android.content.pm.PackageManager クラスを介して機能 android.hardware.audio.pro のサポートをレポートすることが強く推奨されます。

新しい要件の終了

4 極 3.5 mm オーディオ ジャックが含まれる場合、デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[C-2-1](2024 年 2 月 5 日プレビュー)

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-5](2024 年 2 月 5 日プレビュー)

新しい要件の終了

4 極 3.5 mm オーディオ ジャックを省略し、USB ホストモードをサポートする USB ポートを含める場合、デバイス実装は:

  • [C-3-1] USB オーディオ クラスを実装しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-3-2、C-SR-6、C-SR-7](2024 年 2 月 5 日プレビュー)

  • [C-3-2] USB オーディオ クラスを使用し、USB ホストモード ポートで 5 回測定して、平均連続ラウンドトリップ オーディオ レイテンシが 25 ミリ秒以下、平均絶対偏差 5 ミリ秒未満でなければなりません。(これは、USB-3.5 mm アダプターとオーディオ ループバック ドングルを使用して、または入力と出力をパッチケーブルで接続した USB オーディオ インターフェースを使用して測定できます)。
  • [C-SR-6] これらの要件にも対応した USB オーディオ周辺機器で使用する場合、各方向で最大 8 チャンネル、サンプルレート 96 kHz、24 ビットまたは 32 ビット深度の同時 I/O をサポートすることが強く推奨されます。
  • [C-SR-7] MMAP パスで AAudio ネイティブ オーディオ API を使用してこの要件グループを満たすことが強く推奨されます。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[HDMI ポートの要件](2024 年 2 月 5 日プレビュー)

HDMI ポートが含まれる場合、デバイス実装は:

  • 少なくとも 1 つの構成で、ビット深度損失やリサンプリングなしで、20 ビットまたは 24 ビット深度、192 kHz のステレオと 8 チャンネルの出力をサポートすべきです。

新しい要件の終了

5.11. 未処理のキャプチャ

Android は、android.media.MediaRecorder.AudioSource.UNPROCESSED 音源を介した未処理オーディオの録音をサポートしています。OpenSL ES では、録音プリセット SL_ANDROID_RECORDING_PRESET_UNPROCESSED でアクセスできます。

未処理音原をサポートし、サードパーティ アプリで利用できるようにする場合、デバイス実装は:

  • [C-1-1] android.media.AudioManager プロパティ PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED を通じてサポートをレポートしなければなりません。

  • [C-1-2] 未処理音源の録音に使用する各マイクすべてについて、中間周波数範囲でほぼ平坦な振幅周波数特性を示さなければなりません(具体的には ±10dB、100 Hz~7,000 Hz)。

  • [C-1-3] 未処理音源の録音に使用する各マイクすべてについて、中間周波数範囲と比較して低い周波数範囲の振幅レベルを示さなければなりません(具体的には ±20 dB、5 Hz~100 Hz)。

  • [C-1-4] 未処理音源の録音に使用する各マイクすべてについて、中間周波数範囲と比較して高い周波数範囲の振幅レベルを示さなければなりません(具体的には ±30 dB、7,000 Hz~22 KHz)。

  • [C-1-5] 未処理音源の録音に使用する各マイクすべてについて、音圧レベル(SPL)94 dB で再生された 1,000 Hz 正弦波音源が、16 ビットサンプルで RMS 520 のレスポンスになるように(浮動小数点 / 倍精度サンプルの場合は -36 dB フルスケール)、オーディオ入力感度を設定しなければなりません。

  • [C-1-6] 未処理音源の録音に使用する各マイクすべてについて、信号対雑音比(SNR)を 60 dB にしなければなりません(SNR は、SPL 94 dB と、A 特性自己雑音の等価 SPL の差として測定します)。

  • [C-1-7] 未処理音源の録音に使用する各マイクすべてにおいて、全高調波歪み(THD)を、SPL 入力レベル 90 dB で 1 kHz に対して 1% 未満にしなければなりません。

  • [C-1-8] レベルを目的の範囲にするために、レベル乗算器以外の信号処理(自動ゲイン コントロール、ハイ パスフィルタ、エコー キャンセラなど)があってはなりません。つまり:

    • [C-1-9] なんらかの理由で、なんらかの信号処理がアーキテクチャに存在する場合、無効にしなければならず、ゼロ遅延または余分なレイテンシを信号パスに効果的に導入しなければなりません。
    • [C-1-10] レベル乗算器は、パス上にあることが許容されますが、信号パスに遅延またはレイテンシを導入してはなりません。

SPL の測定はすべて、テスト対象のマイクのすぐ隣で直接行います。マイクが複数ある構成では、これらの要件を各マイクに適用します。

android.hardware.microphone を宣言するが、未処理音源をサポートしない場合、デバイス実装は:

  • [C-2-1] サポートしていないことを適切に示すために、AudioManager.getProperty(PROPERTY_SUPPORT_AUDIO_SOURCE_UNPROCESSED) API メソッドについて null を返さなければなりません。
  • [C-SR-1] その場合でも、未処理録音源の信号パスに関する要件を可能な限り多く満たすことが強く推奨されます。

5.12. HDR 動画

今後のドキュメントで説明するように、Android 13 は HDR テクノロジーをサポートします。

ピクセルの形式

COLOR_FormatYUVP010 のサポートをアドバタイズしている場合、動画デコーダは:

  • [C-1-1] CPU 読み取り(ImageReader、MediaImage、ByteBuffer)の P010 形式をサポートしなければなりません。Android 13 では P010 が緩和され、Y プレーンと UV プレーンで任意のストライドが可能になりました。

  • [C-1-2] P010 出力バッファを GPU でサンプリングできるようにしなければなりません(GPU_SAMPLING 用途を指定して割り当てる場合)。これにより、アプリによる GPU 合成とカスタムトーン マッピングが可能になります。

COLOR_Format32bitABGR2101010 のサポートをアドバタイズしている場合、動画デコーダは:

  • [C-2-1] 出力サーフェスと CPU 読み取り可能(ByteBuffer の出力)の RGBA_1010102 形式をサポートしなければなりません。

COLOR_FormatYUVP010 のサポートをアドバタイズしている場合、動画エンコーダは:

  • [C-3-1] 入力サーフェスと CPU 書き込み可能(ImageWriter、MediaImage、ByteBuffer の入力)の P010 形式をサポートしなければなりません。

COLOR_Format32bitABGR2101010 のサポートをアドバタイズしている場合、動画エンコーダは:

  • [C-4-1] 入力サーフェスと CPU 書き込み可能(ImageWriter、ByteBuffer の入力)の RGBA_1010102 形式をサポートしなければなりません。注: エンコーダでは、さまざまな転送曲線間の変換は必要ありません。

HDR キャプチャの要件

HDR プロファイルをサポートするすべての動画エンコーダについて、デバイス実装は:

  • [C-5-1] HDR メタデータが正確であると想定してはなりません。たとえば、エンコードされたフレームにピーク輝度レベルを超えるピクセルが含まれる場合や、ヒストグラムが典型的なフレームを表していない場合があります。

  • エンコードされたストリームに適切な HDR 静的メタデータを生成するために、HDR 動的メタデータを集約し、各エンコード セッションの最後に出力すべきです。

CamcorderProfile API を使用した HDR キャプチャをサポートしている場合、デバイス実装は:

  • [C-6-1] Camera2 API を介した HDR キャプチャもサポートしなければなりません。

  • [C-6-2] サポートされる HDR テクノロジーごとに、少なくとも 1 つのハードウェア アクセラレーテッド動画エンコーダをサポートしなければなりません。

  • [C-6-3] (少なくとも)HLG キャプチャをサポートしなければなりません。

  • [C-6-4] キャプチャした動画ファイルへの HDR メタデータ(HDR テクノロジーに適用可能な場合)の書き込みをサポートしなければなりません。AV1、HEVC、DolbyVision の場合、これはエンコードされたビットストリームにメタデータを含めることを意味します。

  • [C-6-5] P010 と COLOR_FormatYUVP010 をサポートしなければなりません。

  • [C-6-6] キャプチャしたプロファイルについては、デフォルトのハードウェア アクセラレーテッド デコーダで、HDR から SDR へのトーン マッピングをサポートしなければなりません。つまり、デバイスが HDR10+ HEVC をキャプチャできる場合、デフォルトの HEVC デコーダは、キャプチャしたストリームを SDR でデコードできなければなりません。

HDR 編集の要件

HDR 編集をサポートする動画エンコーダが含まれる場合、デバイス実装は:

  • HDR メタデータが存在しない場合は、HDR メタデータを生成する際のレイテンシを最小限にすべきです。また、メタデータが存在するフレームと存在しないフレームが混在する状況に適切に対処すべきです。このメタデータは正確であるべきです(たとえば、実際のピーク輝度、フレームのヒストグラムを表すべきです)。

FEATURE_HdrEditing をサポートするコーデックが含まれる場合、デバイス実装は:

  • [C-7-1] 少なくとも 1 つの HDR プロファイルをサポートしなければなりません。

  • [C-7-2] そのコーデックによってアドバタイズされるすべての HDR プロファイルについて、FEATURE_HdrEditing をサポートしなければなりません。つまり、HDR メタデータを使用する、サポートされるすべての HDR プロファイルに HDR メタデータが存在しない場合、HDR メタデータの生成をサポートしなければなりません。

  • [C-7-3] 入力サーフェスと ByteBuffer の両方について、HDR デコード信号を完全に保持する動画エンコーダ入力形式である

    • RGBA_1010102(すでにターゲット転送曲線にある)をサポートしなければならず、COLOR_Format32bitABGR2101010 のサポートをアドバタイズしなければなりません。

FEATURE_HdrEditing をサポートするコーデックが含まれる場合、デバイス実装は:

  • [C-7-4] EXT_YUV_target OpenGL 拡張機能のサポートをアドバタイズしなければなりません。

6. デベロッパー ツール、開発者向けオプションの互換性

6.1. デベロッパー ツール

デバイス実装は:

  • [C-0-1] Android SDK で提供されている Android デベロッパー ツールをサポートしなければなりません。
  • Android Debug Bridge(adb)

15(AOSP 試験運用版)の新しい要件の開始

[C-0-2](2024 年 2 月 5 日プレビュー)

  • [C-0-2] Android SDK に記載されている adb と、アプリ デベロッパーが使用できる、AOSP で提供されるシェルコマンド(dumpsyscmd statsSimpleperf を含む)をサポートしなければなりません。

新しい要件の終了

  • [C-0-11] シェルコマンド cmd testharness をサポートしなければなりません。永続データブロックのない以前の Android バージョンからデバイス実装をアップグレードする場合は、C-0-11 を免除しても構いません。
  • [C-0-3] dumpsys コマンドを介してログに記録されるデバイス システム イベント(batterystats、diskstats、fingerprint、graphicsstats、netstats、notification、procstats)の形式またはコンテンツを変更してはなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-0-10](2023 年 12 月 11 日プレビュー)

  • [C-0-10] 次のイベントを省略せずに記録し、cmd stats シェルコマンドと StatsManager システム API クラスからアクセスして利用できるようにしなければなりません。
    • ActivityForegroundStateChanged
    • AnomalyDetected
    • AppBreadcrumbReported
    • AppCrashOccurred
    • AppStartOccurred
    • BatteryLevelChanged
    • BatterySaverModeStateChanged
    • BleScanResultReceived
    • BleScanStateChanged
    • ChargingStateChanged
    • DeviceIdleModeStateChanged
    • ForegroundServiceStateChanged
    • GpsScanStateChanged
    • InputDeviceUsageReported
    • JobStateChanged
    • KeyboardConfigured
    • KeyboardSystemsEventReported
    • PluggedStateChanged
    • ScheduledJobStateChanged
    • ScreenStateChanged
    • SyncStateChanged
    • SystemElapsedRealtime
    • TouchpadUsage
    • UidProcessStateChanged
    • WakelockStateChanged
    • WakeupAlarmOccurred
    • WifiLockStateChanged
    • WifiMulticastLockStateChanged
    • WifiScanStateChanged

新しい要件の終了

  • [C-0-4] デバイス側の adb デーモンをデフォルトで無効にしなければならず、Android Debug Bridge をオンにするためのユーザーがアクセス可能なメカニズムがなければなりません。
  • [C-0-5] セキュア adb をサポートしなければなりません。Android は、セキュア adb をサポートしています。セキュア adb は、既知の認証済みホストで adb を有効にします。
  • [C-0-6] adb をホストマシンから接続できるようにするメカニズムを提供しなければなりません。具体的には次のとおりです。

USB ポートなしでペリフェラル モードをサポートする場合、デバイス実装は:

  • [C-3-1] ローカルエリア ネットワーク(イーサネット、Wi-Fi など)を介して adb を実装しなければなりません。
  • [C-3-2] デベロッパーが adb プロトコルを使用してデバイスに接続できるように、Windows 7、8、10 用のドライバを提供しなければなりません。

Wi-Fi またはイーサネットを介したホストマシンへの adb 接続をサポートする場合、デバイス実装は:

  • [C-4-1] AdbManager#isAdbWifiSupported() メソッドが true を返さなければなりません。

Wi-Fi またはイーサネットを介したホストマシンへの adb 接続をサポートし、カメラが 1 つ以上含まれる場合、デバイス実装は:

  • [C-5-1] AdbManager#isAdbWifiQrSupported() メソッドが true を返さなければなりません。

  • Dalvik Debug Monitor Service(ddms)

    • [C-0-7] Android SDK に記載されているとおり、ddms 機能をすべてサポートしなければなりません。ddms は adb を使用するため、ddms のサポートはデフォルトで無効にすべきですが、上記のようにユーザーが Android Debug Bridge を有効にした場合は必ずサポートしなければなりません。
  • SysTrace

    • [C-0-9] Android SDK に記載されているとおり、systrace ツールをサポートしなければなりません。Systrace はデフォルトで無効でなければならず、Systrace をオンにするユーザーがアクセス可能なメカニズムがなければなりません。
  • Perfetto

    • [C-SR-1] cmdline で perfetto ドキュメントを遵守しているシェルユーザーに /system/bin/perfetto バイナリを公開することが強く推奨されます。
    • [C-SR-2] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf 構成を入力として受け入れることが強く推奨されます。
    • [C-SR-3] perfetto バイナリは、perfetto ドキュメントで規定されたスキーマに準拠する protobuf トレースを出力として書き込むことが強く推奨されます。
    • [C-SR-4] perfetto バイナリを通じて、少なくとも perfetto ドキュメントに記載されているデータソースを提供することが強く推奨されます。
  • ローメモリ キラー

    • [C-0-12] アプリがローメモリ キラーによって終了したとき、LMK_KILL_OCCURRED_FIELD_NUMBER Atom を statsd ログに書き込まなければなりません。
  • テストハーネス モード シェルコマンド cmd testharness をサポートし、cmd testharness enable を実行する場合、デバイス実装は:

    • [C-2-1] ActivityManager.isRunningInUserTestHarness() について true を返さなければなりません。
    • [C-2-2] テストハーネス モードのドキュメントに記載されているとおり、テストハーネス モードを実装しなければなりません。
  • GPU 処理に関する情報

    デバイス実装は:

    • [C-0-13] power/gpu_work_period カーネル トレースポイントによって返された GPU 処理の集計データを表示し、トレースポイントがサポートされていない場合はデータを表示しないよう、シェルコマンド dumpsys gpu --gpuwork を実装しなければなりません。AOSP 実装は frameworks/native/services/gpuservice/gpuwork/ です。

android.hardware.vulkan.version 機能フラグを介して Vulkan 1.0 以降のサポートをレポートする場合、デバイス実装は:

  • [C-1-1] GPU デバッグレイヤを有効化 / 無効化するアフォーダンスをアプリ デベロッパーに提供しなければなりません。
  • [C-1-2] GPU デバッグレイヤが有効な場合、API メソッド vkEnumerateInstanceLayerProperties()vkCreateInstance() をサポートするために、デバッグ可能なアプリのベース ディレクトリにある外部ツール(つまり、プラットフォームまたはアプリ パッケージの一部ではありません)によって提供されるライブラリのレイヤを列挙しなければなりません。

6.2. 開発者向けオプション

Android は、デベロッパーがアプリ開発関連の設定を構成することをサポートしています。

デバイス実装は開発者向けオプションに一貫したエクスペリエンスを提供しなければならず、デバイス実装は:

  • [C-0-1] android.settings.APPLICATION_DEVELOPMENT_SETTINGS インテントを使用して、アプリ開発関連の設定を表示しなければなりません。アップストリームの Android 実装では、デフォルトで開発者向けオプション メニューが非表示になっており、ユーザーが [設定] > [デバイス情報] > [ビルド番号] メニュー アイテムを 7 回タップすると開発者向けオプションを起動できます。
  • [C-0-2] デフォルトで開発者向けオプションを非表示にしなければなりません。
  • [C-0-3] 開発者向けオプションを有効にするために、あるサードパーティ アプリを別のアプリより優先して扱うことのない、明確なメカニズムを提供しなければなりません。開発者向けオプションを有効にする方法を説明する公開ドキュメントまたはウェブサイトを提供しなければなりません。このドキュメントまたはウェブサイトは、Android SDK ドキュメントからリンクできなければなりません。
  • 開発者向けオプションが有効になっており、ユーザーの安全性が懸念されるときは、ユーザーに対して進行中の通知を表示すべきです。
  • ユーザーの安全性が懸念されるシナリオでは、メニューを非表示または無効にして、開発者向けオプション メニューへのアクセスを一時的に制限しても構いません。

7. ハードウェアの互換性

デバイスに、サードパーティ デベロッパー向けの API を持つ特定のハードウェア コンポーネントが含まれる場合:

  • [C-0-1] デバイス実装は、Android SDK ドキュメントに記載されているとおり、その API を実装しなければなりません。

任意であると明記されているハードウェア コンポーネントを SDK の API が操作し、デバイス実装がそのコンポーネントを備えていない場合:

  • [C-0-2] そのような場合でも、コンポーネント API の完全なクラス定義(SDK に記載)を提示しなければなりません。
  • [C-0-3] API の動作は、なんらかの合理的な方法で NoOps として実装しなければなりません。
  • [C-0-4] API メソッドは、SDK ドキュメントで許可されている場合、null 値を返さなければなりません。
  • [C-0-5] API メソッドは、null 値が SDK ドキュメントで許可されていないクラスの NoOps 実装を返さなければなりません。
  • [C-0-6] API メソッドは、SDK ドキュメントに記載されていない例外をスローしてはなりません。
  • [C-0-7] デバイス実装は、同じビルドのフィンガープリントについて、android.content.pm.PackageManager クラスの getSystemAvailableFeatures() メソッドと hasSystemFeature(String) メソッドを介して正確なハードウェア構成情報を一貫してレポートしなければなりません。

これらの要件が適用されるシナリオの典型例は、テレフォニー API です。電話以外のデバイスであっても、これらの API を妥当な NoOps として実装しなければなりません。

7.1. ディスプレイとグラフィック

Android には、さまざまなハードウェア ディスプレイとハードウェア構成でサードパーティ アプリが適切に動作するように、デバイスに合わせてアプリアセットと UI レイアウトを自動的に調整する機能があります。Android 互換ディスプレイは、デベロッパー向け Android - 画面互換性の概要、このセクション 7.1 とそのサブセクションに記載されているすべての動作と API、および、この CDD のセクション 2 に記載されているその他すべてのデバイスタイプ固有の動作を実装するディスプレイ画面です。

デバイス実装は:

  • [C-0-1] デフォルトでサードパーティ アプリを Android 互換ディスプレイにのみレンダリングしなければなりません。

このセクションの要件で言及する単位の定義は次のとおりです。

  • 物理的な対角サイズ。ディスプレイの点灯部分の、2 つの相対する隅の間の距離(インチ単位)。
  • 密度。1 インチの水平または垂直直線スパンで囲まれるピクセル数。1 インチあたりのピクセル数(ppi または dpi)で表されます。ppi 値と dpi 値が記載されている場合は、水平方向と垂直方向の両方の dpi が記載範囲内に収まらなければなりません。
  • アスペクト比。画面の長辺と短辺のピクセル数の比。たとえば、480x854 ピクセルのディスプレイでは、854/480 = 1.779 すなわち約「16:9」です。
  • 密度非依存ピクセル(dp)。 密度 160 の画面に正規化された仮想ピクセル単位。密度 d、ピクセル数 p、密度非依存ピクセル数 dp について、dp = (160 / d) * p として計算します。

7.1.1. 画面構成

7.1.1.1. 画面サイズと形状

Android UI フレームワークはさまざまな論理画面レイアウト サイズをサポートしており、アプリは SCREENLAYOUT_SIZE_MASKConfiguration.smallestScreenWidthDp を使用して、Configuration.screenLayout を介して現在の構成の画面レイアウト サイズをクエリできます。

デバイス実装は:

  • [C-0-1] Android SDK ドキュメントで定義されているとおり、Configuration.screenLayout について、正しいレイアウト サイズをレポートしなければなりません。具体的には、デバイス実装は、下記のとおり正確な論理密度非依存ピクセル(dp)画面寸法をレポートしなければなりません。

    • Configuration.uiMode が UI_MODE_TYPE_WATCH 以外の値に設定され、Configuration.screenLayout について small サイズをレポートするデバイスは、少なくとも 426 dp x 320 dp でなければなりません。
    • Configuration.screenLayout について normal サイズをレポートするデバイスは、少なくとも 480 dp x 320 dp でなければなりません。
    • Configuration.screenLayout について large サイズをレポートするデバイスは、少なくとも 640 dp x 480 dp でなければなりません。
    • Configuration.screenLayout について xlarge サイズをレポートするデバイスは、少なくとも 960 dp x 720 dp でなければなりません。
  • [C-0-2] Android SDK ドキュメントに記載されているとおり、AndroidManifest.xml の <supports-screens> 属性を通じて、アプリによる所定の画面サイズのサポートを正しく使用しなければなりません。

  • 隅の丸い Android 互換ディスプレイであっても構いません。

UI_MODE_TYPE_NORMALサイズ構成が可能な画面をサポートし、隅の丸い物理ディスプレイを使用して画面をレンダリングする場合、デバイス実装は:

  • [C-1-1] 各ディスプレイで次の要件のうち少なくとも 1 つを満たさなければなりません。

    • 丸い隅の半径が 38 dp 以下。
    • 18 dp x 18 dp のボックスを論理ディスプレイのそれぞれの隅に固定したとき、各ボックスの少なくとも 1 ピクセルが画面に表示される。
  • 隅が直角の表示モードに切り替えるユーザー アフォーダンスを含むべきです。

NO_KEYS キーボードの構成のみが可能で、UI_MODE_TYPE_NORMAL UI モードの構成のサポートをレポートする場合、デバイス実装は:

  • [C-4-1] ディスプレイ カットアウトを除くレイアウト サイズを 596 dp x 384 dp 以上にしなければなりません。

サイドカー API または拡張機能 API の正しい実装の詳細については、Window Manager Jetpack の公開ドキュメントをご覧ください。

15(AOSP 試験運用版)の新しい要件の開始

[C-4-1] [削除](2024 年 2 月 5 日プレビュー)

1 つ以上の折りたたみ式の Android 互換ディスプレイ領域が含まれるか、複数の Android 互換ディスプレイ パネル領域間の折りたたみヒンジが含まれ、そうしたディスプレイ領域をアプリで利用できるようにする場合、デバイス実装は:

  • [C-4-1] WindowManager Extensions に記載されているとおりに、正しいバージョンの Window Manager Extensions API レベルを実装しなければなりません。

  • [C-4-1]
    この要件は Android 15(AOSP 試験運用版)で削除されています。

新しい要件の終了

7.1.1.2. 画面のアスペクト比

このセクションは Android 14 で削除されました。

7.1.1.3. 画面密度

Android UI フレームワークは、アプリ デベロッパーがアプリリソースをターゲットにできるように、標準的な論理密度のセットを定義しています。

デバイス実装は:

  • [C-0-1]DENSITY_DEVICE_STABLE API を通じて DisplayMetrics にリストされている論理 Android フレームワーク密度の一つをレポートしなければならず、この値は各物理ディスプレイで静的な値にしなければなりません。ただしデバイスは、初回起動後にユーザーが設定したディスプレイ設定(ディスプレイ サイズなど)の変更に従って、異なる DisplayMetrics.density をレポートしても構いません。

  • 画面の物理密度に数値的に最も近い標準 Android フレームワーク密度、または同等なハンドヘルド デバイスの画角の測定値に対応する値を定義すべきです。

デバイスのディスプレイ サイズを変更するアフォーダンスを提供する場合、デバイス実装は:

  • [C-1-1] ディスプレイを、DENSITY_DEVICE_STABLE の 1.5 倍よりも大きく調整したり、320 dp(リソース修飾子 sw320dp と同等)よりも小さい有効最小画面寸法を生成したりしてはなりません。
  • [C-1-2] ディスプレイを、DENSITY_DEVICE_STABLE の 0.85 倍よりも小さく調整してはなりません。
  • 優れたユーザビリティと一貫したフォントサイズを実現するために、上記の制限を遵守しつつ、次に示すネイティブ ディスプレイ オプションの調整を行えるようにすることが推奨されます。
    • 小: 0.85 倍
    • デフォルト: 1 倍(ネイティブ ディスプレイ スケール)
    • 中: 1.15 倍
    • 大: 1.3 倍
    • 特大 1.45 倍

15(AOSP 試験運用版)の新しい要件の開始

7.1.1.4. ディスプレイのオーバーライド

[撤回] 7.1.1.4(2024 年 2 月 26 日プレビュー)

これらの要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

7.1.1.4(2024 年 2 月 5 日プレビュー)

デバイス実装は、アプリごとのオーバーライド API または独自のメカニズムを介して、アプリ固有の表示設定をオーバーライドするためのユーザー アフォーダンスを提供しても構いません。

アプリ固有の表示設定(screenOrientationActivity#setRequestedOrientation()resizeableActivityminAspectRatiomaxAspectRatio など)をオーバーライドするためのユーザー アフォーダンスを 1 つ以上提供する場合、デバイス実装は:

  • [C-1-1] ユーザーの同意を得なければならず、オーバーライドによって予期しないアプリ表示やその他のユーザー エクスペリエンスに関する問題が生じる可能性があることを明示的に示さなければなりません。
  • [C-1-2] そのようなオーバーライドを元に戻す方法を明確に示さなければなりません。
  • [C-1-3] そのようなオーバーライドを元に戻すために、同様にアクセス可能なユーザー アフォーダンスを提供しなければなりません。
  • [C-1-4] ユーザーが一括操作でアプリをオーバーライドすることを許可してはなりません。
  • [C-1-5] オーバーライドを無効にする API を尊重しなければなりません。

新しい要件の終了

7.1.2. ディスプレイの指標

Android 互換ディスプレイまたは Android 互換ディスプレイ画面への動画出力が含まれる場合、デバイス実装は:

  • [C-1-1] android.util.DisplayMetrics API で定義されたすべての Android 互換ディスプレイ指標について正しい値をレポートしなければなりません。

埋め込み画面または動画出力が含まれない場合、デバイス実装は:

  • [C-2-1] エミュレートされたデフォルトの view.Display について、android.util.DisplayMetrics API で定義されているとおり、Android 互換ディスプレイの値を正しくレポートしなければなりません。

7.1.3. 画面の向き

デバイス実装は:

  • [C-0-1] サポートする画面の向き(android.hardware.screen.portraitandroid.hardware.screen.landscape)をレポートしなければならず、サポート対象の向きのうち少なくとも 1 つをレポートしなければなりません。たとえば、テレビやノートパソコンなど、固定の横向き画面を備えたデバイスは android.hardware.screen.landscape のみをレポートすべきです。
  • [C-0-2] android.content.res.Configuration.orientationandroid.view.Display.getOrientation()、またはその他の API を介してクエリされたときは常に、デバイスの現在の画面の向きについて、正しい値をレポートしなければなりません。

画面の向きを両方ともサポートする場合、デバイス実装は:

  • [C-1-1] アプリが画面の向きを動的に横向きまたは縦向きに変更することをサポートしなければなりません。つまりデバイスは、特定の画面の向きに関するアプリからのリクエストを尊重しなければなりません。
  • [C-1-2] 画面の向きを変更するとき、レポート対象の画面サイズまたは密度を変更してはなりません。
  • 横向きまたは縦向きのいずれかをデフォルトとして選択しても構いません。

7.1.4. 2D と 3D のグラフィック アクセラレーション

7.1.4.1. OpenGL ES

デバイス実装は:

  • [C-0-1] マネージド API(GLES10.getString() メソッドなど)とネイティブ API を通じて、サポート対象の OpenGL ES バージョン(1.1、2.0、3.0、3.1、3.2)を正しく識別しなければなりません。
  • [C-0-2] サポート対象として識別されたすべての OpenGL ES バージョンについて、対応するマネージド API とネイティブ API をサポートしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[移動] [C-0-3 および C-0-4](2024 年 2 月 26 日プレビュー)

これらの要件は CDD から GMS セクション 3.2.9 OpenGL ES(ANGLE)に移動されました。

新しい要件の終了

[C-0-3 および C-0-4](2024 年 2 月 5 日プレビュー)

ActivityManager.isLowRamDevice() について false を返す場合、デバイス実装は:

  • [C-0-3] ANGLE ライブラリの libEGL_angle.solibGLESv1_CM_angle.solibGLESv2_angle.so を含めなければなりません。注: AOSP リファレンス コードには、/system/${LIB} ディレクトリ内にデフォルトでこれらのバイナリが含まれています。
  • [C-0-4] ANGLE ライブラリをネイティブ OpenGL ES ドライバの代わりとして有効および無効にできるデベロッパー オプションを [設定] でアフォーダンスをアプリ デベロッパーに提供しなければなりません。このプロビジョニングはデベロッパーによるテストのためのものであり、この置換設定は、デフォルトで disabled でなければなりません。

新しい要件の終了

[C-0-3 および C-0-4](2023 年 12 月 11 日プレビュー)

  • [C-0-3] ANGLE ライブラリの libEGL_angle.solibGLESv1_CM_angle.solibGLESv2_angle.so を含めなければなりません。注: AOSP リファレンス コードには、/system/${LIB} ディレクトリ内にデフォルトでこれらのバイナリが含まれています。
  • [C-0-4] [設定] で ANGLE ライブラリをネイティブ OpenGL ES ドライバの代わりとして有効および無効にできるデベロッパー オプションを提供しなければなりません。このプロビジョニングはデベロッパーによるテストのためのものであり、デフォルトでは disabled となります。

新しい要件の終了

画面または動画出力が含まれる場合、デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[C-1-1](2023 年 12 月 11 日プレビュー)

  • [C-1-1] Android SDK ドキュメントに盛り込まれ、詳述されているとおり、OpenGL ES 1.1、および2.0の両方とも3.0、3.1 をサポートしなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-1](2023 年 12 月 11 日プレビュー)

  • [C-SR-1] OpenGL ES 3.1 をサポートすることが強く推奨されます。

新しい要件の終了

  • OpenGL ES 3.2 をサポートすべきです。

OpenGL ES dEQP テストはいくつかのテストリストに分割されており、それぞれに日付 / バージョンが関連付けられています。Android ソースツリーの external/deqp/android/cts/main/glesXX-master-YYYY-MM-DD.txt にあります。自己申告レベルで OpenGL ES をサポートするデバイスは、このレベルとそれより前のテストリストすべてで dEQP テストに合格できることを示しています。

OpenGL ES のいずれかのバージョンをサポートする場合、デバイス実装は:

  • [C-2-1] OpenGL ES マネージド API とネイティブ API を介して、実装されている他の OpenGL ES 拡張機能をレポートしなければならず、また逆に、サポートしていない拡張機能の文字列をレポートしてはなりません。
  • [C-2-2] 拡張機能 EGL_KHR_imageEGL_KHR_image_baseEGL_ANDROID_image_native_bufferEGL_ANDROID_get_native_client_bufferEGL_KHR_wait_syncEGL_KHR_get_all_proc_addressesEGL_ANDROID_presentation_timeEGL_KHR_swap_buffers_with_damageEGL_ANDROID_recordableEGL_ANDROID_GLES_layers をサポートしなければなりません。
  • [C-2-3] android.software.opengles.deqp.level 機能フラグを介してサポートする OpenGL ES dEQP テストの最大バージョンをレポートしなければなりません。
  • [C-2-4] android.software.opengles.deqp.level 機能フラグでレポートされるとおり、少なくともバージョン 132383489 をサポートしなければなりません(2020 年 3 月 1 日から)。
  • [C-2-5] サポート対象の OpenGL ES バージョンごとに、バージョン 132383489 から android.software.opengles.deqp.level 機能フラグで指定されたバージョンまでのテストリストにある、すべての OpenGL ES dEQP テストに合格しなければなりません。
  • [C-SR-2] 拡張機能 EGL_KHR_partial_updateOES_EGL_image_external をサポートすることが強く推奨されます。
  • getString() メソッドを介して、サポート対象のテクスチャ圧縮形式(通常はベンダー固有)を正確にレポートすべきです。

  • EGL_IMG_context_priority 拡張機能と EGL_EXT_protected_content 拡張機能をサポートすべきです。

OpenGL ES 3.0、3.1 または 3.2 のサポートを宣言する場合、デバイス実装は:

  • [C-3-1] libGLESv2.so ライブラリの OpenGL ES 2.0 関数シンボルに加え、これらのバージョンについて、対応する関数シンボルをエクスポートしなければなりません。
  • [C-SR-3] 拡張機能 OES_EGL_image_external_essl3 をサポートすることが強く推奨されます。

OpenGL ES 3.2 をサポートする場合、デバイス実装は:

  • [C-4-1] OpenGL ES Android 拡張機能パック全体をサポートしなければなりません。

OpenGL ES Android 拡張機能パック全体をサポートする場合、デバイス実装は:

  • [C-5-1] android.hardware.opengles.aep 機能フラグを通じてサポートを識別しなければなりません。

拡張機能 EGL_KHR_mutable_render_buffer のサポートを公開する場合、デバイス実装は:

  • [C-6-1] 拡張機能 EGL_ANDROID_front_buffer_auto_refresh もサポートしなければなりません。
7.1.4.2. Vulkan

Android は、高パフォーマンスの 3D グラフィックを実現する、低オーバーヘッドのクロスプラットフォーム API である Vulkan をサポートしています。

OpenGL ES 3.1 をサポートする場合、デバイス実装は:

  • [C-SR-1] Vulkan 1.3 のサポートを含むことが強く推奨されます。
  • [C-4-1] Vulkan バリアント バージョンをサポートしてはなりません(Vulkan コアバージョンのバリアント部分はゼロでなければなりません)。

画面または動画出力が含まれる場合、デバイス実装は:

  • [C-SR-2] Vulkan 1.3 のサポートを含むことが強く推奨されます。

Vulkan dEQP テストはいくつかのテストリストに分割されており、それぞれに日付 / バージョンが関連付けられています。Android ソースツリーの external/deqp/android/cts/main/vk-master-YYYY-MM-DD.txt にあります。自己申告レベルで Vulkan をサポートするデバイスは、このレベルとそれより前のテストリストすべてで dEQP テストに合格できることを示しています。

Vulkan のサポートが含まれる場合、デバイス実装は:

  • [C-1-1] 機能フラグ android.hardware.vulkan.levelandroid.hardware.vulkan.version で正しい整数値をレポートしなければなりません。
  • [C-1-2] Vulkan ネイティブ API vkEnumeratePhysicalDevices() について、VkPhysicalDevice を少なくとも 1 つ列挙しなければなりません。
  • [C-1-3] 列挙した VkPhysicalDevice ごとに Vulkan 1.1 API を完全に実装しなければなりません。
  • [C-1-4] Vulkan ネイティブ API vkEnumerateInstanceLayerProperties()vkEnumerateDeviceLayerProperties() を通じて、アプリ パッケージのネイティブ ライブラリ ディレクトリにある libVkLayer*.so というネイティブ ライブラリに含まれるレイヤを列挙しなければなりません。
  • [C-1-5] アプリに true として設定された android:debuggable 属性または true に設定されたメタデータ com.android.graphics.injectLayers.enable がある場合を除き、アプリ パッケージ外のライブラリで提供されるレイヤを列挙したり、Vulkan API をトレースまたはインターセプトする別の方法を提供したりしてはなりません。
  • [C-1-6] Vulkan ネイティブ API を介してサポートする拡張機能の文字列をすべてレポートしなければならず、また逆に、正しくサポートしない拡張機能の文字列をレポートしてはなりません。
  • [C-1-7] 拡張機能 VK_KHR_surface、VK_KHR_android_surface、VK_KHR_swapchain、VK_KHR_incremental_present をサポートしなければなりません。
  • [C-1-8] android.software.vulkan.deqp.level 機能フラグを介してサポートする Vulkan dEQP テストの最大バージョンをレポートしなければなりません。
  • [C-1-9] android.software.vulkan.deqp.level 機能フラグでレポートされるとおり、少なくともバージョン 132317953 をサポートしなければなりません(2019 年 3 月 1 日から)。
  • [C-1-10] バージョン 132317953android.software.vulkan.deqp.level 機能フラグで指定されたバージョンの間のテストリストにあるすべての Vulkan dEQP テストに合格しなければなりません。
  • [C-1-11] 拡張機能 VK_KHR_video_queue、VK_KHR_video_decode_queue、または VK_KHR_video_encode_queue のサポートを列挙してはなりません。
  • [C-SR-3] 拡張機能 VK_KHR_driver_propertiesVK_GOOGLE_display_timing をサポートすることが強く推奨されます。
  • [C-1-12] 拡張機能 VK_KHR_performance_query のサポートを列挙してはなりません。
  • [C-SR-4] Android ベースライン 2022 プロファイルで規定されている要件を満たすことが強く推奨されます。
  • [C-SR-5] VkPhysicalDeviceProtectedMemoryFeatures.protectedMemoryVK_EXT_global_priority をサポートすることが強く推奨されます。
  • [C-SR-6] HWUI で SkiaVk を使用することが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[C-SR-8 および C-1-14](2023 年 12 月 11 日プレビュー)

Vulkan のサポートが含まれる場合、デバイス実装は:

  • [C-SR-8] Vulkan ローダーを変更しないことが強く推奨されます。
  • [C-1-14] タイプが「KHR」、「GOOGLE」、「ANDROID」の Vulkan デバイス拡張機能が android.software.vulkan.deqp.level 機能フラグに含まれない限りは、それらの拡張機能を列挙してはなりません。

新しい要件の終了

Vulkan 1.0 のサポートが含まれない場合、デバイス実装は:

  • [C-2-1] Vulkan 機能フラグ(例: android.hardware.vulkan.levelandroid.hardware.vulkan.version)を宣言してはなりません。
  • [C-2-2] Vulkan ネイティブ API vkEnumeratePhysicalDevices() について VkPhysicalDevice を列挙してはなりません。

Vulkan 1.1 のサポートが含まれ、こちらに記載されている Vulkan 機能フラグのいずれかを宣言する場合、デバイス実装は:

  • [C-3-1] SYNC_FD 外部セマフォ型とハンドル型、VK_ANDROID_external_memory_android_hardware_buffer 拡張機能のサポートを公開しなければなりません。

  • [C-SR-7] VK_KHR_external_fence_fd 拡張機能をサードパーティ アプリで利用できるようにし、こちらに記載されているとおりに、アプリによる POSIX ファイル記述子へのフェンス ペイロードのエクスポートと、POSIX ファイル記述子からのフェンス ペイロードのインポートを可能にすることが強く推奨されます。

7.1.4.3. RenderScript
  • [C-0-1] デバイス実装は、Android SDK ドキュメントに詳述されているとおり、Android RenderScript をサポートしなければなりません。
7.1.4.4. 2D グラフィック アクセラレーション

Android には、マニフェスト タグ android:hardwareAccelerated または直接 API 呼び出しを使用することで、アプリ、アクティビティ、ウィンドウ、ビューのレベルで 2D グラフィックのハードウェア アクセラレーションを有効にすることを、アプリで宣言するメカニズムがあります。

デバイス実装は:

  • [C-0-1] ハードウェア アクセラレーションをデフォルトで有効にしなければならず、デベロッパーが android:hardwareAccelerated="false" を設定するか、Android View API を通じてハードウェア アクセラレーションを直接無効にすることでリクエストした場合、ハードウェア アクセラレーションを無効にしなければなりません。
  • [C-0-2] ハードウェア アクセラレーションに関する Android SDK ドキュメントに合致する動作を示さなければなりません。

Android には、ハードウェア アクセラレーションの OpenGL ES テクスチャを UI 階層のレンダリング ターゲットとしてデベロッパーが直接統合できる、TextureView オブジェクトがあります。

デバイス実装は:

  • [C-0-3] TextureView API をサポートしなければならず、アップストリームの Android 実装と合致する動作を示さなければなりません。
7.1.4.5. 広色域ディスプレイ

Configuration.isScreenWideColorGamut() を通じて広色域ディスプレイのサポートを主張する場合、デバイス実装は:

  • [C-1-1] 色調整されたディスプレイがなければなりません。
  • [C-1-2] sRGB 色域全体を CIE 1931 xyY 空間でカバーする色域のディスプレイがなければなりません。
  • [C-1-3] 色域の面積が CIE 1931 xyY 空間で DCI-P3 の少なくとも 90% であるディスプレイがなければなりません。
  • [C-1-4] OpenGL ES 3.1 または 3.2 をサポートし、適切にレポートしなければなりません。
  • [C-1-5] 拡張機能 EGL_KHR_no_config_contextEGL_EXT_pixel_format_floatEGL_KHR_gl_colorspaceEGL_EXT_gl_colorspace_scrgbEGL_EXT_gl_colorspace_scrgb_linearEGL_EXT_gl_colorspace_display_p3EGL_EXT_gl_colorspace_display_p3_linearEGL_EXT_gl_colorspace_display_p3_passthrough のサポートをアドバタイズしなければなりません。
  • [C-SR-1] GL_EXT_sRGB をサポートすることが強く推奨されます。

逆に、広色域ディスプレイをサポートしない場合、デバイス実装は:

  • [C-2-1] 画面色域が未定義であっても、CIE 1931 xyY 空間で sRGB の 100% 以上をカバーすべきです。

7.1.5. レガシーアプリの互換モード

Android では、以前の画面サイズに依存しない Andrdoid の旧バージョン向けに開発されていないレガシーアプリを活用するために、フレームワークが「標準」画面サイズ相当(幅 320 dp)のモードで動作する「互換モード」を規定しています。

7.1.6. 画面技術

Android プラットフォームには、アプリがリッチ グラフィックを Android 互換ディスプレイにレンダリングできるようにする API があります。このドキュメントで特に許可されていない限り、デバイスは、Android SDK で定義されているこれらの API をすべてサポートしなければなりません。

デバイス実装の Android 互換ディスプレイはすべて:

  • [C-0-1] 16 ビットカラー グラフィックをレンダリングできなければなりません。
  • 24 ビットカラー グラフィックに対応したディスプレイをサポートすべきです。
  • [C-0-2] アニメーションをレンダリングできなければなりません。
  • [C-0-3] ピクセル アスペクト比(PAR)が 0.9 から 1.15 の間でなければなりません。つまり、ピクセル アスペクト比は、許容差 10~15% でほぼ正方形(1.0)でなければなりません。

7.1.7. セカンダリ ディスプレイ

Android は、セカンダリ Android 互換ディスプレイをサポートしており、メディア共有機能と、外部ディスプレイにアクセスするためのデベロッパー API が有効になります。

有線、無線、または埋め込み式いずれかの追加のディスプレイ接続を介して外部ディスプレイをサポートする場合、デバイス実装は:

  • [C-1-1] Android SDK ドキュメントに記載されているとおり、DisplayManager システム サービスと API を実装しなければなりません。

7.2. 入力デバイス

デバイス実装は:

7.2.1. キーボード

サードパーティのインプット メソッド エディタ(IME)アプリのサポートが含まれる場合、デバイス実装は:

  • [C-1-1] android.software.input_methods 機能フラグを宣言しなければなりません。
  • [C-1-2] Input Management Framework を完全に実装しなければなりません。
  • [C-1-3] ソフトウェア キーボードをプリインストールしなければなりません。

デバイス実装は:

  • [C-0-1] android.content.res.Configuration.keyboard で指定された形式(QWERTY または 12 キー)のいずれかと一致しないハードウェア キーボードを含んではなりません。
  • 追加のソフトウェア キーボード実装を含むべきです。
  • ハードウェア キーボードを含んでも構いません。

7.2.2. タップ以外のナビゲーション

Android は、タップ以外のナビゲーションのメカニズムとして、D-pad、トラックボール、ホイールをサポートしています。

デバイス実装は:

タップ以外のナビゲーションがない場合、デバイス実装は:

  • [C-1-1] 入力管理エンジンと互換性のある、テキストの選択と編集のための妥当な代替ユーザー インターフェース メカニズムを提供しなければなりません。アップストリームの Android オープンソース実装には、タップ以外のナビゲーション入力がないデバイスでの使用に適した選択メカニズムがあります。

7.2.3. ナビゲーション キー

通常、専用の物理ボタンまたは区分けされたタッチスクリーン部分の操作を介して提供されるホーム機能、履歴機能、戻る機能は、Android ナビゲーション パラダイムに不可欠であり、したがってデバイス実装は:

  • [C-0-1] テレビデバイス実装のために、<intent-filter>ACTION=MAINCATEGORY=LAUNCHER または CATEGORY=LEANBACK_LAUNCHER で設定されたアクティビティを持つインストール済みのアプリを起動するユーザー アフォーダンスを提供しなければなりません。ホーム機能は、このユーザー アフォーダンスのためのメカニズムであるべきです。
  • 履歴機能と戻る機能のためのボタンを提供すべきです。

ホーム機能、履歴機能、または戻る機能が提供される場合、これらの機能は:

  • [C-1-1] いずれかがアクセス可能な場合、単一の操作(タップ、ダブルクリック、ジェスチャーなど)によってアクセス可能でなければなりません。
  • [C-1-2] どの単一の操作が各機能をトリガーするかの明確な表示を提供しなければなりません。そうした表示の例としては、ボタンにアイコンを表示する、画面のナビゲーション バー部分にソフトウェア アイコンを表示する、開封時の初期設定中にガイド付きの段階的なデモフローを通じてユーザーに説明する、などが挙げられます。

デバイス実装は:

  • [C-SR-1] Android 4.0 以降、メニュー機能はサポートが終了してアクションバーに置き換えられたため、メニュー機能のための入力メカニズムを提供しないことが強く推奨されます。

  • [C-SR-2] すべてのナビゲーション機能をキャンセル可能として提供することが強く推奨されます。「キャンセル可能」とは、スワイプが特定のしきい値を超えても解放されない場合に、ユーザーがナビゲーション機能(「ホーム画面に移動する」、「戻る」など)を実行できないようにする機能を指します。

メニュー機能を提供する場合、デバイス実装は:

  • [C-2-1] アクション オーバーフロー メニューのポップアップが空ではなく、アクションバーが表示されているときは常に、アクション オーバーフロー ボタンを表示しなければなりません。
  • [C-2-2] アクションバーのオーバーフロー ボタンを選択することで表示されるアクション オーバーフロー ポップアップの位置を変更してはなりませんが、メニュー機能を選択することで表示されるときは、アクション オーバーフロー ポップアップを画面上の変更された位置にレンダリングしても構いません。

メニュー機能を提供しない場合、下位互換性のために、デバイス実装は: * [C-3-1] targetSdkVersion が 10 未満のときは、物理ボタン、ソフトウェア キー、ジェスチャーのいずれかによって、メニュー機能をアプリで利用できるようにしなければなりません。このメニュー機能は、他のナビゲーション機能とともに非表示になっている場合を除き、アクセス可能にすべきです。

アシスト機能を提供する場合、デバイス実装は:

  • [C-4-1] 他のナビゲーション キーがアクセス可能な場合、単一の操作(タップ、ダブルクリック、ジェスチャーなど)によってアシスト機能にアクセスできるようにしなければなりません。
  • [C-SR-3] この指定操作として、ホーム機能の長押しを使用することが強く推奨されます。

ナビゲーション キーを表示するために画面の区分けされた部分を使用する場合、デバイス実装は:

  • [C-5-1] ナビゲーション キーは、アプリでは利用できない、画面の区分けされた部分を使用しなければならず、アプリで利用できる画面部分を隠したり、利用を妨げたりしてはなりません。
  • [C-5-2] ディスプレイの一部を、セクション 7.1.1 で規定する要件を満たすアプリで利用できるようにしなければなりません。
  • [C-5-3] SDK に記載されているとおり、View.setSystemUiVisibility() API メソッドを通じてアプリが設定したフラグを使用して、この画面の区分けされた部分(ナビゲーション バー)が適切に非表示になるようにしなければなりません。

ナビゲーション機能が画面上のジェスチャーベースのアクションとして提供される場合:

  • [C-6-1] WindowInsets#getMandatorySystemGestureInsets() は、ホーム ジェスチャー認識エリアをレポートするためにのみ使用しなければなりません。
  • [C-6-2] View#setSystemGestureExclusionRects() を介して(WindowInsets#getMandatorySystemGestureInsets() 外で)フォアグラウンド アプリによって提供される除外矩形内で開始されるジェスチャーは、View#setSystemGestureExclusionRects() のドキュメントで規定されているとおり、除外矩形が最大除外制限内で許可されている限り、ナビゲーション機能用にインターセプトしてはなりません。
  • [C-6-3] フォアグラウンド アプリに MotionEvent.ACTION_DOWN イベントが以前に送信されていた場合、タップがシステム ジェスチャー用にインターセプトされ始めたら、フォアグラウンド アプリに MotionEvent.ACTION_CANCEL イベントを送信しなければなりません。
  • [C-6-4] 画面上のボタンベースのナビゲーションに切り替えるユーザー アフォーダンスを(設定などで)提供しなければなりません。
  • 現在の画面の向きで下端から上にスワイプした場合にホーム機能を提供すべきです。
  • ホーム ジェスチャーと同じエリアから上にスワイプし、保持してから指を離した場合に履歴機能を提供すべきです。
  • WindowInsets#getMandatorySystemGestureInsets() 内で開始されるジェスチャーは、View#setSystemGestureExclusionRects() を介してフォアグラウンド アプリによって提供される除外矩形の影響を受けるべきではありません。

ナビゲーション機能が、現在の画面の向きで左右端のどこからでも提供される場合:

  • [C-7-1] ナビゲーション機能は「戻る」でなければならず、現在の画面の向きで左右端からスワイプした場合に提供しなければなりません。
  • [C-7-2] カスタムのスワイプ可能なシステムパネルが左右どちらかの端で提供される場合、ドラッグするとそのパネルが呼び出され、戻る機能は呼び出されないことを明確かつ永続的に表示して、画面の上部 1/3 の範囲内に配置しなければなりません。システムパネルは、画面端の上部 1/3 未満に収まるようにユーザーが設定しても構いませんが、端の 1/3 より長くなってはなりません。
  • [C-7-3] フォアグラウンド アプリに View.SYSTEM_UI_FLAG_IMMERSIVE、View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY、WindowInsetsController.BEHAVIOR_DEFAULT、または WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE のフラグが設定されている場合、端からのスワイプで、SDK に記載されている AOSP の実装どおりに動作しなければなりません。
  • [C-7-4] フォアグラウンド アプリに View.SYSTEM_UI_FLAG_IMMERSIVE、View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY、WindowInsetsController.BEHAVIOR_DEFAULT、または WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE のフラグが設定されている場合、カスタムのスワイプ可能なシステムパネルは、AOSP の実装どおり、ユーザーがシステムバー(ナビゲーション バー、ステータスバー)を表示するか省略表示を解除するまで、非表示にしなければなりません。

「戻る」ナビゲーション機能が提供されていて、ユーザーが「戻る」ジェスチャーをキャンセルした場合:

  • [C-8-1] OnBackInvokedCallback.onBackCancelled() を呼び出さなければなりません。
  • [C-8-2] OnBackInvokedCallback.onBackInvoked() を呼び出してはなりません。
  • [C-8-3] KEYCODE_BACK イベントをディスパッチしてはなりません。

「戻る」ナビゲーション機能が提供されているが、フォアグラウンド アプリに OnBackInvokedCallback が登録されていない場合:

  • システムは、AOSP で提供されているように、ユーザーが戻ることを示唆するフォアグラウンド アプリのアニメーションを提供すべきです。

システム API setNavBarMode のサポートを提供し、それによって android.permission.STATUS_BAR 権限を持つシステムアプリがナビゲーション バーのモードを設定できるようにする場合、デバイス実装は:

  • [C-9-1] AOSP コードで提供されているとおり、子供向けアイコンまたはボタンベースのナビゲーションのサポートを提供しなければなりません。

7.2.4. タッチスクリーン入力

Android は、タッチスクリーン、タッチパッド、疑似タップ入力デバイスなど、さまざまなポインタ入力システムをサポートしています。タッチスクリーンベースのデバイス実装は、画面上のアイテムを直接操作しているような印象をユーザーに与えるディスプレイに関連付けられます。ユーザーが画面に直接触れているため、操作中のオブジェクトを示すアフォーダンスを追加する必要はありません。

デバイス実装は:

  • なんらかのポインタ入力システム(マウスのようなもの、またはタップ)があるべきです。
  • 完全に独立してトラックされるポインタをサポートすべきです。

プライマリ Android 互換ディスプレイ上のタッチスクリーン(シングルタップ以上)が含まれる場合、デバイス実装は:

  • [C-1-1] Configuration.touchscreen API フィールドについて TOUCHSCREEN_FINGER をレポートしなければなりません。
  • [C-1-2] 機能フラグ android.hardware.touchscreenandroid.hardware.faketouch をレポートしなければなりません。

プライマリ Android 互換ディスプレイで複数のタップをトラックできるタッチスクリーンが含まれる場合、デバイス実装は:

  • [C-2-1] デバイス上の具体的なタッチスクリーンの種類に応じた、該当する機能フラグ android.hardware.touchscreen.multitouchandroid.hardware.touchscreen.multitouch.distinctandroid.hardware.touchscreen.multitouch.jazzhand をレポートしなければなりません。

プライマリ Android 互換ディスプレイでの入力についてマウスやトラックボールなどの外部入力デバイスに依存し(つまり画面に直接触れず)、セクション 7.2.5 の疑似タップの要件を満たしている場合、デバイス実装は:

  • [C-3-1] android.hardware.touchscreen で始まる機能フラグをレポートしてはなりません。
  • [C-3-2] android.hardware.faketouch のみをレポートしなければなりません。
  • [C-3-3] Configuration.touchscreen API フィールドについて TOUCHSCREEN_NOTOUCH をレポートしなければなりません。

7.2.5. 疑似タップ入力

疑似タップ インターフェースは、タッチスクリーン機能のサブセットに近いユーザー入力システムを提供します。たとえば、画面上のカーソルを操作するマウスまたはリモコンはタップに似ていますが、ユーザーは最初にポイントするかフォーカスしてからクリックする必要があります。マウス、トラックパッド、ジャイロベースのエアマウス、ジャイロポインタ、ジョイスティック、マルチタッチ トラックパッドなど、多くの入力デバイスが擬似タップ インターフェースをサポートできます。Android には、機能定数 android.hardware.faketouch があります。これは、タッチベースの入力を適切にエミュレートできる(基本的なジェスチャーのサポートを含む)、マウスやトラックパッドなど忠実度の高いタップ以外の(ポインタベースの)入力デバイスに対応し、タッチスクリーン機能のエミュレートされたサブセットをデバイスがサポートしていることを示します。

タッチスクリーンは含まれないが、利用する予定の別のポインタ入力システムが含まれる場合、デバイス実装は:

  • android.hardware.faketouch 機能フラグのサポートを宣言すべきです。

android.hardware.faketouch のサポートを宣言する場合、デバイス実装は:

  • [C-1-1] ポインタ位置の絶対 X 画面位置と絶対 Y 画面位置をレポートし、画面にビジュアル ポインタを表示しなければなりません。
  • [C-1-2] ポインタが画面上を上下するときに発生する状態変化を指定するアクション コードで、タッチイベントをレポートしなければなりません。
  • [C-1-3] ユーザーが画面上のオブジェクトのタップをエミュレートできるように、画面上のオブジェクトでのポインタの上下移動をサポートしなければなりません。
  • [C-1-4] ユーザーが画面上のオブジェクトのダブルタップをエミュレートできるように、時間しきい値内で、画面上のオブジェクトの同じ場所におけるポインタの下移動、ポインタの上移動、ポインタの下移動からの上移動をサポートしなければなりません。
  • [C-1-5] ユーザーがタップドラッグをエミュレートできるように、画面上の任意の点におけるポインタの下移動、画面上の他の任意の点へのポインタ移動、その後のポインタの上移動をサポートしなければなりません。
  • [C-1-6] ユーザーが画面上のオブジェクトをフリングできるように、ポインタの下移動をサポートし、ユーザーが画面上の別の位置にオブジェクトを素早く移動してから画面上でポインタを上移動できるようにしなければなりません。

android.hardware.faketouch.multitouch.distinct のサポートを宣言する場合、デバイス実装は:

  • [C-2-1] android.hardware.faketouch のサポートを宣言しなければなりません。
  • [C-2-2] 複数の独立したポインタ入力の個別トラッキングをサポートしなければなりません。

android.hardware.faketouch.multitouch.jazzhand のサポートを宣言する場合、デバイス実装は:

  • [C-3-1] android.hardware.faketouch のサポートを宣言しなければなりません。
  • [C-3-2] 5 つ以上のポインタ入力の個別トラッキング(指で手をトラッキング)を完全に独立してサポートしなければなりません。

7.2.6. ゲーム コントローラのサポート

7.2.6.1. ボタン マッピング

デバイス実装は:

  • [C-1-1] 下表に記載されているとおり、HID イベントを、対応する InputEvent 定数にマッピングできなければなりません。アップストリームの Android 実装はこの要件を満たしています。

コントローラを埋め込むか、下表に記載されているイベントすべての入力手段を提供する別個のコントローラを同梱する場合、デバイス実装は:

  • [C-2-1] android.hardware.gamepad 機能フラグを宣言しなければなりません。
ボタン HID 使用状況2 Android ボタン
A1 0x09 0x0001 KEYCODE_BUTTON_A(96)
B1 0x09 0x0002 KEYCODE_BUTTON_B(97)
X1 0x09 0x0004 KEYCODE_BUTTON_X(99)
Y1 0x09 0x0005 KEYCODE_BUTTON_Y(100)
D-pad 上1
D-pad 下1
0x01 0x00393 AXIS_HAT_Y4
D-pad 左1
D-pad 右1
0x01 0x00393 AXIS_HAT_X4
左ショルダーボタン1 0x09 0x0007 KEYCODE_BUTTON_L1(102)
右ショルダー ボタン1 0x09 0x0008 KEYCODE_BUTTON_R1(103)
左スティック クリック1 0x09 0x000E KEYCODE_BUTTON_THUMBL(106)
右スティック クリック1 0x09 0x000F KEYCODE_BUTTON_THUMBR(107)
戻る1 0x0c 0x0224 KEYCODE_BACK(4)

1 KeyEvent

2 上記の HID 使用状況は、ゲームパッド CA(0x01 0x0005)内で宣言しなければなりません。

3 この使用状況は、論理最小値 0、論理最大値 7、物理最小値 0、物理最大値 315、度単位、レポートサイズ 4 でなければなりません。論理値は、垂直軸から時計回りに定義されます。たとえば、論理値 0 は回転せず上ボタンが押されていることを表し、論理値 1 は 45 度回転し上キーと左キーの両方が押されていることを表します。

4 MotionEvent

アナログ コントロール1 HID 使用状況 Android ボタン
左トリガー 0x02 0x00C5 AXIS_LTRIGGER
右トリガー 0x02 0x00C4 AXIS_RTRIGGER
左ジョイスティック 0x01 0x0030
0x01 0x0031
AXIS_X
AXIS_Y
右ジョイスティック 0x01 0x0032
0x01 0x0035
AXIS_Z
AXIS_RZ

1 MotionEvent

7.2.7. リモコン

デバイス固有の要件についてはセクション 2.3.1 をご覧ください。

7.3. センサー

サードパーティ デベロッパー向けの対応する API を持つ特定のセンサータイプがデバイス実装に含まれる場合、デバイス実装は、センサーに関する Android SDK ドキュメントと Android オープンソース ドキュメントに記載されているとおり、その API を実装しなければなりません。

デバイス実装は:

  • [C-0-1] android.content.pm.PackageManager クラスごとにセンサーの有無を正確にレポートしなければなりません。
  • [C-0-2] SensorManager.getSensorList() や同様のメソッドを介してサポート対象のセンサーの正確なリストを返さなければなりません。
  • [C-0-3] 他のセンサー API すべてについて合理的に動作しなければなりません(たとえば、アプリがリスナーの登録を試行したとき true または false のうち該当する方を返す、対応するセンサーが存在しないときはセンサー リスナーを呼び出さない、など)。

サードパーティ デベロッパー向けの対応する API を持つ特定のセンサータイプが含まれる場合、デバイス実装は:

  • [C-1-1] Android SDK ドキュメントで定義されているとおり、センサータイプごとに関連する国際単位系(メートル法)の値を使用して、すべてのセンサー測定値をレポートしなければなりません。
  • [C-1-2] アプリ プロセッサがアクティブなとき、最大要求レイテンシが 0 ms のセンサー ストリームの場合、最大レイテンシ 100 ミリ秒 + 2 * sample_time のセンサーデータをレポートしなければなりません。この遅延にフィルタリングの遅延は含まれません。
  • [C-1-3] センサーがアクティブになっている 400 ミリ秒 + 2 * sample_time 以内に最初のセンサー サンプルをレポートしなければなりません。このサンプルの正確度は 0 でも許容されます。
  • [C-1-4] 連続センサーであることが Android SDK ドキュメントで示されている API の場合、デバイス実装は、ジッターが 3% 未満であるべき定期データサンプルを継続的に提供しなければなりません(ジッターは、連続するイベント間でレポートされるタイムスタンプ値の標準偏差として定義されます)。
  • [C-1-5] デバイス CPU がサスペンド状態に入ること、またはサスペンド状態から復帰することを、センサー イベント ストリームが妨げてはならないということを保証しなければなりません。
  • [C-1-6] Android SDK ドキュメントで定義されているとおり、ナノ秒単位でイベント時刻をレポートしなければなりません。これはイベントが発生した時刻を表し、SystemClock.elapsedRealtimeNano() クロックと同期されています。
  • [C-SR-1] タイムスタンプ同期エラーが 100 ミリ秒未満であることが強く推奨され、タイムスタンプ同期エラーが 1 ミリ秒未満であるべきです。
  • 複数のセンサーが有効になっているとき、消費電力は、個々のセンサーがレポートした消費電力の合計を超えるべきではありません。

上記のリストは包括的なものではありません。センサーに関する Android SDK ドキュメントと Android オープンソース ドキュメントに記載されている動作を、信頼できるものとみなします。

サードパーティ デベロッパー向けの対応する API を持つ特定のセンサータイプが含まれる場合、デバイス実装は:

  • [C-1-6] すべてのセンサーにゼロ以外の解像度を設定し、Sensor.getResolution() API メソッドを介して値をレポートしなければなりません。

一部のセンサータイプは複合型です。つまり、1 つ以上の他のセンサーによって提供されるデータから得られることがあります(方向センサーや直線加速度センサーなど)。

デバイス実装は:

  • センサータイプに記載されているとおり、必須の物理センサーを含む場合、これらのセンサータイプを実装すべきです。

複合センサーが含まれる場合、デバイス実装は:

  • [C-2-1] 複合センサーに関する Android オープンソース ドキュメントに記載されているとおり、センサーを実装しなければなりません。

サードパーティ デベロッパー向けの対応する API を持つ特定のセンサータイプが含まれ、センサーが値を 1 つだけレポートする場合、デバイス実装は:

  • [C-3-1] センサーの解像度を 1 に設定し、Sensor.getResolution() API メソッドを介して値をレポートしなければなりません。

SensorAdditionalInfo#TYPE_VEC3_CALIBRATION をサポートする特定のセンサータイプが含まれ、センサーがサードパーティ デベロッパーに公開される場合、デバイス実装は:

  • [C-4-1] 提供されるデータに、出荷時に決定した固定の調整パラメータを含めてはなりません。

3 軸加速度計、3 軸ジャイロスコープ センサー、磁力計センサーの組み合わせが含まれる場合、デバイス実装は:

  • [C-SR-2] 加速度計、ジャイロスコープ、磁力計の相対位置が固定されるようにすることが強く推奨されます。これにより、デバイスが変形可能(折りたたみ式など)な場合、どのような状態に変形する可能性があっても、センサーの軸がセンサー座標系との整合性を保ちます。

7.3.1. 加速度計

デバイス実装は:

  • [C-SR-1] 3 軸加速度計を含めることが強く推奨されます。

加速度計が含まれる場合、デバイス実装は:

  • [C-1-1] 少なくとも周波数 50 Hz までのイベントをレポートできなければなりません。
  • [C-1-3] Android API で詳述されているとおり、Android センサー座標系に準拠しなければなりません。
  • [C-1-4] どの軸でも、自由落下から重力の 4 倍(4g)以上まで測定できなければなりません。
  • [C-1-5] 解像度が少なくとも 12 ビットでなければなりません。
  • [C-1-6] 標準偏差が 0.05 m/s^ 以下でなければなりません。標準偏差は、最速サンプリング レートで少なくとも 3 秒間にわたって収集されたサンプルについて、軸ごとに計算すべきです。
  • 少なくとも 200 Hz までのイベントをレポートすべきです。
  • 解像度が少なくとも 16 ビットであるべきです。
  • ライフサイクル中に特性が変化して補正される場合、使用中に調整すべきであり、デバイスが再起動される間も補正パラメータを保持すべきです。
  • 温度補正をすべきです。

3 軸加速度計が含まれる場合、デバイス実装は:

  • [C-2-1] TYPE_ACCELEROMETER センサーを実装し、レポートしなければなりません。
  • [C-SR-4] TYPE_SIGNIFICANT_MOTION 複合センサーを実装することが強く推奨されます。
  • [C-SR-5] TYPE_ACCELEROMETER_UNCALIBRATED センサーを実装し、レポートすることが強く推奨されます。Android デバイスは、要求される可能性のある今後のプラットフォーム リリースにアップグレードできるよう、この要件を満たすことが強く推奨されます。
  • Android SDK ドキュメントに記載されているとおり、複合センサー TYPE_SIGNIFICANT_MOTIONTYPE_TILT_DETECTORTYPE_STEP_DETECTORTYPE_STEP_COUNTER を実装すべきです。

3 軸未満の加速度計が含まれる場合、デバイス実装は:

  • [C-3-1] TYPE_ACCELEROMETER_LIMITED_AXES センサーを実装し、レポートしなければなりません。
  • [C-SR-6] TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED センサーを実装し、レポートすることが強く推奨されます。

3 軸加速度計が含まれ、TYPE_SIGNIFICANT_MOTIONTYPE_TILT_DETECTORTYPE_STEP_DETECTORTYPE_STEP_COUNTER のいずれかの複合センサーが実装される場合、デバイス実装は:

  • [C-4-1] 消費電力の合計が常に 4 mW 未満でなければなりません。
  • デバイスが動的状態または静的状態にあるとき、それぞれ 2 mW 未満、0.5 mW 未満であるべきです。

3 軸加速度計と 3 軸ジャイロスコープ センサーが含まれる場合、デバイス実装は:

  • [C-5-1] 複合センサー TYPE_GRAVITYTYPE_LINEAR_ACCELERATION を実装しなければなりません。
  • [C-SR-7] TYPE_GAME_ROTATION_VECTOR 複合センサーを実装することが強く推奨されます。

3 軸加速度計、3 軸ジャイロスコープ センサー、磁力計センサーが含まれる場合、デバイス実装は:

  • [C-6-1] TYPE_ROTATION_VECTOR 複合センサーを実装しなければなりません。

7.3.2. 磁力計

デバイス実装は:

  • [C-SR-1] 3 軸磁力計(コンパス)を含むことが強く推奨されます。

3 軸磁力計が含まれる場合、デバイス実装は:

  • [C-1-1] TYPE_MAGNETIC_FIELD センサーを実装しなければなりません。
  • [C-1-2] 少なくとも周波数が 10 Hz までのイベントをレポートできなければならず、少なくとも 50 Hz までのイベントをレポートすべきです。
  • [C-1-3] Android API で詳述されているとおり、Android センサー座標系を遵守しなければなりません。
  • [C-1-4] 飽和する前に各軸で -900 µT~+900 µT を測定できなければなりません。
  • [C-1-5] 磁力計を動的(電流誘導)磁場と静的(磁気誘導)磁場から離して配置することで、ハードアイアン オフセット値が 700 µT 未満でなければならず、200 µT 未満であるべきです。
  • [C-1-6] 解像度が 0.6 µT 以上でなければなりません。
  • [C-1-7] ハードアイアン バイアスのオンラインの調整と補正をサポートしなければならず、デバイスの再起動の間で補正パラメータを保持しなければなりません。
  • [C-1-8] ソフトアイアン補正を適用しなければなりません。調整は、デバイスの使用中または製造中に行うことができます。
  • [C-1-9] 標準偏差が、最速サンプリング レートで少なくとも 3 秒間にわたって収集されたサンプルについて軸ごとに計算して 1.5 µT 以下でなければならず、標準偏差が 0.5 µT 以下であるべきです。
  • [C-1-10] TYPE_MAGNETIC_FIELD_UNCALIBRATED センサーを実装しなければなりません。

3 軸磁力計、加速度計センサー、3 軸ジャイロスコープ センサーが含まれる場合、デバイス実装は:

  • [C-2-1] TYPE_ROTATION_VECTOR 複合センサーを実装しなければなりません。

3 軸磁力計、加速度計が含まれる場合、デバイス実装は:

  • TYPE_GEOMAGNETIC_ROTATION_VECTOR センサーを実装しても構いません。

3 軸磁力計、加速度計、TYPE_GEOMAGNETIC_ROTATION_VECTOR センサーが含まれる場合、デバイス実装は:

  • [C-3-1] 消費電力が 10 mW 未満でなければなりません。
  • センサーが 10 Hz でバッチモードに登録されている場合、消費電力が 3 mW 未満であるべきです。

7.3.3. GPS

デバイス実装は:

  • [C-SR-1] GPS / GNSS レシーバーを含むことが強く推奨されます。

GPS / GNSS レシーバーが含まれ、android.hardware.location.gps 機能フラグを通じてアプリに機能をレポートする場合、デバイス実装は:

  • [C-1-1] LocationManager#requestLocationUpdate を介してリクエストされたとき、少なくとも 1 Hz のレートでの位置情報出力をサポートしなければなりません。
  • [C-1-2] データ速度が 0.5 Mbps 以上のインターネット接続に接続したとき、全天条件下(信号強度が高く、マルチパスを無視でき、HDOP < 2)で、10 秒以内に位置を決定できなければなりません(初期位置算出時間が短い)。この要件は通常、GPS / GNSS ロックオン時間を最小限に抑えるための、なんらかの形の支援または予測 GPS / GNSS 技術を使用することで満たします(支援データには基準時間、基準位置、衛星エフェメリス / クロックが含まれます)。
    • [C-1-6] このような位置計算を行った後、デバイス実装は、位置情報のリクエストが再開されたとき、初期位置計算から最大 1 時間後まで、後続のリクエストがデータ接続なしで行われたときや、電源をオフにして再度オンにした後であっても、全天条件下で 5 秒以内に位置を決定しなければなりません。
  • 位置を決定した後、全天条件下で、静止しながら、または加速度 1 m/s2 未満で移動しながら:

    • [C-1-3] 少なくとも 95% の時間で、位置を 20 m 以内、速度を 0.5 m/s 以内で決定できなければなりません。
    • [C-1-4] GnssStatus.Callback を介して、1 つのコンステレーションから少なくとも 8 つの衛星を同時にトラック、レポートしなければなりません。
    • 複数のコンステレーションから少なくとも 24 の衛星を同時にトラックできるべきです(例: GPS と、Glonass、Beidou、Galileo のうち少なくとも 1 つ)。
  • [C-SR-2] 緊急通報の際も、GNSS Location Provider API を通じて通常の GPS / GNSS 位置情報出力を引き続き提供することが強く推奨されます。

  • [C-SR-3] SBAS を除き、トラックしたすべてのコンステレーションからの GNSS 測定値を(GnssStatus メッセージでレポートされたとおり)レポートすることが強く推奨されます。

  • [C-SR-4] AGC と、GNSS 測定頻度をレポートすることが強く推奨されます。

  • [C-SR-5] すべての正確度推定値(方位角、速度、垂直を含む)を、各 GPS / GNSS 位置情報の一部としてレポートすることが強く推奨されます。

  • [C-SR-6] GPS / GNSS から計算した位置情報がまだレポートされていない場合であっても、GNSS 測定値が判明したらすぐにレポートすることが強く推奨されます。

  • [C-SR-7] 位置を決定した後、全天条件下で、静止しているか加速度 0.2 m/s2 未満で移動している間に、少なくとも 95% の時間で 20 m 以内の位置と 0.2 m/s 以内の速度を計算するのに十分な、GNSS の擬似距離と擬似距離レートをレポートすることが強く推奨されます。

7.3.4. ジャイロスコープ

デバイス実装は:

  • [C-SR-1] ジャイロスコープ センサーを含めることが強く推奨されます。

ジャイロスコープが含まれる場合、デバイス実装は:

  • [C-1-1] 少なくとも周波数 50 Hz までのイベントをレポートできなければなりません。
  • [C-1-4] 解像度が 12 ビット以上でなければなりません。
  • [C-1-5] 温度補正しなければなりません。
  • [C-1-6] 使用中に調整と補正を行わなければならず、デバイスの再起動の間で補正パラメータを保持しなければなりません。
  • [C-1-7] 分散が Hz あたり 1e-7 rad^2 / s^2(Hz あたりの分散または rad^2 / s)以下でなければなりません。分散はサンプリング レートによって異なることが許容されますが、この値の制約を受けなければなりません。つまり、サンプリング レート 1 Hz でジャイロの分散を測定した場合、1e-7 rad^2/s^2 以下であるべきです。
  • [C-SR-2] 補正誤差は、室温でデバイスが静止しているとき、0.01 rad/s 未満であることが強く推奨されます。
  • [C-SR-3] 解像度が 16 ビット以上であることが強く推奨されます。
  • 少なくとも 200 Hz までのイベントをレポートすべきです。

3 軸ジャイロスコープが含まれる場合、デバイス実装は:

  • [C-2-1] TYPE_GYROSCOPE センサーを実装しなければなりません。
  • [C-SR-4] TYPE_GYROSCOPE_UNCALIBRATED センサーを実装することが強く推奨されます。

3 軸未満のジャイロスコープが含まれる場合、デバイス実装は:

  • [C-3-1] TYPE_GYROSCOPE_LIMITED_AXES センサーを実装し、レポートしなければなりません。
  • [C-SR-5] TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED センサーを実装し、レポートすることが強く推奨されます。

3 軸ジャイロスコープ、加速度計センサー、磁力計センサーが含まれる場合、デバイス実装は:

  • [C-4-1] TYPE_ROTATION_VECTOR 複合センサーを実装しなければなりません。

3 軸加速度計と 3 軸ジャイロスコープ センサーが含まれる場合、デバイス実装は:

  • [C-5-1] 複合センサー TYPE_GRAVITYTYPE_LINEAR_ACCELERATION を実装しなければなりません。
  • [C-SR-6] TYPE_GAME_ROTATION_VECTOR 複合センサーを実装することが強く推奨されます。

7.3.5. 気圧計

デバイス実装は:

  • [C-SR-1] 気圧計(大気圧センサー)を含むことが強く推奨されます。

気圧計が含まれる場合、デバイス実装は:

  • [C-1-1] TYPE_PRESSURE センサーを実装し、レポートしなければなりません。
  • [C-1-2] 5 Hz 以上でイベントを配信できなければなりません。
  • [C-1-3] 温度補正しなければなりません。
  • [C-SR-2] 300 hPa から 1,100 hPa までの圧力測定値をレポートできることが強く推奨されます。
  • 絶対正確度が 1 hPa であるべきです。
  • 相対正確度が 20 hPa の範囲で 0.12 hPa であるべきです(海面における ~200 m の変化で正確度 ~1 m に相当)。

7.3.6. 温度計

周囲温度計(温度センサー)が含まれる場合、デバイス実装は:

  • [C-1-1] 周囲温度センサーについて SENSOR_TYPE_AMBIENT_TEMPERATURE を定義しなければならず、センサーは、ユーザーがデバイスを操作している場所の周囲温度(室温 / 車内温度)を摂氏で測定しなければなりません。

周囲温度以外の温度(CPU 温度など)を測定する温度計センサーが含まれる場合、デバイス実装は:

皮膚温をモニタリングするためのセンサーが含まれる場合、デバイス実装は:

7.3.7. 光度計

  • デバイス実装は、光度計(周囲光センサー)を含んでも構いません。

7.3.8. 近接センサー

  • デバイス実装は、近接センサーを含んでも構いません。

近接センサーを含み、「近」読み取り値もしくは「遠」読み取り値のバイナリのみをレポートする場合、デバイス実装は:

  • [C-1-1] 画面と同じ向きで物体の近接を測定しなければなりません。つまり近接センサーは、画面の近くにある物体を検出するような向きでなければなりません。これは、スマートフォンをユーザーが使用中であることの検出が、この種のセンサーの主な目的であるためです。他の向きの近接センサーを含む場合、デバイス実装は、この API を通じてアクセス可能であってはなりません。
  • [C-1-2] 正確度が 1 ビット以上でなければなりません。
  • [C-1-3] 「近」読み取り値として 0 センチメートル、「遠」読み取り値として 5 センチメートルを使用しなければなりません。
  • [C-1-4] 最大範囲と解像度 5 をレポートしなければなりません。

7.3.9. ハイファイ センサー

このセクションで規定するとおり、高品質センサーのセットが含まれ、サードパーティ アプリで利用できるようにする場合、デバイス実装は:

  • [C-1-1] android.hardware.sensor.hifi_sensors 機能フラグを通じて機能を識別しなければなりません。

android.hardware.sensor.hifi_sensors を宣言する場合、デバイス実装は:

  • [C-2-1] 次の条件を満たす TYPE_ACCELEROMETER センサーがなければなりません。

    • 測定範囲が少なくとも -8g~+8g でなければならず、測定範囲が少なくとも -16g~+16g であることが強く推奨されます。
    • 測定解像度が少なくとも 2,048 LSB/g でなければなりません。
    • 最小測定周波数が 12.5 Hz 以下でなければなりません。
    • 最大測定周波数が 400 Hz 以上でなければならず、SensorDirectChannel RATE_VERY_FAST をサポートすべきです。
    • 測定雑音が 400 μg/√Hz 以下でなければなりません。
    • 少なくとも 3,000 件のセンサー イベントをバッファリングできる、このセンサーの非ウェイクアップ フォームを実装しなければなりません。
    • 計量消費電力が 3 mW 以下でなければなりません。
    • [C-SR-1] 3 dB 測定帯域幅がナイキスト周波数の少なくとも 80% であり、ホワイトノイズ スペクトルがこの帯域幅内であることが強く推奨されます。
    • 室温でテストして加速度ランダム ウォークが 30 μg √Hz 未満であるべきです。
    • 温度に対するバイアス変化が +/- 1 mg/°C 以下であるべきです。
    • 最良適合線が非線形で 0.5% 以下、温度に対する感度変化が 0.03%/C° 以下であるべきです。
    • デバイスの動作温度範囲で、直交軸感度が 2.5% 未満、直交軸感度の変動が 0.2% 未満であるべきです。
  • [C-2-2] TYPE_ACCELEROMETER_UNCALIBRATED の品質要件が TYPE_ACCELEROMETER と同じでなければなりません。

  • [C-2-3] 次の条件を満たす TYPE_GYROSCOPE センサーがなければなりません。

    • 測定範囲が少なくとも -1,000~+1,000 dps でなければなりません。
    • 測定解像度が少なくとも 16 LSB/dps でなければなりません。
    • 最小測定周波数が 12.5 Hz 以下でなければなりません。
    • 最大測定周波数が 400 Hz 以上でなければならず、SensorDirectChannel RATE_VERY_FAST をサポートすべきです。
    • 測定雑音が 0.014°/s/√Hz 以下でなければなりません。
    • [C-SR-2] 3 dB 測定帯域幅がナイキスト周波数の少なくとも 80% であり、ホワイトノイズ スペクトルがこの帯域幅内であることが強く推奨されます。
    • 室温でテストしてレートランダム ウォークが 0.001 °/s √Hz 未満であるべきです。
    • 温度に対するバイアス変化が +/- 0.05 °/ s / °C 以下であるべきです。
    • 温度に対する感度変化が 0.02% / °C 以下であるべきです。
    • 最良適合線が非線形で 0.2% 以下であるべきです。
    • 雑音密度が 0.007 °/s/√Hz 以下であるべきです。
    • デバイスが静止しているとき、温度範囲 10~40℃ で調整誤差が 0.002 rad/s 未満であるべきです。
    • 加速度感度が 0.1°/s/g 未満であるべきです。
    • デバイスの動作温度範囲で、直交軸感度が 4.0% 未満、直交軸感度の変動が 0.3% 未満であるべきです。
  • [C-2-4] TYPE_GYROSCOPE_UNCALIBRATED の品質要件が TYPE_GYROSCOPE と同じでなければなりません。

  • [C-2-5] 次の条件を満たす TYPE_GEOMAGNETIC_FIELD センサーがなければなりません。

    • 測定範囲が少なくとも -900~+900 μT でなければなりません。
    • 測定解像度が少なくとも 5 LSB/uT でなければなりません。
    • 最小測定周波数が 5 Hz 以下でなければなりません。
    • 最大測定周波数が 50 Hz 以上でなければなりません。
    • 測定雑音が 0.5 uT 以下でなければなりません。
  • [C-2-6] TYPE_MAGNETIC_FIELD_UNCALIBRATED の品質要件が TYPE_GEOMAGNETIC_FIELD と同じでなければならず、さらに:

    • 少なくとも 600 件のセンサー イベントをバッファリングできる、このセンサーの非ウェイクアップ フォームを実装しなければなりません。
    • [C-SR-3] レポートレートが 50 Hz 以上のとき、ホワイトノイズ スペクトラムが 1 Hz から少なくとも 10 Hz までであることが強く推奨されます。
  • [C-2-7] 次の条件を満たす TYPE_PRESSURE センサーがなければなりません。

    • 測定範囲が少なくとも 300~1,100 hPa でなければなりません。
    • 測定解像度が少なくとも 80 LSB/hPa でなければなりません。
    • 最小測定周波数が 1 Hz 以下でなければなりません。
    • 最大測定周波数が 10 Hz 以上でなければなりません。
    • 測定雑音が 2 Pa/√Hz 以下でなければなりません。
    • 少なくとも 300 件のセンサー イベントをバッファリングできる、このセンサーの非ウェイクアップ フォームを実装しなければなりません。
    • 計量消費電力が 2 mW 以下でなければなりません。
  • [C-2-8] TYPE_GAME_ROTATION_VECTOR センサーがなければなりません。

  • [C-2-9] 次の条件を満たす TYPE_SIGNIFICANT_MOTION センサーがなければなりません。

    • 消費電力が、デバイス静止時は 0.5 mW 以下でなければならず、デバイス移動時は 1.5 mW 以下でなければなりません。
  • [C-2-10] 次の条件を満たす TYPE_STEP_DETECTOR センサーがなければなりません。

    • 少なくとも 100 件のセンサー イベントをバッファリングできる、このセンサーの非ウェイクアップ フォームを実装しなければなりません。
    • 消費電力が、デバイス静止時は 0.5 mW 以下でなければならず、デバイス移動時は 1.5 mW 以下でなければなりません。
    • 計量消費電力が 4 mW 以下でなければなりません。
  • [C-2-11] 次の条件を満たす TYPE_STEP_COUNTER センサーがなければなりません。

    • 消費電力が、デバイス静止時は 0.5 mW 以下でなければならず、デバイス移動時は 1.5 mW 以下でなければなりません。
  • [C-2-12] 次の条件を満たす TILT_DETECTOR センサーがなければなりません。

    • 消費電力が、デバイス静止時は 0.5 mW 以下でなければならず、デバイス移動時は 1.5 mW 以下でなければなりません。
  • [C-2-13] 加速度計、ジャイロスコープ、磁力計がレポートする同じ物理イベントのイベント タイムスタンプが、互いに 2.5 ミリ秒以内でなければなりません。加速度計とジャイロスコープがレポートする同じ物理イベントのイベント タイムスタンプが、互いに 0.25 ミリ秒以内であるべきです。

  • [C-2-14] ジャイロスコープ センサーのイベント タイムスタンプがカメラ サブシステムと同じタイムベースであり、誤差 1 ミリ秒以内でなければなりません。

  • [C-2-15] 上記の物理センサーのいずれかでアプリがデータを利用できるようになった時点から 5 ミリ秒以内に、サンプルをアプリに配信しなければなりません。

  • [C-2-16] 次のセンサーの組み合わせが有効なとき、消費電力が、デバイス静止時は 0.5 mW を超えてはならず、デバイス移動時は 2.0 mW を超えてはなりません。

    • SENSOR_TYPE_SIGNIFICANT_MOTION
    • SENSOR_TYPE_STEP_DETECTOR
    • SENSOR_TYPE_STEP_COUNTER
    • SENSOR_TILT_DETECTORS
  • [C-2-17] TYPE_PROXIMITY センサーがあっても構いませんが、存在する場合、少なくとも 100 件のセンサー イベントをバッファリングできなければなりません。

なお、このセクションの消費電力要件はすべて、アプリ プロセッサの消費電力を含みません。センサー チェーン全体(センサー、補助回路、専用のセンサー処理システムなど)によって消費される電力が含まれます。

ダイレクト センサー サポートが含まれる場合、デバイス実装は:

  • [C-3-1] isDirectChannelTypeSupported API と getHighestDirectReportRateLevel API を通じて、ダイレクト チャネルタイプとダイレクト レポート レートレベルのサポートを正しく宣言しなければなりません。
  • [C-3-2] センサー ダイレクト チャネルのサポートを宣言するすべてのセンサーについて、2 つのセンサー ダイレクト チャネルタイプのうち少なくとも 1 つをサポートしなければなりません。
  • 次のタイプのプライマリ センサー(非ウェイクアップ バリアント)のセンサー ダイレクト チャネルを通じたイベント レポートをサポートすべきです。
    • TYPE_ACCELEROMETER
    • TYPE_ACCELEROMETER_UNCALIBRATED
    • TYPE_GYROSCOPE
    • TYPE_GYROSCOPE_UNCALIBRATED
    • TYPE_MAGNETIC_FIELD
    • TYPE_MAGNETIC_FIELD_UNCALIBRATED

7.3.10. 生体認証センサー

生体認証によるロック解除のセキュリティの測定について詳しくは、生体認証を用いたロック解除のセキュリティ測定をご覧ください。

セキュアロック画面が含まれる場合、デバイス実装は:

  • 生体認証センサーを含むべきです。

生体認証センサーは、スプーフィング受け入れ率、なりすまし受け入れ率、生体認証パイプラインのセキュリティに基づいて、クラス 3(旧称「」)、クラス 2(旧称「」)、クラス 1(旧称「利便性」)に分類できます。この分類によって、生体認証センサーがプラットフォームやサードパーティ アプリとインターフェースで接続する機能が決まります。センサーがクラス 1クラス 2クラス 3 に分類されるようにするには、以下のとおり追加の要件を満たす必要があります。クラス 2クラス 3 の生体認証には、以下の追加の機能があります。

android.hardware.biometrics.BiometricManagerandroid.hardware.biometrics.BiometricPromptandroid.provider.Settings.ACTION_BIOMETRIC_ENROLL を介してサードパーティ アプリで生体認証センサーを利用できるようにする場合、デバイス実装は:

  • [C-4-1] このドキュメントで規定するとおり、クラス 3 またはクラス 2 の生体認証の要件を満たさなければなりません。
  • [C-4-2] Authenticators クラスで定数として定義された各パラメータ名とそれらの組み合わせを認識し、使用しなければなりません。逆に、Authenticators でパブリック定数として記述されているもの以外の、canAuthenticate(int) メソッドと setAllowedAuthenticators(int) メソッドに渡された整数定数を使用または認識してはなりません。
  • [C-4-3] クラス 3 またはクラス 2 の生体認証を有するデバイスでは、ACTION_BIOMETRIC_ENROLL アクションを実装しなければなりません。このアクションは、クラス 3 またはクラス 2 の生体認証の登録エントリ ポイントのみを提示しなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-4-4](2024 年 4 月 8 日プレビュー)

  • [C-4-4] アプリで PromptContentView コンテンツ表示形式を使用して BiometricPrompt にカスタムのコンテンツを追加できなければなりません。コンテンツ表示形式を拡張して、まだ BiometricPrompt API の一部ではない画像、リンク、インタラクティブなコンテンツ、その他メディア形式を許可してはなりません。このコンテンツを改変する、隠す、または切り取ることのないスタイルの調整(位置、パディング、マージン、タイポグラフィなどの変更)は可能です。

新しい要件の終了

[C-4-4](2024 年 2 月 5 日プレビュー)

  • [C-4-4] カスタムの BiometricPrompt UI をサポートしている場合、BiometricPrompt のコンテンツ表示形式(タイトルのテキスト、説明文、コンテンツ本文のテンプレートなど)を根本的に変更してはなりません。コンテンツ表示形式を拡張して、まだ BiometricPrompt API の一部ではない画像、リンク、インタラクティブなコンテンツ、その他メディア形式を許可してはなりません。このコンテンツ(パディング、マージン、位置など)を大幅に変更または目立たなくすることがない範囲であれば、スタイルを微調整できます。

新しい要件の終了

[C-4-4](2023 年 12 月 11 日プレビュー)

  • [C-4-4] カスタムの BiometricPrompt UI をサポートしている場合、BiometricPrompt のコンテンツ表示形式(タイトルのテキスト、説明文、コンテンツ本文のテンプレートなど)を根本的に変更してはなりません。コンテンツ表示形式を拡張して、まだ BiometricPrompt API の一部ではない画像、リンク、インタラクティブなコンテンツ、その他のメディア形式を許可することはできません。軽微なスタイルの変更は、このコンテンツ(パディング、マージン、位置など)を大幅に変更または目立たなくすることがなければ、許可しても構いません。

新しい要件の終了

受動的生体認証をサポートする場合、デバイス実装は:

  • [C-5-1] デフォルトで追加の確認ステップ(ボタンの押下など)を要求しなければなりません。
  • [C-SR-1] ユーザーがアプリの設定を上書きできるように設定することが強く推奨され、常に確認ステップを伴うことが要求されます。
  • [C-SR-2] オペレーティング システムやカーネルの不正使用によってスプーフィングできないように、確認アクションをセキュアにすることが強く推奨されます。たとえば、物理ボタンに基づく確認アクションは、物理ボタンの押下以外では動作できないセキュア エレメント(SE)の入力専用の汎用入出力(GPIO)ピンを通じてルーティングされます。
  • [C-5-2] さらに、ログインフローで利用するようにアプリが設定できる、setConfirmationRequired(ブール値)に応じた暗黙的認証フローを実装しなければなりません。

生体認証センサーが複数ある場合、デバイス実装は:

  • [C-7-1] 試行に失敗した回数が上限を超えたことにより、生体認証がロックアウトされた場合(ユーザーが第 1 の認証でロック解除するまで生体認証が無効になっている場合)、または期限付きでロックアウトされている場合(ユーザーが一定時間の待機を完了するまでは生体認証が一時的に無効になっている場合)は、下位の生体認証クラスのその他の生体認証もすべてロックアウトしなければなりません。期限付きロックアウトの場合、生体認証検証のバックオフ時間は、期限付きロックアウト中のすべての生体認証の最大バックオフ時間でなければなりません。

  • [C-SR-12] 試行に失敗した回数が上限を超えたことにより、生体認証がロックアウトされた場合(ユーザーが第 1 の認証でロック解除するまで生体認証が無効になっている場合)、または期限付きでロックアウトされている場合(ユーザーが一定時間の待機を完了するまでは生体認証が一時的に無効になっている場合)は、同じ生体認証クラスのその他の生体認証もすべてロックアウトすることが強く推奨されます。期限付きロックアウトの場合、生体認証検証のバックオフ時間は、期限付きロックアウト中のすべての生体認証の最大バックオフ時間とすることが強く推奨されます。

  • [C-7-2] ロックアウト中の生体認証のロックアウト カウンタをリセットするために、推奨される第 1 の認証(PIN、パターン、パスワードなど)をユーザーに求めなければなりません。クラス 3 の生体認証では、ロック中の同じまたは下位のクラスの生体認証のロックアウト カウンタをリセットできても構いません。クラス 2 またはクラス 1 の生体認証で、生体認証のリセット ロックアウト オペレーションを完了してはなりません。

  • [C-SR-3] 1 回の認証で確認される生体認証は 1 つのみとすることが強く推奨されます(例: デバイスで指紋センサーと顔センサーの両方が利用可能な場合、どちらかの認証が成功したら onAuthenticationSucceeded が送信されるべきです)。

サードパーティ アプリにキーストアキーへのアクセスを許可するために、デバイス実装は:

  • [C-6-1] このセクションで後述するとおり、クラス 3 の要件を満たさなければなりません。
  • [C-6-2] 認証で BIOMETRIC_STRONG が必要な場合、または認証が CryptoObject によって呼び出された場合は、クラス 3 の生体認証のみ提示しなければなりません。

生体認証センサーをクラス 1(旧称「利便性」)として扱う場合、デバイス実装は:

15(AOSP 試験運用版)の新しい要件の開始

[C-1-1](2023 年 12 月 11 日プレビュー)

  • [C-1-1] 他人受け入れ率が 0.002% 0.001% 未満でなければなりません。

新しい要件の終了

  • [C-1-2] このモードが強い PIN、パターン、またはパスワードよりもセキュアでない可能性があることを開示しなければならず、Android 生体認証テスト プロトコルによって測定したスプーフィング受け入れ率となりすまし受け入れ率が 7% を超える場合、このモードを有効にすることのリスクを明確に列挙しなければなりません。
  • [C-1-9] 生体認証が 20 回(またはそれ以下)失敗した場合、少なくとも 90 秒のバックオフ時間が経過してから、推奨される第 1 の認証(PIN、パターン、パスワードなど)をユーザーに求めなければなりません。ここで失敗とは、登録された生体認証に一致しないが、品質には問題がないキャプチャ(BIOMETRIC_ACQUIRED_GOOD)が使用された場合を指します。
  • [C-SR-4] Android 生体認証テスト プロトコルによって測定したスプーフィング受け入れ率となりすまし受け入れ率が 7% を超える場合、[C-1-9] で規定されている、生体認証の失敗の最大回数を減らすことが強く推奨されます。
  • [C-1-3] 生体認証の試行回数をレート制限しなければなりません。ここで失敗とは、登録された生体認証に一致しないが、品質には問題がないキャプチャ(BIOMETRIC_ACQUIRED_GOOD)が使用された場合を指します。
  • [C-SR-5] [C-1-9] で規定されている生体認証の失敗の最大回数について、5 回の失敗の後は、少なくとも 30 秒間、レート制限することが強く推奨されます。ここで失敗とは、登録された生体認証に一致しないが、品質には問題がないキャプチャ(BIOMETRIC_ACQUIRED_GOOD)が使用された場合を指します。
  • [C-SR-6] TEE にすべてのレート制限ロジックがあることが強く推奨されます。
  • [C-1-10] セクション 9.11 の [C-0-2] に記載されているとおり、第 1 の認証のバックオフが初めてトリガーされたら、生体認証を無効にしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-11](2023 年 12 月 11 日プレビュー)

  • [C-1-11] Android 生体認証テスト プロトコルによって測定したスプーフィング受け入れ率となりすまし受け入れ率が 30% 以下でなければなりません。具体的には、(1)レベル A のプレゼンテーション攻撃手段(PAI)の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 30% 以下、(2)レベル B の PAI の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 40% 以下でなければなりません。

新しい要件の終了

  • [C-1-4] TEE で保護された、既存のデバイス認証情報をユーザーに確認させることによる、または新しい認証情報(PIN、パターン、パスワード)をユーザーに追加させることによる信頼チェーンの確立を最初に行わずに、新しい生体認証を追加することは避けなければなりません。Android オープンソース プロジェクト実装は、そのためのフレームワークのメカニズムを提供します。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-5](2023 年 12 月 11 日プレビュー)

  • [C-1-5] ユーザーのアカウントが削除されたとき(初期状態にリセットした場合を含む)、または推奨される第 1 の認証方法(PIN、パターン、パスワードなど)が削除されたとき、ユーザーの識別可能なすべての生体認証データを完全に削除しなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-7](2024 年 4 月 8 日プレビュー)

  • [C-1-7] 24 時間以内ごとに 1 回、推奨される第 1 の認証(PIN、パターン、パスワードなど)をユーザーに求めなければなりません。注: Android バージョン 9 以前でリリースされたデバイスをアップグレードする場合、72 時間以内ごとに 1 回、推奨される第 1 の認証(PIN、パターン、パスワードなど)をユーザーに求めなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-8](2023 年 12 月 11 日プレビュー)

  • [C-1-8] 次のいずれかの後、推奨される第 1 の認証(PIN、パターン、パスワードなど)またはクラス 3(強)の生体認証をユーザーに求めなければなりません。
    • 4 時間のアイドル タイムアウト期間、または
    • 生体認証の試行に 3 回失敗。
    • アイドル タイムアウト期間と認証の失敗回数は、デバイス認証情報の確認に成功するとリセットされます。注: Android バージョン 9 以前でリリースされたデバイスをアップグレードする場合は、C-1-8 を免除しても構いません。

新しい要件の終了

  • [C-SR-7] 新しいデバイスに [C-1-7] と [C-1-8] で規定する制約を適用するために、Android オープンソース プロジェクトで提供するフレームワークのロジックを使用することが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-14](2023 年 12 月 11 日プレビュー)

  • [C-SR-8 C-1-14] デバイスで測定したときの本人拒否率が 10% 未満であることが強く推奨されますなければなりません

新しい要件の終了

  • [C-SR-9] 登録した生体認証ごとに、生体認証が検出されてから画面がロック解除されるまでのレイテンシが 1 秒未満であることが強く推奨されます。

15(AOSP 試験運用版)の新しい要件の開始

[C-1-12](2023 年 12 月 11 日プレビュー)

  • [C-1-12] Android 生体認証テスト プロトコルによって測定したスプーフィングとなりすましの受け入れ率が、プレゼンテーション攻撃手段(PAI)の種類ごとに 40% 以下でなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-13](2023 年 12 月 11 日プレビュー)

  • [C-SR-13 C-1-13] Android 生体認証テスト プロトコルによって測定したスプーフィングとなりすましの受け入れ率が、プレゼンテーション攻撃手段(PAI)の種類ごとに 30% 以下であることが強く推奨されますなければなりません

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-14](2024 年 4 月 8 日プレビュー)

  • [C-SR-8 C-1-14] デバイスで測定したときの本人拒否率が 10% 未満であることが強く推奨されますなければなりません

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-1-15](2023 年 12 月 11 日プレビュー)

  • [C-1-15] ユーザーが 1 つまたは複数の生体認証登録を削除できるようにしなければなりません。

新しい要件の終了

  • [C-SR-14] 生体認証センサーの生体認証クラスと、それを有効にすることのリスクを開示することが強く推奨されます。

  • [C-SR-17] 新しい AIDL インターフェース(たとえば、IFace.aidlIFingerprint.aidl)を実装することが強く推奨されます。

生体認証センサーをクラス 2(旧称「」)として扱う場合、デバイス実装は:

  • [C-2-1] 上記のクラス 1 の要件をすべて満たさなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-2-2](2023 年 12 月 11 日プレビュー)

  • [C-2-2] Android 生体認証テスト プロトコルによって測定したスプーフィング受け入れ率となりすまし受け入れ率が 20% 以下でなければなりません。具体的には、(1)レベル A のプレゼンテーション攻撃手段(PAI)の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 20% 以下、(2)レベル B の PAI の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 30% 以下でなければなりません。

新しい要件の終了

15(AOSP 試験運用版)の新しい要件の開始

[C-2-10](2023 年 12 月 11 日プレビュー)

  • [C-SR-15 C-2-10] Android 生体認証テスト プロトコルによって測定したスプーフィングとなりすましの受け入れ率が、プレゼンテーション攻撃手段(PAI)の種類ごとに 20% 以下であることが強く推奨されますなければなりません

新しい要件の終了

  • [C-2-3] 高信頼実行環境(TEE)など Android のユーザーまたはカーネル空間外の隔離された実行環境内、隔離された実行環境へのセキュア チャネルがあるチップ上、セクション 9.17 の要件を満たす Protected Virtual Machine 上で、生体認証マッチングを行わなければなりません。
  • [C-2-4] Android オープンソース プロジェクトのサイトの実装ガイドラインに記載されている隔離された実行環境または隔離された実行環境へのセキュア チャネルがあるチップ、もしくはセクション 9.17 の要件を満たすハイパーバイザによって制御されている Protected Virtual Machine の外部で取得、読み取り、変更できないように、識別可能なすべてのデータを暗号化、暗号認証しなければなりません。
  • [C-2-5] カメラベースの生体認証で、生体認証ベースの認証または登録が行われるとき:
    • 隔離された実行環境または隔離された実行環境へのセキュア チャネルがあるチップ、もしくはセクション 9.17 の要件を満たすハイパーバイザによって制御されている Protected Virtual Machine の外部では、カメラフレームの読み取りと変更が行われないモードで、カメラを動作させなければなりません。
    • RGB シングルカメラ ソリューションでは、登録のためのプレビューなどの動作をサポートするために、隔離された実行環境の外部でカメラフレームを読み取ることはできますが、変更できてはなりません。
  • [C-2-6] サードパーティ アプリで個々の生体認証登録を区別できるようにしてはなりません。
  • [C-2-7] TEE またはセクション 9.17 の要件を満たすハイパーバイザによって制御されている Protected Virtual Machine のコンテキスト外で、識別可能な生体認証データまたはそれから派生したデータ(埋め込みなど)への暗号化されていないアクセスを、アプリ プロセッサに許可してはなりません。Android バージョン 9 以前でリリースされたデバイスをアップグレードする場合、C-2-7 は免除されません。
  • [C-2-8] オペレーティング・システムまたはカーネルの侵害によって、データを直接注入できてしまうことでユーザーとして誤って認証されることのないような、セキュアな処理パイプラインがなければなりません。注: デバイス実装が Android バージョン 9 以前ですでにリリースされており、システム ソフトウェア アップデートを通じて要件 C-2-8 を満たせない場合は、この要件を免除しても構いません。

  • [C-SR-10] すべての生体認証モダリティのための生体検出と、顔による生体認証のための視線検出を含むことが強く推奨されます。

  • [C-2-9] 生体認証センサーをサードパーティ アプリで利用できるようにしなければなりません。

生体認証センサーをクラス 3(旧称「」)として扱う場合、デバイス実装は:

  • [C-3-1] 上記のクラス 2 の要件をすべて満たさなければなりません([C-1-7] と [C-1-8] を除く)。
  • [C-3-2] ハードウェア格納型キーストア実装がなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-3-3](2023 年 12 月 11 日プレビュー)

  • [C-3-3] Android 生体認証テスト プロトコルによって測定したスプーフィング受け入れ率となりすまし受け入れ率が 7% 以下でなければなりません。具体的には、(1)レベル A のプレゼンテーション攻撃手段(PAI)の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 7% 以下、(2)レベル B の PAI の種類に対するスプーフィング受け入れ率となりすまし受け入れ率が 20% 以下でなければなりません。

新しい要件の終了

  • [C-3-4] 72 時間以内ごとに 1 回、推奨される第 1 の認証(PIN、パターン、パスワードなど)をユーザーに求めなければなりません。
  • [C-3-5] デバイスでサポートされているすべてのクラス 3 生体認証が再登録された場合、認証システム ID を再生成しなければなりません。
  • [C-3-6] サードパーティ アプリに対し、生体認証によるキーストア鍵を有効にしなければなりません。

15(AOSP 試験運用版)の新しい要件の開始

[C-3-7](2023 年 12 月 11 日プレビュー)

  • [C-SR-16 C-3-7] Android 生体認証テスト プロトコルによって測定したスプーフィングとなりすましの受け入れ率が、プレゼンテーション攻撃手段(PAI)の種類ごとに 7% 以下であることが強く推奨されますなければなりません

新しい要件の終了

ディスプレイ内蔵指紋認証センサー(UDFPS)が含まれる場合、デバイス実装は:

  • [C-SR-11] UDFPS のタップ可能エリアが 3 ボタン ナビゲーションの妨げにならないようにすることが強く推奨されます(ユーザー補助で必要とするユーザーがいる可能性があります)。

15(AOSP 試験運用版)の新しい要件の開始

[C-8-1 から C-8-6] [撤回](2024 年 4 月 8 日プレビュー)

これらの要件は Android 15(AOSP 試験運用版)で撤回されました。

新しい要件の終了

[C-8-1 から C-8-6](2023 年 12 月 11 日プレビュー)

バインディング用に生体認証センサーを許可する(特定のユースケースにバインドされた主なユーザー認証方法として使用できるようにする)場合、デバイス実装は:

  • [C-8-1] このセクションで規定するとおり、クラス 3 の要件を満たさなければなりません。特定の状況でのユーザビリティが以下のフォールバック要件により懸念される場合は、クラス 3 の生体認証は除外して、バインディングに関与しないようにしても構いません。
  • [C-8-2] 同時に複数のバインドされた生体認証を許可してはなりません。たとえば、顔認証と指紋認証などの複数の生体認証モダリティが利用可能で有効な場合、1 つのモダリティと 1 つのモダリティの登録のみ(指紋の登録のみなど)同時にバインドできます。
  • [C-8-3] バインドされた生体認証がリクエストされた場合、デバイスの認証情報(PIN / パターン / パスワード)へのフォールバックを許可してはなりません。
  • [C-8-4] 新しく登録または以前に登録された生体認証のプレゼンテーションをバインドされた生体認証として追加すること、または現在バインドされている生体認証のプレゼンテーションを新しく登録または以前に登録された生体認証にバインドされた生体認証に変更することを、必須としなければなりません。
  • [C-8-5] アプリが認証フローのバインドされた生体認証のリクエストに使用できる setRequireBoundBiometric(boolean) を実装しなければなりません。
  • [C-8-6] バインドされた生体認証はリクエストされたタイミングにかかわらず(setRequireBoundBiometric(boolean など)、他のクラス 3 の生体認証として扱わなければなりません。たとえば、バインドされた生体認証はリクエストされていない場合除外できず、使用可能であった CryptoObject をアプリが使用しないようにします。

新しい要件の終了

7.3.11.姿勢センサー

デバイス実装は:

  • 6 自由度の姿勢センサーをサポートしても構いません。

6 自由度の姿勢センサーをサポートする場合、デバイス実装は:

  • [C-1-1] TYPE_POSE_6DOF センサーを実装し、レポートしなければなりません。
  • [C-1-2] 回転ベクトルのみの場合よりも正確でなければなりません。

7.3.12. ヒンジ角度センサー

ヒンジ角度センサーをサポートする場合、デバイス実装は:

  • [C-1-1] TYPE_HINGLE_ANGLE を実装し、レポートしなければなりません。
  • [C-1-2] 0 度以上 360 度以下(すなわち 0 度と 360 度を含む)の、少なくとも 2 つの読み値をサポートしなければなりません。
  • [C-1-3] getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) について、wakeup センサーを返さなければなりません。

7.3.13. IEEE 802.1.15.4(UWB)

802.1.15.4 のサポートが含まれ、機能をサードパーティ アプリに公開する場合、デバイス実装は:

  • [C-1-2] ハードウェア機能フラグ android.hardware.uwb をレポートしなければなりません。
  • [C-1-3] AOSP 実装で定義されている次の構成セット(事前定義された FiRa UCI パラメータの組み合わせ)をすべてサポートしなければなりません。
    • CONFIG_ID_1: FiRa で定義されたユニキャスト STATIC STS DS-TWR 距離測定、遅延モード、距離測定時間は 240 ミリ秒。
    • CONFIG_ID_2: FiRa で定義された 1 対多の STATIC STS DS-TWR 距離測定、遅延モード、距離測定時間は 200 ミリ秒(一般的な使用例: 多数のスマート デバイスと連携するスマートフォン)。
    • CONFIG_ID_3: