Android13 系统源码核心目录解析
Android13 系统源码核心目录解析
文章目录
- Android13 系统源码核心目录解析
- 一、 前言
- 二、Android系统主要源码结构
- 1. frameworks/:框架层核心(应用开发的 “地基”)
- 1.1 核心子目录:frameworks/base/(基础框架 API)
- 1.1.1 应用组件与生命周期(android.app 包)
- 1.1.2 系统服务与 Binder 通信(android.os 包)
- 1.1.3 系统服务与 Binder 通信(android.os 包)
- (1) `services/core/java/com/android/server/`:核心系统服务
- (2) `services/input/java/com/android/server/input/`:输入系统服务
- 1.1.4 系统级的基础应用(packages)
- 1.1.5 原生实现(C/C++ 层)
- 1.1.5`cmds/`:系统命令工具实现
- 1.2 其他关键子目录
- 2. packages/:系统应用与内容提供者
- 2.1 packages/apps/:系统预装应用
- 2.2 packages/providers/:内容提供者
- 3. system/:系统级原生组件(用户空间核心)
- 3.1 核心子目录与文件
- 4. hardware/:硬件抽象层(HAL)
- 4.1 核心目录与关键结构
- 5. 其他重要目录
- 5.1 kernel/:Linux 内核
- 5.2 vendor/:厂商定制目录
- 5.3 external/:第三方开源库
- 三、总结
- 1、目录简单汇总
- 2、系统开发常见类和所在的目录
- (1)SystemServer(服务启动类)
- (2)AMS(Activity 管理相关)
- (3)PMS(包管理相关)
- (4)WMS(窗口管理相关)
- (5)音频相关
- (6)视频相关
- (7)WIFI 相关
- (8)蓝牙相关
- (9)权限管理相关
- (10)原生 Settings 应用开发
- (11)Launcher 桌面开发
- 2、framework的core和service目录的作用?
- 3、framework的 java/android/和java/com/android/目录
一、 前言
Android系统源码很多人都看到,源码根目录无非是framework、packages、system等重要目录。
本文重新介绍一下。
不同的Android版本系统代码内部结构还是有比较大的修改的,
比如Android WIFI、蓝牙具体实现代码,从Android9到Android11,、Android13 都有很多的目录变化;
之前在framework的WIFI、蓝牙逻辑,基本都移植到了packages/module下面的不同模块文件夹。
对于系统上层开发来说,最主要的修改逻辑都在framework和packages里面,所以要重点掌握。
熟悉系统开发的人,其实看一下最后面总结部分的目录列表就可以了。
本文只是对系统开发初学者有一定的知识开阔作用。下面是主要内容。
二、Android系统主要源码结构
Android13 系统源码结构庞大且模块化,核心目录围绕 “框架层、系统应用、硬件交互、内核驱动” 四大维度设计。以下按目录功能优先级,解析核心目录的作用,并举例关键类 / 文件(含 Java 与 C/C++ 代码,因源码同时包含上层框架与底层原生实现)。
系统源码根目录有:framework、packages、device等文件夹,下面展开说明:
1. frameworks/:框架层核心(应用开发的 “地基”)
frameworks/
是 Android 上层框架的核心,提供了应用开发依赖的所有 API(如 Activity、Service、Binder 等),也是系统组件调度的核心逻辑层。其中 frameworks/base/
是重中之重,包含 90% 以上的核心 API。
1.1 核心子目录:frameworks/base/(基础框架 API)
1.1.1 应用组件与生命周期(android.app 包)
-
目录路径:
frameworks/base/core/java/android/app/
-
作用:定义 Activity.java、Service.java、ContentProvider.java、
BroadcastReceiver.java
。 等核心应用组件,管理组件生命周期。 -
主要类举例:
-
ActivityThread
:应用进程的 “主线程管家”,负责 Activity 启动、暂停、销毁等生命周期调度,是每个应用进程的入口(main()
方法在此类中)。 -
Service
:后台服务的基类,所有自定义 Service(如音乐播放服务)必须继承此类,提供无界面的后台任务能力。 -
ContentProvider
:跨应用数据共享的 “桥梁” 基类,例如联系人应用通过此类向其他应用暴露联系人数据。 -
app目录下其他配套类比如:
ActivityThread
、Application
、ActivityManager
、AlarmManager
、NotificationManager
、TaskStackBuilder
、AlertDialog
-
1.1.2 系统服务与 Binder 通信(android.os 包)
- 目录路径:
frameworks/base/core/java/android/os/
- 作用:提供系统服务通信(Binder)、线程管理、消息循环等核心能力。
- 主要类举例:
Binder
:Android 跨进程通信(IPC)的核心类,系统服务(如 ActivityManagerService)与应用间的通信均基于此类实现。Handler
:线程消息调度类,解决 Android 主线程不能执行耗时操作的问题,常用于子线程向主线程发送更新 UI 的消息。ServiceManager
:系统服务的 “注册中心”,负责管理所有系统服务(如 WindowManagerService)的注册与查询。
1.1.3 系统服务与 Binder 通信(android.os 包)
-
目录路径:
frameworks/base/service
-
作用:系统服务实现(运行在
system_server
进程) -
主要类举例:
services/
包含 Android 所有核心系统服务的代码,这些服务是框架层的 “后台管家”,为应用提供系统级能力(如 Activity 调度、窗口管理、权限控制等)。(1)
services/core/java/com/android/server/
:核心系统服务服务类 核心作用 关键逻辑 ActivityManagerService.java
(AMS)Activity 与进程管理 管理 Activity 生命周期、任务栈调度、进程优先级(OOM 机制)、应用启动权限验证 WindowManagerService.java
(WMS)窗口管理 控制窗口显示层级、布局、焦点切换,与 SurfaceFlinger
协作完成屏幕渲染PackageManagerService.java
(PMS)应用包管理 解析 APK、管理安装 / 卸载、验证权限、注册组件(Activity/Service 等) PowerManagerService.java
(PMS)电源管理 控制屏幕亮度、休眠 / 唤醒、待机模式(如 Doze 模式) NotificationManagerService.java
(NMS)通知管理 管理通知显示、排序、权限控制,处理通知栏交互 (2)
services/input/java/com/android/server/input/
:输入系统服务- 关键代码:
InputManagerService.java
作用:管理触摸、按键、鼠标等输入事件,负责事件采集(从驱动层)、分发(到当前焦点窗口),是用户交互的 “入口”。
- 关键代码:
1.1.4
目录路径:frameworks/base/core/java/android/app/
1.1.4 系统级的基础应用(packages)
- 目录路径:frameworks\base\packages
- 作用: 提供系统级的基础应用和组件 (如设置、桌面、状态栏等) 。
- 主要文件举例:
SystemUI/src/com/android/systemui/statusbar/StatusBarState.java
:状态栏核心逻辑;SystemUI/src/com/android/systemui/shade/NotificationPanelView.java
:通知面板视图实现。SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
:锁屏状态协调器,处理解锁流程;SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java
:解锁输入界面(密码 / 图案输入框)。
1.1.5 原生实现(C/C++ 层)
- 目录路径:
frameworks/base/native/
- 作用:为上层 Java API 提供底层原生(Native)实现(如 Binder 驱动交互、多媒体解码)。
- 主要文件举例:
libs/binder/IBinder.cpp
:Java 层IBinder
接口的 C++ 实现,是底层 Binder 通信的核心逻辑载体。libs/ui/DisplayInfo.cpp
:屏幕显示信息(分辨率、刷新率)的原生处理类,上层Display
类依赖其获取硬件信息。
1.1.5cmds/
:系统命令工具实现
包含 Android 系统命令(如 am
、pm
)的代码,这些命令用于调试和控制系统行为(通过 ADB 调用)。
- 关键代码:
cmds/am/src/com/android/commands/am/Am.java
:am
命令实现(如am start
启动 Activity),通过与 AMS 通信执行操作。cmds/pm/src/com/android/commands/pm/Pm.java
:pm
命令实现(如pm install
安装 APK),通过与 PMS 通信执行操作。
1.2 其他关键子目录
framework下面的目录base 目录值最关键的,其他目录都是比较少修改的。
frameworks/av/
:多媒体框架,包含音频、视频、相机的核心逻辑,例如frameworks/av/media/libmedia/IMediaPlayer.cpp
(媒体播放器的原生接口)。frameworks/native/
:系统原生服务框架,如frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
(负责屏幕渲染的 “Surface 管家”,所有 UI 绘制最终通过它提交到屏幕)。
2. packages/:系统应用与内容提供者
packages/
包含 Android 内置的系统应用(如设置、桌面)和 “内容提供者”(跨应用数据共享组件),是用户可直接交互的系统功能载体。
2.1 packages/apps/:系统预装应用
-
作用:存放 Android 原生系统应用,如 Settings(设置)、Launcher3(桌面)、Contacts(联系人)。
-
关键应用与类举例:
系统应用 目录路径 主要类 功能 Settings(设置) packages/apps/Settings/src/com/android/settings/
SettingsActivity
设置应用的入口 Activity,负责加载 WiFi、蓝牙、显示等设置页面 Launcher3(桌面) packages/apps/Launcher3/src/com/android/launcher3/
Launcher
桌面应用的核心类,管理图标显示、应用启动、桌面布局 Contacts(联系人) packages/apps/Contacts/src/com/android/contacts/
ContactsActivity
联系人应用的主页面,负责展示、编辑联系人数据
2.2 packages/providers/:内容提供者
- 作用:实现跨应用数据共享,例如联系人、日历、媒体文件的数据库对外暴露。
- 主要类举例:
ContactsProvider2
:
路径:packages/providers/ContactsProvider/src/com/android/providers/contacts/ContactsProvider2.java
功能:继承自ContentProvider
,管理联系人数据库(SQLite),对外提供 “查询联系人”“添加联系人” 等接口,其他应用可通过ContentResolver
调用。MediaProvider
:
路径:packages/providers/MediaProvider/src/com/android/providers/media/MediaProvider.java
功能:管理手机中的照片、视频、音乐文件,第三方相册应用可通过它读取系统媒体库。
3. system/:系统级原生组件(用户空间核心)
system/
是 Android 系统用户空间(非内核)的底层组件,负责系统启动、网络管理、硬件交互等基础能力,代码以 C/C++ 为主。
3.1 核心子目录与文件
- system/core/init/:
- 作用:Android 系统启动的 “第一个用户进程”(
init
进程),负责解析启动脚本(init.rc
)、启动系统服务(如zygote
、surfaceflinger
)。 - 关键文件:
init.cpp
(路径:system/core/init/init.cpp
),init
进程的入口文件,包含main()
方法。
- 作用:Android 系统启动的 “第一个用户进程”(
- system/core/binder/:
- 作用:底层 Binder 驱动的用户空间封装,为上层 Binder 通信提供驱动交互能力。
- 关键文件:
binder.c
(路径:system/core/binder/binder.c
),实现 Binder 消息的发送、接收与解析。
- system/netd/:
- 作用:系统网络管理服务,负责 WiFi、移动数据、防火墙的配置。
- 关键文件:
Netd.cpp
(路径:system/netd/server/Netd.cpp
),netd
服务的核心类,处理网络请求(如 IP 分配、端口转发)。
4. hardware/:硬件抽象层(HAL)
hardware/
是 “框架层” 与 “内核驱动” 之间的桥梁,通过标准化接口屏蔽硬件差异(例如不同厂商的相机、传感器,框架层无需修改代码即可适配)。
4.1 核心目录与关键结构
- 目录路径:
hardware/libhardware/include/hardware/
- 作用:定义 HAL 模块的标准化接口(以 C 结构体为主,因硬件驱动多为 C 实现)。
- 主要结构举例:
hw_module_t
:所有 HAL 模块的 “基类结构”,每个硬件模块(如相机、传感器)必须包含此结构体,用于标识模块信息(如模块名称、版本)。camera_module_t
:相机 HAL 模块的核心结构(定义在camera.h
中),包含相机设备的枚举、打开等接口,框架层通过它调用相机硬件。sensor_module_t
:传感器 HAL 模块的核心结构(定义在sensors.h
中),管理加速度计、陀螺仪等传感器的数据流。
5. 其他重要目录
5.1 kernel/:Linux 内核
- 作用:Android 的底层内核(基于 Linux 定制),负责硬件驱动(如屏幕、摄像头、电池)、进程调度、内存管理。
- 关键文件举例:
kernel/linux/drivers/camera/msm/msm_camera.c
(高通平台相机驱动实现)、kernel/linux/drivers/power/power_supply.c
(电池供电管理驱动)。
5.2 vendor/:厂商定制目录
- 作用:存放手机厂商(如华为、小米、高通)的定制代码,包括厂商专属 HAL 模块、预装应用、硬件适配逻辑。
- 举例:
vendor/qualcomm/msm8998/camera/
(高通 8998 芯片的相机定制 HAL)、vendor/xiaomi/miui/
(小米 MIUI 系统的定制应用与框架)。
5.3 external/:第三方开源库
- 作用:集成 Android 依赖的第三方开源项目,避免重复开发。
- 举例:
external/okhttp/
(Square 开源的网络请求库,系统应用如浏览器依赖)、external/sqlite/
(SQLite 数据库引擎,系统所有数据库(如联系人、短信)均基于此)。
三、总结
1、目录简单汇总
frameworks|--base:所有系统应用开发的基础| |--packages:定制系统应用(如 SystemUI、SettingsLib、SettingsProvider)。| |--core:系统应用开发的 “基石”,所有功能都依赖。| |--res 基础资源文件或者配置文件| |--jni 核心框架层(Java)与原生层(C/C++)交互的关键目录| |--java 基础框架 API| |--android 下面是各类api Manager的类-------------------------------------<| |--app、database、media、net、nfc、permission、service等| |--ActivityManager.java、PermissionManager.java等| |--com\android 一些工具类,基本不会修改| |--server、internal、ims| |--services: 基础框架对应的服务| |--core\java:| |--android:一些工具类,基本不修改| |--com\android\server:基础框架 API,对应的服务的关键目录-------------------<| |----am、app、audio、camera、media、net、input、power等| |----ActivityManagerService.java、AudioService.java等| |--graphics + media:涉及 UI 渲染、音视频的系统应用必改。| |--telecomm + telephony:做系统通话、网络功能定制时用。| |--tests + tools:开发 + 测试流程中高频辅助。|--av:系统多媒体应用开发必用,涉及音频、视频、相机等功能。|--hardware:涉及硬件控制的系统应用(显示、传感器、蓝牙)必用。|--native:高性能计算、底层交互(图形渲染、音视频处理)必用。|--minikin/layoutlib:系统应用 UI 开发(文字渲染、布局调试)高频用。package|--inputmethod输入法框架| |--LatinIME、LeanbackIME等输入法应用|--apps放系统的应用代码| |--Settings、Camera2、Launcher、Nfc等应用|--modules包含主要模块内容:WIFI、蓝牙、adb、权限管理、设备锁、媒体等| |--adb、Bluetooth、Connectivity、Media、Permission、Wifi等模块其他配套目录:
build|--envsetup.sh 初始化环境|--tools 辅助编译/调试/日志分析|--make 兼容老模块|--bazel对接谷歌新流程|--CleanSpec.mk清理策略
hardwareAndroid 框架层与底层硬件驱动之间的 “桥梁”,主要存放硬件抽象层(HAL, Hardware Abstraction Layer)的实现代码,以及部分硬件相关的库和工具
prebuilts存放 Android 编译和运行所需的预编译工具链、库文件和二进制程序,无需开发者重新编译,直接复用即可。
systemAndroid 系统的 “心脏”,存放构成系统运行基础的核心服务、库、工具和应用,是 Android 框架层和原生层的核心实现
device针对具体硬件设备(如手机、平板、电视)的定制配置目录,按 “厂商 -> 机型” 的层级组织,存放某一特定设备的编译配置、板级驱动和定制化代码。实际的厂商代码(应用、驱动、库等),是设备定制的 “实体内容”。
vendor/ Android 系统 “开源框架 + 厂商定制” 模式的核心支撑: 厂商(Vendor)定制化代码的核心存放地,主要用于存储设备制造商的专有代码、硬件适配逻辑、闭源驱动及定制化应用
kernel存放 Android 所基于的 Linux 内核源码,以及针对特定硬件的驱动程序。
sdk存放 为 Android 应用开发者提供的 SDK 工具、文档和示例代码,是构建 Android 应用开发环境的核心。
outAOSP 编译后生成的所有产物的存放目录,编译过程中自动创建,无需手动修改。整编生成的的img系统包,单编生成的apk,系统的jar包,运行环境的配置文件等等
上面最重要的目录就是:
frameworks/base/core/java/android 和 frameworks/base/service/core/java/com/android/server
2、系统开发常见类和所在的目录
以下是 Android 13(API 33)系统开发中与核心服务(AMS、PMS、WMS 等)及关键功能相关的常用类和所在目录):
(1)SystemServer(服务启动类)
-
SystemServer.java
路径:frameworks/base/services/java/com/android/server
系统框架层的 “神经中枢” ,负责启动系统关键服务,比如AMS、WMS、PMS等服务
-
SystemService.java
路径: frameworks/base/services/core/java/com/android/server/
是所有核心系统服务的 “模板”,主要作用包括: 统一服务规范 、 统一服务规范 ;
WifiService、AlarmManagerService等服务都是SystemService的子类
-
SystemServer.java 和 SystemService.java 的区别和联系
上面两个文件目录看起来就很容易搞错,一个没有core,另外一个是有core
SystemServer 是有具体逻辑的类,而 SystemService 是一个抽象类
SystemServer
是承载所有核心系统服务的 “容器进程”,而SystemService
是这些服务的 “基类模板”。具体流程为:
1. 系统启动时,Zygote 进程孵化出 `SystemServer` 进程; 2. `SystemServer` 进程启动后,会创建多个 `SystemService` 的子类实例(如 AMS、PMS); 3. 每个子类实例通过 `SystemService` 定义的生命周期方法完成初始化,并注册到系统的`ServiceManager` 中; 4. 最终,所有服务以线程形式运行在 `SystemServer` 进程中,通过 Binder 向外部提供功能。
简单说:
SystemServer
是 “管理者”,SystemService
及其子类是 “被管理的具体服务”。 -
SystemSericeManager.java 和 SystemService.java 的区别和联系
如果没有看到系统源码的人基本不怎么认识 SystemSericeManager.java 和 SystemService.java;
大部分人只知道SystemServer.java ,因为这个是启动系统关键服务的地方,定制化的重要服务也在这里启动。
SystemService
定义了 “服务是什么样的”,SystemServiceManager
负责 “服务如何启动和协作”,二者共同构成了 Android 系统服务的核心架构。概念比较抽象,具体关系呢?
这个基本没几个人知道:
1、SystemServer创建SystemSericeManager 2、SystemServer启动AMS、WMS是靠SystemSericeManager.startService 3、有些系统服务不是SystemService的子类(比如,AMS、WMS、PMS), 有些系统服务是SystemService的子类,比如WifiService 4、不管这些framework的系统服务是不是SystemService的类,都是有强关联的, 比如ActivityManagerService中会有内部类Lifecycle extends SystemService, ActivityManagerService在内部类Lifecycle某些方法回调才会真正启动并执行相应的处理; 5、SystemSericeManager.startService(启动 AMS、WMS、PMS等服务)返回的是 SystemService对象 获取到SystemService对象就可以马上调用某些固定方法进行配置信息,这个不是硬需求,只有部分系统服务会调; 6、SystemService并不是四大组件的Service, 主要作用是让子类在系统启动后会在对应服务的onStart()等生命周期内做相关的任务, 有的会监听广播,有的或读取系统的属性值或者状态值,进行相关处理。上面就是我对SystemServer、SystemSericeManager、SystemService的个人理解; 简单的说:SystemServer是起源,SystemSericeManager是工具,SystemService包含重要过程和内容。
(2)AMS(Activity 管理相关)
Android 13 中 Activity 管理核心逻辑进一步整合到ActivityTaskManagerService
,与 AMS 协同工作:
- ActivityManagerService.java
路径:frameworks/base/services/core/java/com/android/server/am/
负责进程管理、ANR 监控、权限校验等核心功能,与 ATMS 配合完成 Activity 生命周期管理。 - ActivityTaskManagerService.java
路径:frameworks/base/services/core/java/com/android/server/wm/
核心服务,管理 Activity 任务栈、启动模式、多窗口调度等,是 Android 10 + 后 Activity 管理的核心。 - Task.java / ActivityStack.java
路径:frameworks/base/services/core/java/com/android/server/wm/
管理任务栈结构和 Activity 堆叠逻辑,支持分屏、自由窗口等多视窗场景。 - ProcessRecord.java
路径:frameworks/base/services/core/java/com/android/server/am/
存储进程信息,用于进程优先级计算、内存回收策略等。
(3)PMS(包管理相关)
Android 13 强化了包安装的安全性和兼容性,核心类如下:
- PackageManagerService.java
路径:frameworks/base/services/core/java/com/android/server/pm/
负责 APK 安装 / 卸载、包信息解析、组件管理,支持 Android 13 的 “应用快照”(App Snapshot)等新特性。 - PackageParser.java
路径:frameworks/base/core/java/android/content/pm/
解析 APK 中的 AndroidManifest.xml,提取组件、权限、元数据,支持 Android 13 的新权限声明格式。 - Installer.java
路径:frameworks/base/services/core/java/com/android/server/pm/
与底层installd
交互,处理 APK 文件的拷贝、解压、权限设置,支持 Android 13 的 “部分安装” 功能。 - PackageManagerShellCommand.java
路径:frameworks/base/services/core/java/com/android/server/pm/
提供pm
命令行工具接口,支持 Android 13 新增的包管理调试功能。
(4)WMS(窗口管理相关)
Android 13 增强了窗口隐私保护(如窗口遮罩)和多显示器支持:
- WindowManagerService.java
路径:frameworks/base/services/core/java/com/android/server/wm/
核心窗口管理服务,处理窗口创建、Z 轴排序、焦点切换,支持 Android 13 的 “窗口分层隐私控制”。 - WindowState.java
路径:frameworks/base/services/core/java/com/android/server/wm/
存储单个窗口的状态(大小、类型、可见性等),新增对 “隐私指示器窗口” 的支持。 - DisplayContent.java
路径:frameworks/base/services/core/java/com/android/server/wm/
管理物理 / 虚拟显示器上的窗口布局,支持 Android 13 的多显示器同步刷新。 - WindowContainer.java
路径:frameworks/base/services/core/java/com/android/server/wm/
窗口容器基类,统一管理 Activity、任务、显示器等层级的窗口容器。
(5)音频相关
Android 13 引入空间音频、蓝牙 LE Audio 等新特性,核心类如下:
-
AudioManager.java
路径:framework/base/media/java/android/media/AudioManager.java
为应用提供与系统音频功能交互的接口,方便应用控制设备的音频行为(如音量、铃声模式、音频设备切换等)。
-
AudioService.java
路径:frameworks/base/services/core/java/com/android/server/audio/
音频策略管理核心,支持空间音频开关、LE Audio 编解码切换等新功能。 -
AudioSystem.java
路径:frameworks/base/media/java/android/media/AudioSystem.java
音频底层接口,新增对 3D 音频渲染、动态音频设备切换的支持。 -
AudioFlinger.cpp
路径:frameworks/av/services/audioflinger/AudioFlinger.cpp
(C++ 层)
音频硬件抽象层(HAL)上层服务,处理音频流混合、音效处理,支持 LE Audio 的低延迟模式。 -
MediaPlayerService.cpp
路径:frameworks/av/media/libmediaplayerservice/MediaPlayerService.cpp
(C++ 层)
音频播放服务,支持 Android 13 新增的音频格式(如 OPUS 自适应比特率)。
(6)视频相关
Android 13 优化了视频编解码效率和 DRM 支持:
- MediaCodec.java
路径:frameworks/base/media/java/android/media/MediaCodec.java
音视频编解码接口,支持 AV1 硬件解码、H.265 高效编码,适配 Android 13 的性能优化。 - SurfaceFlinger.cpp
路径:frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
(C++ 层)
图形合成服务,支持 120Hz 高刷视频渲染、HDR10 + 动态元数据处理。 - CameraService.cpp
路径:frameworks/av/services/camera/libcameraservice/CameraService.cpp
(C++ 层)
相机服务,支持视频录制时的 “动态帧率适配”(Android 13 新增)。 - MediaRecorder.java
路径:frameworks/base/media/java/android/media/MediaRecorder.java
视频录制接口,新增对 HEVC(H.265)录制的原生支持。
(7)WIFI 相关
Android 13 强化了 WIFI 6E 支持和隐私保护(如 MAC 随机化增强):
-
WifiManager.java
路径:packages/modules/Wifi/framework/java/android/net/wifi/WifiManager.java
WIFI 暴露api类,控制开关WIFI、获取WIFI状态。 -
WifiService.java
路径:
packages/modules/Wifi/service/java/com/android/server/wifi/WifiService.java
WIFI 核心服务,管理连接、扫描、漫游,支持 6GHz 频段(WIFI 6E)的信道切换。 -
WifiServiceImpl.java
路径:packages/modules/Wifi/service/java/com/android/server/wifi/WifiServiceImpl.java
主要负责实现
IWifiManager
接口定义的所有 WiFi 功能,是应用层与底层 WiFi 硬件 / 协议栈交互的 “实际执行者”。 -
WifiConfigManager.java
路径:packages/modules/Wifi/service/java/com/android/server/wifi/WifiConfigManager.java`
管理 WIFI 配置(如 SSID、密码),支持 Android 13 的 “一次性密码”(Ephemeral Password)功能。 -
WifiScanner.java
路径:packages/modules/Wifi/framework/java/android/net/wifi/WifiScanner.java
WIFI 扫描服务,优化扫描频率以降低功耗,符合 Android 13 的隐私规范。 -
SupplicantStaIfaceHal.java
路径:packages/modules/Wifi/service/java/com/android/server/wifi/SupplicantStaIfaceHal.java
与wpa_supplicant
交互的 HAL 接口,支持 WIFI 6E 的 802.11ax 协议扩展。
Android11 以前的WIFI相关类都是在:frameworks/opt/net/wifi目录下面,Android13后移植到了packages下。
(8)蓝牙相关
Android 13 重点增强了 LE Audio(低功耗音频)和蓝牙隐私保护,核心类如下:
-
蓝牙服务与管理
-
BluetoothManager.java
路径:packages/modules/Bluetooth/framework/java/android/bluetooth/BluetoothManager.java
为应用提供统一的接口来管理设备的蓝牙功能,包括获取蓝牙适配器、访问已配对设备、监听蓝牙状态变化等 。
-
BluetoothManagerService.java
路径:
packages/modules/Bluetooth/service/java/com/android/server/bluetooth/
蓝牙核心服务,管理蓝牙开关、设备配对、profile 激活,支持 LE Audio 的服务发现。 -
BluetoothAdapter.java
路径:packages/modules/Bluetooth/framework/java/android/bluetooth/BluetoothAdapter.java
蓝牙适配器接口,提供蓝牙开关、扫描、设备管理等 API,Android 13 新增isLeAudioSupported()
等方法。注意:蓝牙api的使用,BluetoothAdapter 比 BluetoothManager更实用。
-
-
LE Audio 与音频传输
LeAudioService.java
路径:packages/modules/Bluetooth/android/app/src/com/android/bluetooth/le_audio/
LE Audio 核心服务,处理音频流传输、编解码协商(如 LC3 codec),支持广播音频(Broadcast Audio)。BluetoothLeAudio.java
路径:packages/modules/Bluetooth/framework/java/android/bluetooth/BluetoothLeAudio.java
LE Audio 的上层 API,提供音频会话管理、音量同步等功能。
-
传统蓝牙 Profile
A2dpService.java
(高级音频传输协议)
路径:packages/modules/Bluetooth/android/app/src/com/android/bluetooth/a2dp/
管理经典蓝牙音频传输,Android 13 中与 LE Audio 形成互补。HidHostService.java
(HID 设备服务)
路径:packages/modules/Bluetooth/android/app/src/com/android/bluetooth/hid/
支持蓝牙键盘、鼠标等 HID 设备连接,优化了配对流程。
(9)权限管理相关
Android 13 新增了 “照片选择器”“通知权限” 等细粒度权限:
- PermissionManagerService.java、PermissionManagerServiceImpl.java
路径:frameworks/base/services/core/java/com/android/server/pm/permission/
权限管理核心,处理权限申请、授予 / 撤销,支持 Android 13 的 “部分权限授予”(如仅允许访问部分照片)。 - AppOpsManager.java
路径:frameworks/base/core/java/android/app/AppOpsManager.java
应用操作权限管理,新增对 “通知发送”“媒体文件访问” 的细粒度控制。 - DefaultPermissionGrantPolicy.java
路径:frameworks/base/services/core/java/com/android/server/pm/permission/
系统默认权限策略,定义预装应用的权限授予规则(适配 Android 13 的权限分组变化)。 - PermissionControllerServiceImpl.java
路径:frameworks/base/services/core/java/com/android/server/pm/permission/
权限控制器服务,处理权限弹窗交互、权限使用记录(Android 13 强化了权限使用通知)。
(10)原生 Settings 应用开发
原生设置应用(Settings)的代码集中在packages/apps/Settings
,主要类涉及各设置项的 UI 和逻辑:
- 设置页面与控制器
SettingsActivity.java
路径:packages/apps/Settings/src/com/android/settings/SettingsActivity.java
设置应用的主 Activity,负责页面跳转、权限检查,支持 Android 13 的动态权限页展示。DisplaySettings.java
路径:packages/apps/Settings/src/com/android/settings/display/DisplaySettings.java
显示设置页面(如亮度、刷新率),Android 13 新增 “护眼模式强度” 调节逻辑。SoundSettings.java
路径:packages/apps/Settings/src/com/android/settings/sound/SoundSettings.java
声音设置页面,整合了空间音频开关、LE Audio 设备管理等新功能。
- 偏好设置与数据管理
SettingsPreferenceFragment.java
路径:packages/apps/Settings/src/com/android/settings/SettingsPreferenceFragment.java
设置页面的基类,封装偏好项(Preference)的加载与交互逻辑。PreferenceController.java
路径:packages/apps/Settings/src/com/android/settings/core/PreferenceController.java
偏好项的逻辑控制器,处理数据加载、状态更新(如蓝牙开关状态同步)。SettingsState.java
路径:packages/apps/Settings/src/com/android/settings/deviceinfo/SettingsState.java
存储设置项的状态数据,支持跨页面的数据共享。
(11)Launcher 桌面开发
原生桌面通常基于Launcher3
,代码位于packages/apps/Launcher3
,核心类涉及图标管理、桌面布局等:
- 桌面核心框架
Launcher.java
路径:packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
桌面主 Activity,管理桌面布局、图标加载、手势交互(如长按、拖拽)。Workspace.java
路径:packages/apps/Launcher3/src/com/android/launcher3/Workspace.java
桌面工作区,负责图标、文件夹、小部件(Widget)的排版与显示。
- 图标与应用管理
AppIconLoader.java
路径:packages/apps/Launcher3/src/com/android/launcher3/icons/AppIconLoader.java
加载应用图标,支持 Android 13 的自适应图标(Adaptive Icon)和动态颜色。AppInfo.java
路径:packages/apps/Launcher3/src/com/android/launcher3/model/data/AppInfo.java
存储应用信息(如包名、图标、名称),用于桌面图标的展示。IconCache.java
路径:packages/apps/Launcher3/src/com/android/launcher3/IconCache.java
缓存应用图标,优化桌面加载性能,支持图标更新监听。
- 小部件与文件夹
AppWidgetHostView.java
路径:packages/apps/Launcher3/src/com/android/launcher3/widget/AppWidgetHostView.java
小部件的容器视图,处理小部件的添加、更新、移除。Folder.java
路径:packages/apps/Launcher3/src/com/android/launcher3/folder/Folder.java
桌面文件夹逻辑,支持图标拖拽入文件夹、文件夹重命名等交互。
- 设置与个性化
LauncherSettings.java
路径:packages/apps/Launcher3/src/com/android/launcher3/LauncherSettings.java
桌面设置项(如网格大小、默认页)的数据库定义,存储用户配置。
2、framework的core和service目录的作用?
上面的类分析中SystemServer 和 SystemService所在的目录及其相识:
frameworks/base/services/java/com/android/server/SystemServer.java
frameworks/base/services/core/java/com/android/server/SystemService.java
系统其他类也有似类这种情况,目录就多了个core,这个非常容易搞错啊!
那么core名称的目录有啥所用呢?这里简单介绍一下.
core目录的作用:
core
目录(或命名类似的 kernel
、base
目录)是一个典型的 “核心功能承载目录”,
其设计目的是集中存放系统 / 项目中最关键、最基础、最稳定且被广泛依赖的核心代码。
它的作用和意义具有很强的通用性, 主要用作父类、框架类,修改比较少。
“核心目录” 不一定都叫 core
,不同项目可能采用不同命名,但本质作用完全一致:
kernel
:更偏向 “操作系统级核心”(如 Linux 内核的kernel/
目录);base
:更偏向 “框架级基础能力”(如 Android 的frameworks/base/
目录);foundation
:强调 “基础支撑”(如一些后端框架的foundation/
目录)。
上面的core相当于基础/核心类,所以core目录下的代码有些是接口类或者抽象类。
上面只是针对framework/base下面的core和非core。
那service呢?
service无非就是服务,Manager通过aidl绑定服务,
系统暴露相关Manager给外部应用使用,而内部Service相关类,应用是无法调用到的。
比如下面两个暴露的Manager对于的Service类代码路径:
PackageManager.java路径:framework/base/core/java/android/content/pm/
PackageManagerService.java路径:frameworks/base/services/core/java/com/android/server/pm/AudioManager.java路径:framework/base/media/java/android/media/
AudioService.java路径:frameworks/base/services/core/java/com/android/server/audio/
有些Manager是在core目录下,有些不在core目录下,估计是core目录下是比较核心的;
可以看到重要Service的实现逻辑都是在core目录,所以应该算是比较核心的。
frameworks/base/services/下面非core一般是一些基础配置,比如:SystemServer
frameworks/base/services/的非core一般是具体实现的Service,比如
3、framework的 java/android/和java/com/android/目录
framework/base/core下面有java/android/
和 java/com/android/
有时候容易记错,
下面是主要区别:
维度 | java/android/ 目录 | java/com/android/ 目录 |
---|---|---|
包名 | android.* | com.android.* |
访问权限 | 公开 API,应用可直接使用(含于 SDK) | 内部实现,应用不可直接使用(不含于 SDK) |
功能定位 | 定义应用与系统交互的接口、规范、数据结构 | 具体处理逻辑或者封装类 |
兼容性 | 受 Android 兼容性承诺保护,接口稳定 | 无兼容性承诺,版本间可能大幅变动 |
典型类 | Activity 、Intent 、ActivityManager | SystemConfig 、LocalServices 、ActionBarPolicy |
联系:二者是 “接口 - 实现” 的协作关系,android.*
定义功能规范,com.android.*
落地实现逻辑,相关共同支撑。
理解这两个目录的区别,对 Android 开发至关重要:应用开发者应只依赖 android.*
类(保证兼容性);
系统开发者则需同时关注 com.android.*
类(理解底层实现)。
有些系统开发,会修改系统暴露的api,比如在ActivityManager添加自定义的接口,
修改的目录在java/android/
,而java/com/android/
目录基本不会修改到。
上面的理解知识是针对 framework/base/core下面的java/android/
和 java/com/android/
。
另外 framework/base/service/core下面也有java/android/
和 java/com/android/
但是作用有比较大差异,
因为service里面的类都不是暴露的,要修改适配的内容和具体实现都在 java/com/android/
目录下;
所以造成了一个比较混乱的现象:
系统暴露主要的api的定义在 framework/base/java/android/ 目录下面,
api的实现service目录在 framework/base/service/core/java/com/android/server/目录下面。
这种代码目录是比较容易记忆混淆,多看几次就好了。
framework下java/android/和java/com/android/目录的主要记忆/理解的技巧就是:
(1)java/android/ 目录下面主要是api相关的;
(2)java/com/android/ 目录下面主要是实现相关的;
(3)framework/base/core 都是暴露api Manager的目录,主要适配修改目录在 java/android/
(4)framework/base/service/core 是服务实现的目录代码,主要适配修改目录在 java/com/android/
很多系统源码在不同版本都是有变化的,
有可能是一些工具类实现的变化,有可能是类名称的变化,方法名称的变化,
多掌握系统相关的或者某个功能相关的主要流程,这样就可以找到对应的逻辑。