網路堆疊

網路堆疊是可更新的主線程模組,可確保 Android 能配合不斷演進的網路標準,並允許與新實作項目協同運作。舉例來說,只要更新網頁認證入口偵測和登入程式碼,Android 就能隨時變更網頁認證入口模型;而更新 APF 後,隨著新類型的封包出現,Android 也能節省 Wi-Fi 電力。

包含的元件

網路堆疊模組包含下列元件。在使用此模組的裝置上,這些服務會移至其他程序,並透過穩定的 AIDL 介面存取。

  • IP 服務。IpClient (舊稱 IpManager) 是負責 IP 層部署和維護的元件。在 Android 9 中,藍牙等元件已採用跨程序處理,且由 Wi-Fi 等元件進行處理中。DhcpClient 會從 DHCP 伺服器取得 IP 位址,以便將這些位址指派給介面。

  • NetworkMonitorNetworkMonitor 元件會在連線至新網路或網路發生錯誤時,以及在偵測網頁認證入口和驗證網路時,測試網路可及性。

  • 網頁認證入口登入應用程式:預先安裝的應用程式,負責管理網頁認證入口的登入作業。自 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/NetworkStackpackages/modules/CaptivePortalLogin 和某些其他已分享的位置。以 Mainline 來說,上述路徑是指檔案位置,未移至該處。packages/modules/NetworkStackpackages/modules/CaptivePortalLogin 中的檔案屬於 Mainline 模組,因此無法修改。

套件格式

網路堆疊模組包含以下 APK 格式的元件:

  • IP 服務
  • 網頁認證入口登入 (com.google.android.captiveportallogin)

這個模組會搭配網路堆疊權限設定模組,這是預先安裝的 APK 檔案,可為網路堆疊元件定義必要權限。

依附元件

網路堆疊模組會依附下列項目:

  • 系統伺服器中的特權 @hide 方法 (例如在 IConnectivityManager.aidl 中)。這些 API 已設為 @SystemApi,並受到適當保護,因此 Mainline 模組可以存取,但其他特權應用程式 (例如使用新的簽章權限) 則無法存取。

  • 將 Binder IPC 連結至 INetd.aidl 中定義的 netd。此介面已轉換為穩定的 AIDL,並須接受相容性測試。