网络堆栈是一个可更新的 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,并且需要进行符合性测试。
