网络堆栈

网络堆栈是一个可更新的 Mainline 模块,可以确保 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 模块访问,但不能由其他特权应用访问(例如,使用新的签名权限)。

  • INetd.aidl 中定义的指向 netd 的 Binder IPC。此接口已转换为稳定的 AIDL,并且需要进行符合性测试。