mirror of
https://github.com/feicong/rom-course.git
synced 2025-08-29 02:35:20 +00:00
章前语调整第一章、第二章
This commit is contained in:
parent
f1335e70dd
commit
b5c92ebd71
@ -1,5 +1,7 @@
|
||||
# 第1章 引言
|
||||
|
||||
`Android`系统并不是一个新兴的技术,如今`Android`已经占领各大移动端市场,不单单是手机市场,还有许多智能设备也是使用的`Android`系统来驱动,例如智能电视、`Android`机顶盒、车载娱乐系统、智能手表、智能家居等等,由于`Android`的灵活性和开放性,让其可定制性在各类设备中得到充分的利用。开发者可以根据自身业务的需求,自由的改造`Android` 系统。在这一章中,将简单的介绍`Android`系统和定制。通过这一章的学习,让读者对于`Android`系统中的常见名词有一个简单的了解。
|
||||
|
||||
## 1.1 AOSP是什么
|
||||
|
||||
Android操作系统是如今最流行使用最广的智能手机操作系统,它的发展受到广大厂商和用户的全力支持,而Android操作系统的开源使它可以被任何人定制化,从而满足各类厂商和不同需求的用户。
|
||||
|
@ -1,14 +1,12 @@
|
||||
# 第二章 系统开发环境与工具
|
||||
|
||||
## 2.1 重新看待系统定制
|
||||
|
||||
经过第一章的学习,对AOSP定制进行简略的介绍后,相信此时,系统定制开发这个领域,在读者的心中会有大致的了解。简单来说,所谓的系统定制,相当于在一款成熟的产品上进行二次开发。和常见的软件项目的二次开发的学习步骤类似,不会有太大的出入,细节的区别就在于,Android源码相比其他软件项目要更加庞大复杂,修改编译以及测试系统所花费的时间周期更长。
|
||||
|
||||
尽管Android源码结构非常庞大,但对于初学者,并不需要完整的吃透所有代码。重点的是,掌握系统代码分析的思路,阅读理解工程的整体结构,了解Android系统框架的运行原理,结合思考与实践,达到自定义定制的目标。
|
||||
|
||||
学习的流程需要循序渐进,有的放矢,以免迷失在纷繁复杂的代码海洋中。通常,第一步需要了解如何将整个系统项目成功编译并刷机。这一章将详细讲解在各种不同的环境下,应该如何编译Android源码,并将其刷入手机中。
|
||||
|
||||
## 2.2 环境准备
|
||||
## 2.1 环境准备
|
||||
|
||||
安卓系统在版本10之前,是支持macOS系统上编译AOSP代码的。在新版本系统的演进过程中,安卓官方已经放弃在macOS系统平台上做AOSP开发的支持,官方开发指导环境采用了Linux上比较流行的Ubuntu发行版本。
|
||||
|
||||
@ -16,7 +14,7 @@
|
||||
|
||||
这一节将会介绍在Windows系统与Linux系统上,如何完成环境准备工作。
|
||||
|
||||
### 2.2.1 Windows
|
||||
### 2.1.1 Windows
|
||||
|
||||
由于在Windows中缺少了各种底层编译器与开发库的支持,一般情况下,开发人员不会直接在Windows环境中编译,而是选择在Windows中创建一个Linux的虚拟环境,然后在虚拟环境中安装编译所需要用到的底层依赖。在Windows系统上部署Ubuntu虚拟环境有多种可选方案,例如Docker、WSL(Windows Subsystem for Linux)、Vmware虚拟机,QEMU、HyperV虚拟机平台等等。
|
||||
|
||||
@ -104,7 +102,7 @@ wsl --import ubuntu22 E:\wsl2\ubuntu22_wsl E:\wsl2\ubuntu22.tar
|
||||
|
||||
虚拟机开机后,将默认进入Ubuntu安装界面,按照提示进行选择语言,区域等待安装完成即可。
|
||||
|
||||
### 2.2.2 Linux
|
||||
### 2.1.2 Linux
|
||||
|
||||
Linux系统的选择非常多,本书中选择最新的Ubuntu 22.04 LTS稳定版。这里假定读者已经在自己的硬件上安装好了系统环境(安装方法与Vmware安装系统的操作流程类似)。
|
||||
|
||||
@ -138,11 +136,11 @@ pip install pytest
|
||||
到这里,Ubuntu系统上的AOSP编译开发环境就补步准备好了。
|
||||
|
||||
|
||||
### 2.3 源码拉取与同步
|
||||
### 2.2 源码拉取与同步
|
||||
|
||||
在开始拉取代码前,首选需要了解自己需要编译的AOSP分支版本,可以参考官网对版本的说明链接。https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn
|
||||
|
||||
#### 2.3.1 分支选择策略
|
||||
#### 2.2.1 分支选择策略
|
||||
|
||||
根据需求,比如想要在Android10的基础上进行二次开发,那么就找到对应的版本描述,根据下图,可以看到各个版本号关联的代码分支,Android版本,支持哪些设备。
|
||||
|
||||
@ -161,7 +159,7 @@ pip install pytest
|
||||

