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/NetworkStack
、packages/modules/CaptivePortalLogin
和其他一些共享位置。以上路径指的是文件在移动到 Mainline 之前的位置。packages/modules/NetworkStack
和 packages/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,并受一致性测试约束。