Wi-Fi

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Wi-Fi モジュールは更新可能です。つまり、通常の Android リリース サイクル以外で機能の更新を受け取ることができます。このモジュールには、次のコンポーネントが含まれています。

Wi-Fi モジュール コンポーネント

図 1. Wi-Fi モジュールのコンポーネントとアーキテクチャ

Wi-Fi モジュールには次の利点があります。

  • エンド ユーザーは、Android デバイス全体で一貫した Wi-Fi エクスペリエンスを取得し、モジュールの更新を通じて相互運用性の問題を修正します。

  • アプリ開発者は、プラットフォームの断片化を軽減できます。

  • OEM は、個々のカスタマイズのコストを削減しながら、通信事業者の要件を満たすことができます (同じ要件をさまざまな方法で実装する必要がないため)。

Android 12 と Android 13 のモジュール境界

  • packages/modules/Wifi
    • framework
      • java/
        • android/net/wifi ( frameworks/base/wifi/javaからのファイル)
      • tests/
        • android/net/wifi ( frameworks/base/wifi/testsからのファイル)
      • aidl-export/
      • api/
      • Android.bp
    • service/
      • java/
        • com/android/server/wifi ( frameworks/opt/net/wifi/service/javaからのファイル)
      • tests/
        • com/android/server/wifi ( frameworks/opt/net/wifi/testsからのファイル)
      • proto/
      • Android.bp
      • proguard.flags
      • wifi.rc
    • OsuLogin/ ( frameworks/base/packages/OsuLogin )
    • ServiceResources/ (Android 12 の新機能、オーバーレイ APK マニフェストはここに保存されます)
      • res/ (Android 11 の新機能、 frameworks/base/core/res/resから抽出された Wi-Fi 構成)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (サービスによって要求されたユーザー ダイアログを起動するための Android 13 アプリの新機能は、ここに格納されます。)
      • src/
        • com/android/wifi/dialog (ダイアログが起動されるアクティビティが含まれます)
      • AndroidManifest.xml
      • Android.bp

上記のディレクトリには、モジュラー システム コンポーネントの外部にあり、現在の場所に残っているコードも含まれています。たとえば、次のようになります。

  • wificond interface (パッケージandroid.net.wifi.nl80211内のクラス、たとえばWifiNl80211Manager )
  • サンプル リソース オーバーレイ アプリ
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

OEM はサンプル コマンドを使用して、パッチを元のプロジェクト ディレクトリから新しいプロジェクト ディレクトリに移動できます。

Frameworks/base/wifi からのパッチの移動

root/frameworks/base/wifi にパッチ ファイルを生成する

git format-patch -1 commit --stdout > patch-file.txt

root/packages/modules/Wifi へのパッチ ファイルの適用

git am -p2 --directory=framework/ patch-file.txt

Frameworks/opt/net/wifi からのパッチの移動

frameworks/opt/net/wifiからパッチを移動するには、移行中にディレクトリ階層が変更されたため、複雑な手順が必要です。

frameworks/opt/net/wifiで、コミットをservice/用とtests/用の 2 つのコミットに分割します。

HEAD コミットの移行

git reset HEAD^
git add service/
git commit # Enter your commit message. Call this commit service-commit
git add tests/
git commit # Enter your commit message. Call this commit test-commit

2 つのコミット パッチ ファイルの生成

git format-patch -1 service-commit --stdout > service-patch.txt
git format-patch -1 test-commit --stdout > test-patch.txt

packages/modules/Wifi への 2 つのパッチの適用

git am service-patch.txt
git am -p1 --directory=service/ test-patch.txt

2 つのコミットを 1 つのコミットに戻す

git rebase -i

2 番目のコミットの操作をsquashに変更します。

必要に応じてコミット メッセージを編集します。

Android 11 のモジュール境界

Wi-Fi サービスは、システム サービス プロセス内で引き続き実行されます。 Wi-Fi モジュールには、以下を含むpackages/modules/Wifi内のすべてのコードが含まれています。

  • WifiServiceWifiP2pServiceWifiAwareServiceWifiScannerService 、およびWifiRttServiceの SDK およびサービス クラス
  • OsuLogin
  • ServiceWifiResources

このモジュールは、OEM の AOSP ビルドの一部として残る次のコンポーネントを除外します。

  • system/connectivity/wificondwificondネイティブ コンポーネント
  • wificondインターフェイス (パッケージandroid.net.wifi.nl80211内のクラス、たとえばWifiNl80211Manager )
  • android.net.wifi.SoftApConfToXmlMigrationUtil
  • android.net.wifi.WifiNetworkScoreCache
  • android.net.wifi.WifiMigration
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

Android 11 はファイルを移動しませんが、今後のリリースでは移動する可能性があります。ファイルの場所の変更の移植に伴う労力を軽減するために、可能な限り多くの変更を AOSP にアップストリームすることをお勧めします (Android 11 に移植するか、独自の拡張機能をリファクタリングして正式な Android API またはベンダーの HAL 拡張機能を使用して AOSP コードからそれらを切り離した後)。

モジュール形式

Wi-Fi モジュール ( com.android.wifi ) はAPEX形式であり、Android 11 以降を実行しているデバイスで使用できます。 APEX ファイルには、次のコンポーネントが含まれています。

  • SDK ライブラリ ( framework-wifi.jar )
  • サービス ライブラリ ( service-wifi.jar )
  • OsuLogin APK ( OsuLoginGoogle.apk )
  • リソース APK ( ServiceWifiResourcesGoogle.apk )
  • WFA 証明書

モジュールの依存関係

Wi-Fi モジュールは、次のコンポーネントに依存します。

  • コネクティビティ
  • 電話
  • プロト ライブラリ
  • その他のシステム コンポーネント
  • WiFi HAL
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

