Network Stack 是一個可更新的 Mainline 模塊,可確保 Android 能夠適應不斷發展的網絡標準並允許與新實現的互操作性。例如,對強制門戶檢測和登錄代碼的更新允許 Android 與不斷變化的強制門戶模型保持同步,對 APF 的更新允許 Android 在新型數據包變得普遍時節省 Wi-Fi 的電量。
包含的組件
網絡堆棧模塊包含以下組件。在使用該模塊的設備上,這些服務被移動到不同的進程,並通過穩定的 AIDL 接口訪問。
知識產權服務。
IpClient
(以前稱為IpManager
)是負責 IP 層配置和維護的組件。在Android 9中,它已經被藍牙等組件跨進程使用,Wi-Fi等組件在進程內使用。DhcpClient
從 DHCP 服務器獲取 IP 地址,以便將它們分配給接口。網絡監視器。
NetworkMonitor
組件在連接到新網絡或網絡故障時、檢測強制門戶時以及驗證網絡時測試 Internet 可達性。強制門戶登錄應用程序。一個預裝的應用程序,負責管理強制門戶上的登錄。自 Android 5.0 以來,這是一個單獨的應用程序,但它與
NetworkMonitor
交互,將一些用戶選擇轉發給系統。
受影響的路徑
下面列出了通過重構移動到網絡堆棧模塊的路徑。
知識產權服務。在
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 模塊的一部分,不能修改。
包裝格式
Network Stack 模塊包含以下 APK 格式的組件:
- 知識產權服務
- 強制門戶登錄 (
com.google.android.captiveportallogin
)
該模塊附帶有 Network Stack Permission Config 模塊,這是一個預安裝的 APK 文件,定義了 Network Stack 組件的必要權限。
依賴關係
網絡堆棧模塊依賴於以下內容:
系統服務器中的特權@hide 方法(例如,在
IConnectivityManager.aidl
中)。這些 API 已成為@SystemApi
並受到適當保護,以便 Mainline 模塊可以訪問它們,但其他特權應用程序無法訪問它們(例如,使用新的簽名權限)。將 IPC 綁定到
netd
中定義的INetd.aidl
。此接口已轉換為穩定的 AIDL,並接受一致性測試。