網路堆疊是可更新的主線程模組,可確保 Android 能配合不斷演進的網路標準,並允許與新實作項目協同運作。舉例來說,只要更新網頁認證入口偵測和登入程式碼,Android 就能隨時變更網頁認證入口模型;而更新 APF 後,隨著新類型的封包出現,Android 也能節省 Wi-Fi 電力。
包含的元件
網路堆疊模組包含下列元件。在使用此模組的裝置上,這些服務會移至其他程序,並透過穩定的 AIDL 介面存取。
IP 服務。
IpClient
(舊稱IpManager
) 是負責 IP 層部署和維護的元件。在 Android 9 中,藍牙等元件已採用跨程序處理,且由 Wi-Fi 等元件進行處理中。DhcpClient
會從 DHCP 伺服器取得 IP 位址,以便將這些位址指派給介面。NetworkMonitor:
NetworkMonitor
元件會在連線至新網路或網路發生錯誤時,以及在偵測網頁認證入口和驗證網路時,測試網路可及性。網頁認證入口登入應用程式:預先安裝的應用程式,負責管理網頁認證入口的登入作業。自 Android 5.0 起,這已是個獨立的應用程式,但會與
NetworkMonitor
互動,將部分使用者選擇轉送至系統。
受影響的路徑
下面列出透過重構方式移至網路堆疊模組的路徑。
IP 服務。在
frameworks/base/services/net/java/android/net/
中:apf
dhcp
ip
netlink
util
(部分)
偵測網頁認證入口和登入在
frameworks/base/
中:core/java/android/net/captiveportal/
services/core/java/com/android/server/connectivity/NetworkMonitor.java
packages/CaptivePortalLogin/*
程式碼移動的新位置位於 packages/modules/NetworkStack
、packages/modules/CaptivePortalLogin
和某些其他已分享的位置。以 Mainline 來說,上述路徑是指檔案位置,未移至該處。packages/modules/NetworkStack
和 packages/modules/CaptivePortalLogin
中的檔案屬於 Mainline 模組,因此無法修改。
套件格式
網路堆疊模組包含以下 APK 格式的元件:
- IP 服務
- 網頁認證入口登入 (
com.google.android.captiveportallogin
)
這個模組會搭配網路堆疊權限設定模組,這是預先安裝的 APK 檔案,可為網路堆疊元件定義必要權限。
依附元件
網路堆疊模組會依附下列項目:
系統伺服器中的特權 @hide 方法 (例如在
IConnectivityManager.aidl
中)。這些 API 已設為@SystemApi
,並受到適當保護,因此 Mainline 模組可以存取,但其他特權應用程式 (例如使用新的簽章權限) 則無法存取。將 Binder IPC 連結至
INetd.aidl
中定義的netd
。此介面已轉換為穩定的 AIDL,並須接受相容性測試。