Wi-Fi Aware

Android 8.0 に追加された Wi-Fi Aware 機能により、対応デバイスは Wi-Fi Aware プロトコルを使用して、インターネットまたはモバイル ネットワークにアクセスすることなく直接相互に検出、接続、または距離を測定(Android 9 以降)できます。Wi-Fi Alliance(WFA)の Wi-Fi Aware 仕様(バージョン 2.0、3.0、3.1、4.0)を基盤とするこの機能を使用すると、この機能を使用しなければネットワークに接続されない信頼できるデバイスとアプリの間で、高スループットのデータを簡単に共有できます。

例とソース

この機能を使用するには、デバイス メーカーは Wi-Fi ベンダー HAL を実装する必要があります。Android 14 以降では、AIDL を使用してベンダー HAL インターフェースを定義します。Android 13 以前では、HIDL を使用してベンダー HAL インターフェースを定義します。

Wi-Fi インターフェースに従って Wi-Fi Aware 機能を使用してください。どのインターフェースを実装するかによって、次のどちらかとなります。

  • AIDL: hardware/interfaces/wifi/aidl
  • HIDL: hardware/interfaces/wifi/1.2 以降

以前の Wi-Fi HAL を参照して、AIDL インターフェースと HIDL インターフェースとの相関関係を確認できます(hardware/libhardware_legacy/+/main/include/hardware_legacy/wifi_nan.h)。

実装

デバイス メーカーは、フレームワークと HAL / ファームウェアの両方のサポートを提供する必要があります。

  • フレームワーク:
    • AOSP コード
    • Aware の有効化: フィーチャー トグルとビルドフラグの両方が必要
  • Wi-Fi Aware(NAN)HAL のサポート(ファームウェアのサポート)

この機能を実装するためには、デバイス メーカーは Wi-Fi インターフェースを実装し、次の 2 つのフィーチャー トグルを有効にします。

  • device/<oem>/<device> にある BoardConfig.mk または BoardConfig-common.mk に次のフラグを追加します。

    WIFI_HIDL_FEATURE_AWARE := true
    
  • device/<oem>/<device> にある device.mk で、PRODUCT_COPY_FILES 環境変数を変更して Wi-Fi Aware 機能のサポートを追加します。

    PRODUCT_COPY_FILES +=
    frameworks/native/data/etc/android.hardware.wifi.aware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.wifi.aware.xml
    

Wi-Fi Aware には、IEEE 802.11mc プロトコルを使用したピアデバイスとの距離測定が含まれます。これはラウンドトリップ時間(RTT)とも呼ばれます。この Wi-Fi Aware のサブ機能は、デバイスが Wi-Fi RTT 機能をサポートしていることが条件になっています。つまり、デバイスは Wi-Fi Aware と Wi-Fi RTT の両方に対応している必要があります。詳しくは、Wi-Fi RTT をご覧ください。

それ以外にこの機能に必要なものはすべて AOSP に含まれています。

WIFI_HAL_INTERFACE_COMBINATIONS フラグが指定されている場合、WIFI_HIDL_FEATURE_AWARE フラグは無視されます。詳しくは、Wi-Fi マルチインターフェースの同時実行をご覧ください。

MAC アドレスのランダム化

Android では、Wi-Fi Aware 検出(NMI)とデータ インターフェース(NDP)の MAC アドレスをランダム化して、デバイスの実際の MAC アドレスと同一にならないようにする必要があります。MAC アドレスに関する注意事項は次のとおりです。

  • Wi-Fi Aware が有効化または再有効化されるたびにランダム化する必要があります。
  • Wi-Fi Aware が有効になっている場合、NanConfigRequest.macAddressRandomizationIntervalSec パラメータで設定された一定の間隔で MAC アドレスをランダム化する必要があります。これはフレームワークによってデフォルトでは 30 分に設定されます。

一時停止と再開

Android 14 以降では、Wi-Fi Aware は特権アプリでアクティブな検出セッション(このようなセッションに関連するすべてのデータパスを含む)の一時停止と再開ができる機能をサポートしています。この機能のサポートにより、デバイスで検出セッションをすばやく再開でき、また検出セッションを一時停止できるため消費電力を抑えられます。

デバイスでこの一時停止と再開の機能がサポートされている場合、特権アプリが検出セッションを一時停止すると、ファームウェアは Wi-Fi Aware セッションを一時停止します。検出セッションが一時停止ステータスのとき、デバイスはそのセッションのアクティブな NDP を含め、セッションのフレームを送信または受信しません。すべての検出セッションが一時停止されると、デバイスは Wi-Fi Aware フレームを送信または受信しません。

特権アプリが一時停止されていた検出セッションを再開すると、フレームワークはセッションを元のステータスに戻します。すべての関連する NDP セッションも同様です。一時停止されていた検出セッションの再開は、Wi-Fi Aware を起動して新しい検出セッションを作成するよりも短時間で実行できます。

検出セッションの一時停止と再開の機能をサポートするには、デバイス メーカーは HAL とファームウェアをサポートする必要があります。詳しくは、IWifiNanIface.java をご覧ください。

デバイス メーカーは帯域外の通信(BLE など)を使用して、複数のデバイスで一時停止と再開を同期できます。

検証

Android には、Wi-Fi Aware 機能を検証するための単体テスト、互換性テストスイート(CTS)テスト、CTS 検証ツール テストのセットが用意されています。ベンダー テストスイート(VTS)を使用して Wi-Fi Aware をテストすることもできます。

単体テスト

Wi-Fi Aware パッケージのテストは以下を使用して行います。

サービステスト:

atest com.android.server.wifi.aware

マネージャー テスト:

atest android.net.wifi.aware

互換性テストスイート(CTS)によるテスト

CTS テストを使用して Wi-Fi Aware 機能を検証します。CTS は機能が有効になったことを検出し、関連するテストを自動的に含めます。

CTS テストは次の方法でトリガーできます。

atest SingleDeviceTest

CTS 検証ツールによるテスト

CTS 検証ツールによるテストでは、テストデバイスと動作確認済みのデバイスの 2 台を使用して Wi-Fi Aware の動作を検証します。テストを実行するには、CTS 検証ツールを開いて [Wi-Fi Aware Tests] に移動します。