無線上網

Wi-Fi 模塊是可更新的,這意味著它可以在正常的 Android 發布週期之外接收功能更新。該模塊包含以下組件。

Wi-Fi 模塊組件

圖1. Wi-Fi模塊組件和體系結構

Wi-Fi 模塊具有以下優點。

  • 最終用戶在 Android 設備上獲得一致的 Wi-Fi 體驗,並通過模塊更新修復互操作性問題。

  • 應用程序開發人員減少了平台碎片化。

  • OEM 可以滿足運營商的要求,同時還可以降低個性化定制的成本(因為他們不需要以不同的方式對相同的要求進行不同的實施)。

模塊邊界

Wi-Fi 服務繼續在系統服務進程內運行。所述Wi-Fi模塊包括在所有代碼packages/modules/Wifi包括以下內容。

  • SDK及服務類WifiServiceWifiP2pServiceWifiAwareServiceWifiScannerServiceWifiRttService
  • OsuLogin
  • ServiceWifiResources

該模塊不包括以下組件,這些組件仍然是 OEM 的 AOSP 版本的一部分。

  • wificond在本地部件system/connectivity/wificond
  • 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.google.android.wifi.apex )是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使用),並與谷歌的簽名,而不是一個平台的簽名。

定制

在Wi-Fi模塊不支持直接定制,但可以使用自定義配置運行時資源重疊(複製權組織)或載體CONFIGS。

Wi-Fi 定制

圖2.無線網絡幹線模塊定制

  • 對於小的自定義,啟用或在RRO禁用設置config
  • 進行更多的控制,對暴露的任何載波配置鍵定制配置值@SystemAPI

使用運行時資源覆蓋

您可以通過使用 RRO 覆蓋默認配置來自定義 Wi-Fi 模塊。對於overlayable配置的列表,請參閱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>)

    • 由 Wi-Fi 模塊調用以檢索已轉換為 AOSP 格式的 Wi-Fi 用戶特定商店文件內容。

    • 這些文件是先前(Android中10)存儲在/data/misc_ce/<userId>/wifi設備上的文件夾。

訪問隱藏的 Wi-Fi API

符號帶註釋(類,方法,字段等) @hide的Wi-Fi模塊在不屬於其公共API表面的一部分,並且不能在與安裝在模塊的設備進行訪問。沒有設備包括Wi-Fi模塊可以繼續使用@hide使用以下步驟的Wi-Fi的API。

  1. 除去放置在能見度限制framework-wifipackages/modules/Wifi/framework/Android.bp通過刪除impl_library_visibility屬性。

    java_sdk_library {
        name: "framework-wifi",
        ...
        impl_library_visibility: [  // delete this attribute
            ...
        ],
        ...
    }
    
  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. 確保framework-wifi.impl之前出現framework中的列表libs 。依賴的順序libs屬性是顯著。

訪問隱藏的框架 API

帶註釋符號@hide外側的Wi-Fi模塊不能由Wi-Fi模塊中的代碼進行訪問。沒有設備包括Wi-Fi模塊可以繼續使用@hide外部的API(例如,從framework.jar )在service-wifi通過進行以下修改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