このモジュールは、安定した@SystemApi ( @hide API を使用しない) のみを使用してフレームワークと対話し、プラットフォーム署名ではなく Google 署名で署名されています。

カスタマイズ

Wi-Fi モジュールは直接のカスタマイズをサポートしていませんが、ランタイム リソース オーバーレイ (RRO)またはキャリア構成を使用して構成をカスタマイズできます。

Wi-Fi のカスタマイズ

図 2. Wi-Fi モジュールのカスタマイズ

  • 小規模なカスタマイズの場合は、RRO configで設定を有効または無効にします。
  • さらに制御するには、 @SystemAPIとして公開されているキャリア構成キーの構成値をカスタマイズします。

ランタイム リソース オーバーレイの使用

RRO を使用してデフォルト設定をオーバーライドすることで、Wi-Fi モジュールをカスタマイズできます。オーバーレイ可能な構成のリストについては、 packages/modules/Wifi/service/ServiceWifiResources/res/values/overlayable.xmlを参照してください。設定動作の詳細については、 packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xmlを参照してください。サンプル オーバーレイ アプリについては、 device/google/coral/rro_overlays/WifiOverlay/を参照してください。

device/google/coral/rro_overlays/WifiOverlay/AndroidManifest.xmlファイルがtargetPackage属性をcom.android.wifi.resourcesに設定し、Wi-Fi モジュールによって配信されるリソース APK のパッケージ名がcom.google.android.wifi.resourcesで、オーバーレイ APKS targetPackagecom.google.android.wifi.resourcesに設定して、Wi-Fi 構成を正常にオーバーレイする必要があります。

構成ストレージ形式の移行

Wi-Fi モジュールは、AOSP Wi-Fi 構成ストレージ形式のみを解析できます。以前に Wi-Fi 構成ストレージ形式 (ユーザーの保存済みネットワーク リストを含む) を変更した場合は、デバイスを Wi-Fi モジュールを含む Android リリースにアップグレードするときに、そのデータを AOSP 形式に変換する必要があります。この変換に必要なフックは、 android.net.wifi.WifiMigrationクラスにあります。

以下のメソッドでフォーマット変換を実装します。

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • Wi-Fi モジュールによって呼び出され、AOSP 形式に変換された Wi-Fi 共有ストア ファイルの内容を取得します。

    • これらのファイルは、以前 (Android 10 では) デバイスの/data/misc/wifiフォルダーに保存されていました。

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • AOSP 形式に変換された Wi-Fi ユーザー固有のストア ファイルの内容を取得するために、Wi-Fi モジュールによって呼び出されます。

    • これらのファイルは、以前 (Android 10 では) デバイスの/data/misc_ce/<userId>/wifiフォルダーに保存されていました。

非表示の Wi-Fi API へのアクセス

Wi-Fi モジュールで@hideアノテーションが付けられたシンボル (クラス、メソッド、フィールドなど) は、パブリック API サーフェスの一部ではなく、モジュールがインストールされているデバイスではアクセスできません。 Wi-Fi モジュールが含まれていないデバイスは、次の手順を使用して@hide Wi-Fi API を引き続き使用できます。

  1. impl_library_visibility属性を public に変更して、 packages/modules/Wifi/framework/Android.bpframework-wifiに設定されている可視性の制限を削除します。

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [
           "//visibility:public", // Add this rule and remove others.
        ],
        ...
    }
    
  2. ライブラリ アクセス@hide Wi-Fi API を許可するようにビルド ルールを変更します。たとえば、次はjava_libraryのビルド ルールです。

    java_library {
        name: "foo-lib",
    
        // no sdk_version attribute defined
    
        libs: [
            "dependency1",
            "dependency2",
        ],
    }
    

    foo-libライブラリ アクセスを許可するには、以下に示すようにビルド ルールを変更します。

    java_library {
        name: "foo-lib",
    
        sdk_version: "core_platform",
    
        libs: [
            "framework-wifi.impl",
            "framework",
            "dependency1",
            "dependency2",
        ],
    }
    
  3. libsのリストで、 framework framework-wifi.implがフレームワークの前に表示されていることを確認します。 libs属性の依存関係の順序は重要です。

非表示のフレームワーク API へのアクセス

Wi-Fi モジュール外の@hideアノテーションが付けられたシンボルには、Wi-Fi モジュール内のコードからアクセスできません。 Wi-Fi モジュールを含まないデバイスは、 frameworks/opt/net/wifi/service/Android.bpに次の変更を加えることで、 service-wifi@hide外部 API (たとえば、 framework.jarから) を引き続き使用できます。 frameworks/opt/net/wifi/service/Android.bp .

  1. wifi-service-pre-jarjarservice-wifi両方で、 sdk_version属性をcore_platformに変更します。

  2. wifi-service-pre-jarjarservice-wifi両方で、 frameworkandroid_system_server_stubs_currentlibs属性に追加します。

  3. 結果が次のコード サンプルのようになることを確認します。

    java_library {
        name: "wifi-service-pre-jarjar",
        ...
        sdk_version: "core_platform",
        ...
        libs: [
            ...
            "framework",
            "android_system_server_stubs_current",
        ],
    }
    ...
    java_library {
        name: "service-wifi",
        ...
        sdk_version: "core_platform",
        ...
        libs: [
            ...
            "framework",
            "android_system_server_stubs_current",
        ],
    }
    

テスト

Android 互換性テスト スイート (CTS) は、すべてのモジュール リリースで CTS テストの包括的なセットを実行することにより、Wi-Fi モジュールの機能を検証します。テスト、デバッグ、および Wi-Fi の調整 で説明されているテストを実行することもできます。