Android学习25--SDK3(TODO)

关于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)编译脚本。
  • 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。