网络堆栈是一个可更新的 Mainline 模块,可以确保 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 模块访问,但不能由其他特权应用访问(例如,使用新的签名权限)。INetd.aidl
中定义的指向netd
的 Binder IPC。此接口已转换为稳定的 AIDL,并且需要进行符合性测试。