Network Stack

Network Stack 是一个可更新的 Mainline 模块,可确保 Android 能够适应不断演进的网络标准,并实现与新实现的互操作性。例如,对强制门户检测和登录代码的更新使 Android 能够与不断变化的强制门户模型保持同步,而对 APF 的更新则允许 Android 在新的数据包类型变得常见时节省 Wi-Fi 功耗。

包含的组件

Network Stack 模块包含以下组件。在使用该模块的设备上,这些服务已移至不同的进程,并通过稳定的 AIDL 接口进行访问。

  • IP 服务。 IpClient(以前称为 IpManager)是负责 IP 层配置和维护的组件。在 Android 9 中,蓝牙等组件已跨进程使用它,而 Wi-Fi 等组件则在进程内使用它。DhcpClient 从 DHCP 服务器获取 IP 地址,以便可以将它们分配给接口。

  • NetworkMonitor。 NetworkMonitor 组件在连接到新网络或网络故障时、检测强制门户时以及验证网络时,测试互联网可访问性。

  • 强制门户登录应用。 一个预装的应用,负责管理强制门户上的登录。自 Android 5.0 以来,它一直是一个单独的应用,但它与 NetworkMonitor 交互,以将一些用户选择转发到系统。

受影响的路径

通过重构移动到 Network Stack 模块的路径如下所示。

  • IP 服务。frameworks/base/services/net/java/android/net/

    • apf
    • dhcp
    • ip
    • netlink
    • util (partly)
  • 强制门户检测和登录。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 模块的一部分,无法修改。

软件包格式

Network Stack 模块包含以下 APK 格式的组件

  • IP 服务
  • 强制门户登录 (com.google.android.captiveportallogin)

此模块随附 Network Stack 权限配置模块,该模块是一个预装的 APK 文件,用于定义 Network Stack 组件所需的权限。

依赖项

Network Stack 模块依赖于以下内容

  • 系统服务器中的特权 @hide 方法(例如,在 IConnectivityManager.aidl 中)。这些 API 已被设为 @SystemApi 并受到适当保护,以便它们可以被 Mainline 模块访问,但不能被其他特权应用访问(例如,使用新的签名权限)。

  • INetd.aidl 中定义的到 netd 的 Binder IPC。此接口已转换为稳定的 AIDL,并受一致性测试约束。