|
||||
|
||||
|
||||
#### 2.3.2 repo配置
|
||||
#### 2.2.2 repo配置
|
||||
|
||||
AOSP官方使用`repo`管理项目。`repo`是一个以`git`为基础包装的代码版本管理工具,内部是由`python`脚本构成的,对`git`命令进行包装,方便管理大型的项目。
|
||||
|
||||
@ -194,7 +192,7 @@ chmod a+x ~/bin/repo
|
||||
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
|
||||
```
|
||||
|
||||
#### 2.3.3 源码拉取与同步
|
||||
#### 2.2.3 源码拉取与同步
|
||||
|
||||
上面知道了需要的目标分支,接下来的步骤是拉取代码。执行如下命令:
|
||||
|
||||
@ -228,11 +226,11 @@ repo sync -c -j$(nproc --all)
|
||||
|
||||
代码同步完成后,会提示`Success`,如果失败了,就重新拉取即可,多拉取几次后,基本都能同步成功。
|
||||
|
||||
### 2.4 系统编译
|
||||
### 2.3 系统编译
|
||||
|
||||
接下来,开始安装编译的底层依赖。
|
||||
|
||||
#### 2.4.1 AOSP编译依赖库安装
|
||||
#### 2.3.1 AOSP编译依赖库安装
|
||||
|
||||
执行下面的命令,安装相关依赖:
|
||||
|
||||
@ -244,7 +242,7 @@ sudo apt-get install -y git-core gnupg flex bison build-essential \
|
||||
fontconfig libncurses5 procps rsync libsqlite3-0
|
||||
```
|
||||
|
||||
#### 2.4.2 系统编译
|
||||
#### 2.3.2 系统编译
|
||||
|
||||
注意:编译AOSP需要大量的磁盘空间,通常300G的空间足够存放代码与编译输出的结果。如果你希望将输出的结果存放在其它目录。这一点通过设置`OUT_DIR`环境变量来调整编译结果的输出目录。如下所示,
|
||||
|
||||
@ -345,7 +343,7 @@ vendor.img
|
||||
|
||||
确定有编译出`vendor.img、system.img、boot.img`等镜像文件,就说明编译成功了。
|
||||
|
||||
### 2.5 模块编译
|
||||
### 2.4 模块编译
|
||||
|
||||
前文在编译的过程中介绍到,使用`source ./build/envsetup.sh`初始化环境的时候,导入了多个命令来辅助编译。接下来,先看看有哪些常用的命令。
|
||||
|
||||
@ -426,7 +424,7 @@ Common goals are:
|
||||
|
||||
通过帮助命令的提示,可以看到`m snod`就是单独编译`system`模块,命令`m vnod`就是单独编译`Vendor`。大多数时候,修改的内容都是在`system`模块中。可以根据自己对系统的修改情况,执行不同的模块编译。
|
||||
|
||||
### 2.6 内核编译
|
||||
### 2.5 内核编译
|
||||
|
||||
系统编译完成后,可以在编译的镜像结果中看到文件`boot.img`,这个文件是内核镜像文件。但是这个内核默认采用Android源码树中预编译好的内核文件,并不使用编译出来的,如果想要为编译的系统纳入自编译的内核,需要拉取对应分支的内核代码参与编译,并将编译结果放入Android源码树中的指定路径,最后再重新编译打包Android镜像。这样,生成的系统刷入手机后,使用的内核就是自编译的版本了。
|
||||
|
||||
@ -486,11 +484,11 @@ lunch aosp_blueline-userdebug
|
||||
make bootimage
|
||||
```
|
||||
|
||||
### 2.7 刷机
|
||||
### 2.6 刷机
|
||||
|
||||
大多数情况下,Android系统的玩机爱好者,通常会使用傻瓜式的一键刷机工具,例如刷机大师、刷机精灵、奇兔等工具来刷机。这种刷机方式属于软刷(软件刷机);除此之外,还有第一章中介绍到的线刷和卡刷。不论刷机的方式是什么,他们最终都是对刷机包进行处理,然后将ROM文件写入对应的分区,替换掉原始文件。下面,将介绍如何进行线刷和卡刷。
|
||||
|
||||
#### 2.7.1 线刷
|
||||
#### 2.6.1 线刷
|
||||
|
||||
上面编译操作完成后,在目录`aosp12_out/target/product/blueline/`中能看到若干个后缀为`img`的镜像文件。笔者的输出路径`aosp12_out`是手动指定的输出目录,如果读者没有设置,这些文件默认存放在`aosp12/out/target/product/blueline/`目录下,目录中的`blueline`是对应编译的设备的代号,如果你是其他型号的机器,就需要在对应的其它代号目录下查看。
|
||||
|
||||
@ -551,7 +549,7 @@ fastboot flash vendor ./vendor.img
|
||||
fastboot reboot
|
||||
```
|
||||
|
||||
#### 2.7.2 卡刷
|
||||
#### 2.6.2 卡刷
|
||||
|
||||
前面步骤编译出来的是系统线刷包,如果需要卡刷包,就需要使用`make otapackage`命令来进行编译。注意这种方式需要预先编译好线刷包。具体的编译方法如下。
|
||||
|
||||
@ -599,7 +597,7 @@ fastboot reboot fastboot
|
||||
2、twrp(TODO:这里待补充)
|
||||
|
||||
|
||||
### 2.8 源码的开发环境搭建
|
||||
### 2.7 源码的开发环境搭建
|
||||
|
||||
Android系统是一个非常庞大的工程,需要采用合适的编辑器或IDE来阅读与修改代码。如果改动不多,使用`vscode`导入工作区即可开始修改代码。`vscode`的智能提示和跳转相对IDE较为简陋,如果想要更加友好的开发体验,可以选择将源码导入`Android Studio`中编辑java部分代码,导入`Clion`中编辑`native`部分代码。下面介绍如何将源码导入`Android Studio`。
|
||||
|
||||
@ -704,7 +702,7 @@ add_subdirectory(system/core/lmkd/lmkd-arm64-android)
|
||||
|
||||
配置好`cmake`工程后,使用`clion`打开项目,选择配置好的`CMakeLists.txt`文件所在的目录`out/development/ide/clion`。导入成功后,修改工程的根目录,`Tools->Cmake->Change Project Root`,然后选择源码根目录即可。
|
||||
|
||||
## 2.9 gitlab配合repo管理源码
|
||||
## 2.8 gitlab配合repo管理源码
|
||||
|
||||
将源码导入idea中后,已经可以正常的开始修改源码了。在日常的项目开中,需要考虑到源码的管理,便于随时能够查看自己的修改,切换不同的分支进行开发。这样一个巨大的项目,一个月后,再想要查找当时修改的逻辑,就非常困难了。如果你是个人开发,并且修改的逻辑不是特别复杂,或者是刚开始学习,那么可以选择跳过这个部分内容。
|
||||
|
||||
@ -1236,7 +1234,7 @@ repo sync -j8
|
||||
|
||||
到这里就完成了`gitlab`源码管理AOSP源码开发了。最后如何使用`git`提交和查看历史记录我就不在这里叙述了。
|
||||
|
||||
### 2.10 小结
|
||||
### 2.9 小结
|
||||
|
||||
本章主要讲述了如何从零开始,在Windows系统与Ubuntu系统中,搭建一个编译Android源码的环境。在环境搭建好后,讲解了如何选择合适的需要开发修改的AOSP版本,在系统版本确定后,讲解了拉取代码并编译的流程;接着,讲解了为系统集成自己编译的内核代码,然后将编译好的系统镜像,尝试多种方式刷入测试手机设备中。
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user