🏙️ 第一部分:AOSP 目录结构——Android 数字城市的“总体规划图”
想象一下,你要去一个从未去过的超级大城市(AOSP)。这个城市非常大,有几百万行代码。如果你没有地图,进去就会迷路。
这个城市的建设遵循一个非常严格的**“金字塔”逻辑**:
🏛️ 第一层:基石区 (system/,build/,hardware/)
这是城市的地基、水电厂和马路。
system/:这里是 C/C++ 代码的地盘。负责最底层的运行(就像城市的水电煤)。build/:这是建筑局,负责怎么把一堆砖头(代码)盖成大楼(系统镜像)。hardware/:这是接口区,负责让城市能适应不同的地质(不同的手机芯片,如高通、联发科)。
👑 第二层:中央政府 (frameworks/)
这是我们要重点参观的地方。这里是Java/Kotlin代码的地盘,是整个城市的“大脑”和“管理中枢”。
- 所有你在写 App 时调用的
Activity、View、Service,都在这里实现。 - 它就像是一个巨大的中央政府,管理着城市里的一切。
🏢 第三层:居民与商业区 (packages/)
这里是系统自带的应用。
Settings(设置):就像市政府的便民服务大厅。Launcher(桌面):就像城市的主广场。Mms(短信):就像城市的邮局。
🏣 第二部分:深入“中央政府” (frameworks/base)
既然我们要找的路径在frameworks/base/...下面,说明它是核心中的核心。
进入frameworks/base,你可以把它想象成**“中央政府的主楼”**。这栋楼里有几个关键的部门:
| 目录名 | 部门名称 | 职责说明 |
|---|---|---|
core/ | 基础教育部 | 负责最基础的东西,比如String(字符串)、List(列表)等基础工具类。 |
cmds/ | 命令执行部 | 也就是我们常用的am、pm等 ADB 命令的源码所在地。 |
libs/ | 库管理部 | 一些核心的原生库。 |
media/ | 文化宣传部 | 负责音乐、视频的播放。 |
services/ | **公共服务部 | 这是重中之重!我们要找的“网络管理”就在这里面。 |
🚦 第三部分:揭秘“公共服务部” (services/)
services/目录是 Android 系统里最繁忙的地方。这里运行着所有你听说过的系统服务(SystemServer启动的那些服务)。
这里的逻辑是**“分权制衡”**。为了不让所有代码都挤在一起,政府把公共服务部分成了两类:
1. 核心大管家 (core/)
路径:frameworks/base/services/core/
- 这里住着的是**“通用型”**的管家。
- 它们负责那些谁都需要的基础服务,比如电源管理、电池统计、以及我们要找的网络流量统计。
- 特点:这些服务通常是跨领域的,不光是 Wi-Fi 用,移动数据、蓝牙网络都可能要用到。
2. 专项事务局 (wifi/,telephony/,usb/)
wifi/:专门只管 Wi-Fi 的连接、扫描、认证。telephony/:专门只管打电话、发短信、SIM 卡。usb/:专门只管 USB 连接。
💡 关键洞察:
为什么网络相关的代码有的在core,有的在wifi?
wifi/负责“怎么连上”网络(技术实现)。core/net负责“连上后怎么管”(策略、统计、权限)。
📍 第四部分:精准定位目标办公室 (.../net)
现在,我们终于可以解读那个长长的路径了:
frameworks/base/services/core/java/com/android/server/net
把它翻译成人话就是:
frameworks/base/:进入中央政府大楼。services/:找到“公共服务部”。core/:在公共服务部里,找到“核心大管家”办公室。java/.../net:在核心大管家的管辖范围内,有一个专门负责**“网络事务(Net)”**的小组。
🤝 这个小组具体是干什么的?
在这个net目录下,主要住着两个关键的“公务员”类:
NetworkStatsService(流量统计员):- 它的任务是拿着一个小本本,记录每一个 App 用了多少流量。
- 当你在“设置”里查看“流量使用情况”时,就是它在背后提供数据。
NetworkPolicyManagerService(网络警察):- 它的任务是制定规则。
- 比如:“这个 App 在移动数据下不允许后台联网”、“这个 App 是系统级白名单,随便用”。
- 它负责执行 Android 的网络策略(NetPolicy)。
🚀 总结与学习建议
📌 总结
你看到的这个目录,是 Android 系统的网络交通指挥中心。
- 它不负责具体的修路(那是
wifi/和hardware/的事)。 - 它负责统计车流量(流量统计)和制定交通规则(联网权限)。
🧭 如何快速熟悉 AOSP?
不要试图背诵所有目录。记住这三个“黄金路径”就能解决 90% 的问题:
- 找 App 界面代码-> 去
packages/apps/(这里是 Settings、Launcher 的家)。 - 找 Java API 实现-> 去
frameworks/base/core/(这里是 Activity、View 的家)。 - 找系统服务逻辑-> 去
frameworks/base/services/(这里是各种 "Manager" 的家)。
希望这篇“通俗易懂详尽完美”的博客,能帮你彻底看懂 AOSP 的世界!