当前位置: 首页 > ops >正文

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目录下其他配套类比如:ActivityThreadApplicationActivityManager

      AlarmManagerNotificationManagerTaskStackBuilderAlertDialog

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 系统命令(如 ampm)的代码,这些命令用于调试和控制系统行为(通过 ADB 调用)。

  • 关键代码:
    • cmds/am/src/com/android/commands/am/Am.javaam 命令实现(如 am start 启动 Activity),通过与 AMS 通信执行操作。
    • cmds/pm/src/com/android/commands/pm/Pm.javapm 命令实现(如 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)、启动系统服务(如 zygotesurfaceflinger)。
    • 关键文件:init.cpp(路径:system/core/init/init.cpp),init 进程的入口文件,包含 main() 方法。
  • 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.javaSystemService.java 的区别和联系

    上面两个文件目录看起来就很容易搞错,一个没有core,另外一个是有core

    SystemServer 是有具体逻辑的类,而 SystemService 是一个抽象类

    SystemServer 是承载所有核心系统服务的 “容器进程”,而 SystemService 是这些服务的 “基类模板”。

    具体流程为:

    1. 系统启动时,Zygote 进程孵化出 `SystemServer` 进程;
    2. `SystemServer` 进程启动后,会创建多个 `SystemService` 的子类实例(如 AMS、PMS);
    3. 每个子类实例通过 `SystemService` 定义的生命周期方法完成初始化,并注册到系统的`ServiceManager` 中;
    4. 最终,所有服务以线程形式运行在 `SystemServer` 进程中,通过 Binder 向外部提供功能。
    

    简单说:SystemServer 是 “管理者”,SystemService 及其子类是 “被管理的具体服务”。

  • SystemSericeManager.javaSystemService.java 的区别和联系

    如果没有看到系统源码的人基本不怎么认识 SystemSericeManager.javaSystemService.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(低功耗音频)和蓝牙隐私保护,核心类如下:

  1. 蓝牙服务与管理

    • 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更实用。

  2. 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,提供音频会话管理、音量同步等功能。
  3. 传统蓝牙 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 和逻辑:

  1. 设置页面与控制器
    • 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 设备管理等新功能。
  2. 偏好设置与数据管理
    • 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,核心类涉及图标管理、桌面布局等:

  1. 桌面核心框架
    • Launcher.java
      路径:packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
      桌面主 Activity,管理桌面布局、图标加载、手势交互(如长按、拖拽)。
    • Workspace.java
      路径:packages/apps/Launcher3/src/com/android/launcher3/Workspace.java
      桌面工作区,负责图标、文件夹、小部件(Widget)的排版与显示。
  2. 图标与应用管理
    • 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
      缓存应用图标,优化桌面加载性能,支持图标更新监听。
  3. 小部件与文件夹
    • AppWidgetHostView.java
      路径:packages/apps/Launcher3/src/com/android/launcher3/widget/AppWidgetHostView.java
      小部件的容器视图,处理小部件的添加、更新、移除。
    • Folder.java
      路径:packages/apps/Launcher3/src/com/android/launcher3/folder/Folder.java
      桌面文件夹逻辑,支持图标拖拽入文件夹、文件夹重命名等交互。
  4. 设置与个性化
    • 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 目录(或命名类似的 kernelbase 目录)是一个典型的 “核心功能承载目录”

其设计目的是集中存放系统 / 项目中最关键、最基础、最稳定且被广泛依赖的核心代码

它的作用和意义具有很强的通用性, 主要用作父类、框架类,修改比较少。

“核心目录” 不一定都叫 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 兼容性承诺保护,接口稳定无兼容性承诺,版本间可能大幅变动
典型类ActivityIntentActivityManagerSystemConfigLocalServices、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/

很多系统源码在不同版本都是有变化的,

有可能是一些工具类实现的变化,有可能是类名称的变化,方法名称的变化,

多掌握系统相关的或者某个功能相关的主要流程,这样就可以找到对应的逻辑。

http://www.xdnf.cn/news/19955.html

相关文章:

  • css margin外边距重叠/塌陷问题
  • AI时代企业获取精准流量与实现增长的GEO新引擎
  • Android14实现Settings左右分屏显示的 代码修改
  • 智能相机还是视觉系统?一文讲透工业视觉两大选择的取舍之道
  • MCP驱动企业微信智能中枢:企业级机器人服务构建全攻略
  • 嘎嘎厉害!耐达讯自动化RS485转Profinet网关就是食品温控的“天选之子”
  • vscode连接SSH
  • 25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
  • PostgreSQL15——DML 语句
  • jodconverter将word转pdf底层libreoffice的问题
  • 企业微信AI怎么用才高效?3大功能+5个实操场景,实测效率提升50%
  • Linux服务器暴走,用Netdata+cpolar轻松驯化
  • 数据库查询优化
  • 高级RAG策略学习(六)——Contextual Chunk Headers(CCH)技术
  • MySQL InnoDB 的 MVCC 机制
  • 在选择iOS代签服务前,你必须了解的三大安全风险
  • Opencv C++ 教程-人脸识别
  • AI驱动健康升级:新零售企业从“卖产品”到“卖健康”的转型路径
  • 人形机器人控制系统核心芯片从SoC到ASIC的进化路径
  • 机器学习与Backtrader的融合构建自适应交易策略
  • 动态规划入门:从记忆化搜索到动态规划
  • 从0开始学习Java+AI知识点总结-30.前端web开发(JS+Vue+Ajax)
  • JavaSe之多线程
  • 残差网络的介绍
  • 【代码随想录算法训练营——Day2】数组——209.长度最小的子数组、59.螺旋矩阵II、区间和、开发商购买土地
  • “人工智能+”的新范式:应用赋能与风险应对
  • 不会战略、不会融资、不会搭团队?别叫自己 CTO
  • /Users/yourname/Library/Developer/Xcode 文件夹里面各子文件夹作用
  • 【LeetCode热题100道笔记】缺失的第一个正数
  • 【CouponHub项目开发】使用RocketMQ5.x实现延时修改优惠券状态,并通过使用模板方法模式重构消息队列发送功能