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
中的所有程式碼,包括以下程式碼。
WifiService
、WifiP2pService
的 SDK 和服務類別WifiAwareService
、WifiScannerService
和WifiRttService
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) 或電信業者設定。
圖 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
targetPackage
到 com.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。
移除
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. ], ... }
變更建構規則,允許程式庫存取
@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", ], }
確認
framework-wifi.impl
顯示在清單的framework
之前 (共libs
個)。libs
屬性中的依附元件順序相當重要。
存取隱藏架構 API
使用者無法存取在 Wi-Fi 模組外加註 @hide
的符號
程式碼放置在 Wi-Fi 模組中不含 Wi-Fi 模組的裝置可以
繼續使用 @hide
外部 API (例如來自 framework.jar
)
service-wifi
,
frameworks/opt/net/wifi/service/Android.bp
。
在
wifi-service-pre-jarjar
和service-wifi
同時中,將sdk_version
屬性設為core_platform
。在
wifi-service-pre-jarjar
和service-wifi
同時新增framework
和android_system_server_stubs_current
對應至libs
屬性。確認結果是否類似下列程式碼範例。
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。