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

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

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

  • 备注
  • 一、基础知识
  • 二、基本操作
    • 1.源码获取
    • 2.源码编译
    • 3.产品添加
    • 4.应用添加
  • 二、

备注

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作为开发工具。首次开发获取源码的操作如下:

# 安装基本依赖
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.源码编译

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

source build/envsetup.sh
lunch 
make -j$(nproc)

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

adb reboot bootloader
fastboot flashall -w

3.产品添加

不同产品的源码会存在差异,通过配置文件来实现区分,这一系列的配置文件我们称为 Product,每一个 Product 适用于特定的硬件产品,在编译时通过lunch进行选择。
Google提供的product 配置文件会保存在build/target目录下,芯片厂商或主板厂商提供的product配置文件在device目录下。
当我们想要添加自己的product 配置文件时一般也会选择在device目录下新增<公司名>/<Product名>,再添加<Product名>.mk、BoardConfig.mk、AndroidProducts.mk,可以参考AOSP原生文件进行编写。

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

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

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

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

软件硬件
通用systemvendor
差异productodm

4.应用添加

二、

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

相关文章:

  • 本地部署 DeepSeek-R1-0528 超大语言模型全流程指南(含量化版优化实操)
  • HBase 安装与简单操作指南
  • 深入 Java 泛型:高级应用与实战技巧
  • 深度学习神经网络架构Transformer深刻理解
  • 论文略读:Ask, and it shall be given: On the Turing completeness of prompting
  • OpenCV 鼠标操作与响应之绘制ROI提取图像
  • antd vue a-range-picker如何设置不能选择当前和之后的时间,包含时分秒
  • SSM框架实现学生管理系统的需求分析与设计详解
  • 智能聊天AI Top10 排行榜 - 2025年05月
  • 牛客小白月赛118
  • 计算机图像处理:从像素到卷积与池化的深度解析
  • 护城河尚浅,理想汽车驶入慢车道
  • Java Stream API 在企业开发中的实战心得:高效、优雅的数据处理
  • 包含各种扁平化UI套件的psd适用于博客电商类移动端网站项目
  • 论文笔记 <交通灯><多智能体>CoLight管理交通灯
  • 【Golang面试题】什么是写屏障、混合写屏障,如何实现?
  • 【Linux】git基础操作
  • 【DeepSeek】移植计划
  • 110.将临时账号切换为登录后的账号
  • dbus从理论到实践教程
  • Redis的string的底层实现原理
  • AI玩转空间和时间?后续会怎样发展?
  • 【Qt】信号与槽
  • 【SystemVerilog 2023 Std】第5章 词法约定 Lexical conventions (1)
  • 前端开发中的可访问性设计:让互联网更包容
  • 开关电源和线性电源
  • Linux搭建爬虫ip与私有IP池教程
  • 期权备兑策略选择什么价值的合约?
  • 详解Python当中的pip常用命令
  • uni-app项目实战笔记5--使用grid进行定位布局