【教程】Android(AOSP)Framework开发/ROM定制快速教程

【教程】Android(AOSP)Framework开发/ROM定制快速教程

备注

2025/03/13 星期四

记录一下完整的Android系统开发知识,方便自己查阅

https://juejin.cn/post/7216495812577427517)

一、基础知识

Android是Google基于Linux内核研发的移动操作系统,Google将Android源码进行了开源称为AOSP(Android Open Source Project)。Android经过多年发展,除了手机还广泛应用于手表、平板、电视、车机等智能设备中。对AOSP源码做二次开发的工作一般称为Framework开发或者ROM定制。

Android设备制造行业一个基本的流程是:

1.Google开发AOSP

2.芯片厂商根据芯片适配AOSP(如高通、展锐、联发科)

3.主板厂商(有的芯片厂商也当主板厂商)设计电路板,增加其他配件,在芯片厂商源码基础上继续修改做适配

4.设备制造商对主板厂商的源码定制UI,增加功能,优化系统(如华为、小米、OPPO、VIVO)

二、基本操作

1.源码获取

Google建议在Ubuntu上进行开发,提供了Android Studio for Platform作为开发工具。首次开发获取源码的操作如下:

bash 复制代码
# 安装基本依赖
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev libc6-dev-i386 x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

# 安装源码管理工具repo
sudo apt-get install repo

# 初始化仓库
repo init --partial-clone -b main -u https://android.googlesource.com/platform/manifest -b [分支]

# 拉取源码
repo sync -c -j8

2.源码编译

对源码进行编译的操作如下:

bash 复制代码
source build/envsetup.sh
lunch 
make -j$(nproc)

(注:Android中的内核文件是预编译好的,如果想要修改内核需要拉取对应的内核代码,修改编译后将编译结果放到指定路径,再重新编译打包Android镜像。)

编译完成后进行刷机的操作如下:

bash 复制代码
adb reboot bootloader
fastboot flashall -w

3.产品添加

不同产品的源码会存在差异,通过配置文件来实现区分,这一系列的配置文件我们称为 Product,每一个 Product 适用于特定的硬件产品,在编译时通过lunch进行选择。

Google提供的product 配置文件会保存在build/target目录下,芯片厂商或主板厂商提供的product配置文件在device目录下。

当我们想要添加自己的product 配置文件时一般也会选择在device目录下新增<公司名>/<Product名>,再添加<Product名>.mk、BoardConfig.mkAndroidProducts.mk,可以参考AOSP原生文件进行编写。

文件 作用
<Product名>.mk 产品最核心的配置文件
BoardConfig.mk 硬件底层配置、芯片架构、分区大小、bootloader 和 kernel, 是否支持摄像头,GPS导航等一些板级特性。
AndroidProducts.mk lunch时,打印的列表以及每个选项对应的配置文件

添加好我们的product之后就可以确认不同分区的作用,这里优先区分一下system、vendor、odm和product分区,

分区 作用
system AOSP系统组件,即不同product的通用软件
vendor 芯片和主板厂商针对硬件开发的平台通用的可执行文件、库、系统服务和 app (不包含驱动)
odm 产品硬件差异导致的相关软件差异部分都会放在odm分区
product 软件差异都放在product分区

因此可以从软硬件、通用和差异方面简单理解为:

软件 硬件
通用 system vendor
差异 product odm

4.应用添加

二、

相关推荐
Aevget12 小时前
「Java EE开发指南」如何用MyEclipse开发Java EE企业应用程序?(二)
java·ide·java-ee·开发·myeclipse
用户20187928316715 小时前
ANR之RenderThread不可中断睡眠state=D
android
煤球王子15 小时前
简单学:Android14中的Bluetooth—PBAP下载
android
小趴菜822715 小时前
安卓接入Max广告源
android
齊家治國平天下15 小时前
Android 14 系统 ANR (Application Not Responding) 深度分析与解决指南
android·anr
ZHANG13HAO15 小时前
Android 13.0 Framework 实现应用通知使用权默认开启的技术指南
android
【ql君】qlexcel15 小时前
Android 安卓RIL介绍
android·安卓·ril
写点啥呢15 小时前
android12解决非CarProperty接口深色模式设置后开机无法保持
android·车机·aosp·深色模式·座舱
IT酷盖15 小时前
Android解决隐藏依赖冲突
android·前端·vue.js
努力学习的小廉17 小时前
初识MYSQL —— 数据库基础
android·数据库·mysql