Wi-Fi

Wi-Fi 模組可更新,表示該模組可接收功能更新 。這個單元包含下列內容: 元件。

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 新增,Wi-Fi 設定) 擷取自 frameworks/base/core/res/res)
      • AndroidManifest.xml
      • Android.bp
    • WifiDialog/ (Android 13 應用程式的新功能: 服務要求的啟動使用者對話方塊會儲存在這裡)。
      • src/
        • com/android/wifi/dialog (包含對話方塊所代表的「Activity」 推出日期)
      • AndroidManifest.xml
      • Android.bp

上述目錄 也包含位於模組化系統元件之外的程式碼 目前位置,例如:

  • wificond interface (android.net.wifi.nl80211 套件中的類別, 例如:WifiNl80211Manager)
  • 資源重疊應用程式範例
  • WifiTrackerLib
  • libwifi_hal
  • libwifi_system
  • libwifi_system_iface

原始設備製造商 (OEM) 可使用範例指令移動修補程式 從原始專案目錄複製到新專案目錄

從 Framework/base/Wi-Fi 遷移修補程式

在 root/frameworks/base/wifi 產生修補程式檔案

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

將修補程式檔案套用至根/套件/模組/Wifi

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

從 Frameworks/opt/net/wifi 遷移修補程式

如要將修補程式從 frameworks/opt/net/wifi 移出,必須採取複雜步驟 因為目錄階層在遷移期間有所變更。

frameworks/opt/net/wifi 中,將修訂版本分割成兩個修訂版本,一個針對 service/tests/ 加一。

遷移 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

產生兩個修訂版本修補檔案

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

將兩個修補程式套用至套件/模組/Wifi

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

將兩個修訂版本加回一個修訂版本

git rebase -i

將第二個修訂版本的作業變更為 squash

請視需要編輯修訂訊息。

Android 11 的模組邊界

Wi-Fi 服務會繼續在系統服務程序中執行。Wi-Fi 模組包含 packages/modules/Wifi 中的所有程式碼,包括以下程式碼。

  • WifiServiceWifiP2pService 的 SDK 和服務類別 WifiAwareServiceWifiScannerServiceWifiRttService
  • OsuLogin
  • ServiceWifiResources

模組排除的元件仍屬於原始設備製造商 (OEM) 的 。

  • system/connectivity/wificond 中的 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 不會移動檔案,但日後推出的版本 可能。為了減少轉移檔案位置變更所耗費的心力, 建議在移植到 Android 開放原始碼計畫後 ( Android 11 或重構專屬擴充功能以供使用 正式 Android API 或供應商 HAL 擴充功能,以便從 Android 開放原始碼計畫程式碼中移除。

模組格式

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 模組取決於下列元件。

  • 連線能力
  • 電話通訊系統
  • Proto 程式庫
  • 其他系統元件
  • Wi-Fi HAL
  • wificond
  • bouncycastle
  • ksoap2
  • libnanohttpd

此模組僅使用穩定的 @SystemApi 與架構互動 (否 @hide API 使用情況),並且使用 Google 簽名 (而非平台) 簽署 簽章。

自訂

Wi-Fi 模組不支援直接自訂功能,但您可以自訂 設定使用執行階段資源重疊 (RRO) 或電信業者設定。

自訂 Wi-Fi

圖 2. 自訂 Wi-Fi 模組

  • 如果是小型自訂項目,請在 RRO config 中啟用或停用設定。
  • 如要進一步控管,請自訂任何電信業者設定鍵的設定值 顯示為 @SystemAPI

使用執行階段資源重疊

您可以覆寫預設設定來自訂 Wi-Fi 模組 RRO。如需可重疊的設定清單,請參閱 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 模組只能剖析 Android 開放原始碼計畫的 Wi-Fi 設定儲存格式。如果 您先前修改過 Wi-Fi 設定儲存格式 包含使用者儲存的網路清單),您必須將這些資料轉換為 Android 開放原始碼計畫。 格式,用來將裝置升級至任何包含 Wi-Fi 的 Android 版本 後續課程我們將逐一介紹 預先訓練的 API、AutoML 和自訂訓練系統進行這項轉換所需的掛鉤 android.net.wifi.WifiMigration 類別。

請以下列方法導入格式轉換。

  • WifiMigration.convertAndRetrieveSharedConfigStoreFile(<storeFileId>)

    • 由 Wi-Fi 模組叫用,以擷取 Wi-Fi 共用儲存庫檔案內容 並轉換為 Android 開放原始碼計畫格式

    • 這些檔案先前 (在 Android 10 中) 儲存在 /data/misc/wifi 資料夾

  • WifiMigration.convertAndRetrieveUserConfigStoreFile(<storeFileId>)

    • 由 Wi-Fi 模組叫用,以擷取 Wi-Fi 使用者專屬的商店檔案內容 並轉換為 Android 開放原始碼計畫格式

    • 這些檔案先前 (在 Android 10 中) 儲存在 裝置上的 /data/misc_ce/<userId>/wifi 個資料夾。

存取隱藏的 Wi-Fi API

在 Wi-Fi 中以 @hide 註解的符號 (類別、方法、欄位等) 模組不屬於其公用 API 介面,因此無法在 已安裝該模組的裝置。不含 Wi-Fi 的裝置 請按照下列步驟,繼續使用 @hide Wi-Fi API。

  1. 移除 framework-wifi 的瀏覽權限限制: 請變更packages/modules/Wifi/framework/Android.bp impl_library_visibility 屬性設為公開。

    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. 確認 framework-wifi.impl 顯示在清單的 framework 之前 (共 libs 個)。libs 屬性中的依附元件順序相當重要。

存取隱藏架構 API

使用者無法存取在 Wi-Fi 模組外加註 @hide 的符號 程式碼放置在 Wi-Fi 模組中不含 Wi-Fi 模組的裝置可以 繼續使用 @hide 外部 API (例如來自 framework.jar) service-wififrameworks/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_current 對應至 libs 屬性。

  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 Compatibility Test Suite (CTS) 會驗證 Wi-Fi 模組的 針對每個模組執行完整的 CTS 測試 版本。您也可以執行測試、偵錯及調整 Wi-Fi