关于SDK,其实之前的好几篇就有提到过了,一直在想是修改一下还是重新写,后面仔细想了一下,还是重新写吧。
现在有点后悔之前做高通的时候没有好好的总结一下,现在手上没代码,要总结反而是更困难了。还是一步步的来吧。
1 AOSP目录详解
1.1 标准AOSP
首先还是看标准AOSP吧,以Android14为目标。路径是:https://xrefandroid.com/android-14.0.0_r21/#google_vignette
不过上面那个也不是特别稳定,还有一个网站是:https://cs.android.com/android/platform/superproject/main/+/main:
整体结构如下:

这里,很多是不需要修改的,需要重点关注的就是:
| 目录 | 作用 | 重要度 |
|---|---|---|
| frameworks | Android Framework | ★★★★★ |
| system | 系统服务 | ★★★★★ |
| hardware | HAL层 | ★★★★★ |
| kernel | Linux内核 | ★★★★★ |
| packages | 系统APP | ★★★★ |
| build | 编译系统 | ★★★★ |
| device | 设备配置 | ★★★★ |
| art | Android Runtime | ★★★ |
| libcore | Java核心库 | ★★★ |
| external | 第三方开源库 | ★★★ |
| cts | 兼容性测试 | ★★ |
| vendor | 厂商代码(如果有) | ★★★★★ |
1.2 常规修改重点
1 BSP方向
BSP 开发主要聚焦在硬件适配、内核、驱动和硬件抽象层(HAL)。你主要需要和芯片厂商(如高通、联发科、瑞芯微等)以及具体板卡打交道。
-
device/(核心关注点 1)-
作用: 存放特定厂商和具体板级配置。例如
device/google/或device/rockchip/。 -
关注内容: 你的板卡配置(BoardConfig.mk)、分区表、初始化脚本(
init.rc)、内核设备树(DTS)以及板级特有的 HAL 绑定。
-
-
vendor/(核心关注点 2)-
作用: 存放芯片厂商(SoC Vendor)提供的闭源驱动、HAL 实现、专有库和编译脚本。
-
关注内容: 厂商定制的硬件控制逻辑、屏幕/触控/电源管理等私有驱动。
-
-
hardware/-
作用: Android 标准的硬件抽象层(HAL)接口和开源实现。
-
关注内容:
hardware/interfaces/(HIDL/AIDL 接口定义),这是上层 Framework 与底层驱动沟通的桥梁。
-
-
kernel/-
作用: Android Linux 内核源码。
-
关注内容: 驱动程序开发、内核性能调优、DTS 修改。
-
2 系统服务方向
修改或增加系统服务(比如定制特殊的窗口管理、修改电源策略、增加自定义系统 API),主要聚焦在 Java 框架层和 native 守护进程。
-
frameworks/base/(重中之重)-
作用: Android 系统的核心框架。
-
关注内容:
-
frameworks/base/services/:所有的核心 Java 系统服务(如WindowManagerService,ActivityManagerService,PackageManagerService)。 -
frameworks/base/core/:Android 核心库,供 APP 调用的系统 API(如android.os,android.view)。
-
-
-
frameworks/native/-
作用: 偏底层的 C++ 核心服务和本地库。
-
关注内容: Graphics(图形渲染)、SurfaceFlinger(屏幕合成)、InputFliger(输入事件分发)。
-
-
system/core/-
作用: Android 底层系统运行库和工具。
-
关注内容:
init进程(系统启动)、logcat(日志)、adb、以及系统属性服务(Property Service)。
-
3 增加App
在 AOSP 中增加内置 App,无论是系统级 App(拥有特权签名)还是普通预装 App,代码和编译配置都有固定的去处。
-
packages/apps/(核心关注点)-
作用: 系统自带的原生 APP(如 Settings, Launcher3, Camera2, Dialer 等)。
-
关注内容: * 如果要修改内置应用(如定制设置菜单),直接去对应的目录下找。
- 如果要新增自己写的 App ,通常在这个目录下新建一个文件夹,把你的 APP 源码放进去,并编写
Android.bp(或Android.mk)编译脚本。
- 如果要新增自己写的 App ,通常在这个目录下新建一个文件夹,把你的 APP 源码放进去,并编写
-
-
packages/providers/-
作用: 系统级数据存储和提供者(如 MediaProvider, DownloadProvider, ContactsProvider)。
-
关注内容: 如果你的 App 需要修改或深度解耦系统媒体库、联系人等数据,需要关注这里。
-
-
packages/modules/(针对高版本 Android)-
作用: Mainline 模块(可更新的系统组件)。
-
关注内容: 一些原本属于 Framework 或 App 的组件(如 Wi-Fi、PermissionController)在 Android 10+ 被移动到了这里。
-
简单总结如下:
| 任务方向 | 核心文件夹 | 重点文件/技术 |
|---|---|---|
| BSP/驱动 | device/, vendor/, kernel/, hardware/ |
init.rc, .dts, Android.bp, HIDL/AIDL |
| 修改服务 | frameworks/base/services/, frameworks/native/ |
Java/C++ 服务源码, Binder 通信 |
| 增加 APP | packages/apps/ |
应用程序源码, Android.bp 编译配置 |
2 高通目录
2.1 高通的内容
高通主要增加的是:Camera/Display/Audio/Modem/GPS/Power/Thermal/AI Engine/DSP/GPU/Sensor。
相关代码通常放在 vendor、hardware、kernel 三层。Android Treble 后,硬件相关代码主要放在 vendor 分区。
1 最大的部分是vendor/qcom,这里一般包含HAL/Daemon/JNI/配置文件/闭源库(.so)。
2 然后是hardware/qcom,据说以前大量代码放这里,现在不放了。我也不是很清楚,等拿到代码再看吧。
3 之后是Kernel,就是BSP层的部分,比如drivers/soc/qcom/rpmh;drivers/soc/qcom/glink;drivers/soc/qcom/smem;drivers/soc/qcom/qmi;drivers/gpu/drm/msm/高通显示驱动;drivers/media/platform/msm/摄像头驱动。
4 设备树。位置是kernel/arch/arm64/boot/dts/qcom/。
5 Framework层。主要是Power HAL/Thermal HAL/Display HAL/Camera Service扩展,在这些地方高通增加了自己的私有扩展。
6 System层。增加了一些守护进程。会增加一个自己的init.qcom.rc。
2.2 QSSI和Vendor
这个目标就是把 Android Framework(QSSI)和硬件实现(Vendor)尽量解耦。升级安卓版本,只用升级的版本就可以了。
SSI
QSSI
Qualcomm Single System Image。从 Android Q(Android 10)开始,高通引入 QSSI。这里包含了frameworks/system/packages/libcore/art/,也就是Android Framework/System Service/System App。这些部分不依赖于具体的芯片。
一般使用下面这个命令编译。
bash
lunch qssi-userdebug
生成:system.img,system_ext.img,product.img。
Vendor
主要包含vendor/qcom/和hardware/qcom/。主要就是高通自己的一些平台HAL,比如Camera HAL/Audio HAL/Display HAL/GNSS HAL/Thermal HAL。
一般使用下面这个命令编译:
bash
lunch kalama-userdebug
生成:vendor.img,odm.img,boot.img,dtbo.img。