章前语调整第一章、第二章

This commit is contained in:
dqzg12300 2023-04-25 20:27:36 +08:00
parent f1335e70dd
commit b5c92ebd71
2 changed files with 20 additions and 20 deletions

View File

@ -1,5 +1,7 @@
# 第1章 引言
`Android`系统并不是一个新兴的技术,如今`Android`已经占领各大移动端市场,不单单是手机市场,还有许多智能设备也是使用的`Android`系统来驱动,例如智能电视、`Android`机顶盒、车载娱乐系统、智能手表、智能家居等等,由于`Android`的灵活性和开放性,让其可定制性在各类设备中得到充分的利用。开发者可以根据自身业务的需求,自由的改造`Android` 系统。在这一章中,将简单的介绍`Android`系统和定制。通过这一章的学习,让读者对于`Android`系统中的常见名词有一个简单的了解。
## 1.1 AOSP是什么
Android操作系统是如今最流行使用最广的智能手机操作系统它的发展受到广大厂商和用户的全力支持而Android操作系统的开源使它可以被任何人定制化从而满足各类厂商和不同需求的用户。

View File

@ -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、WSLWindows 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
![image-20230103220838404](.\images\image-20230103220838404.png)
#### 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、twrpTODO这里待补充
### 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版本在系统版本确定后讲解了拉取代码并编译的流程接着讲解了为系统集成自己编译的内核代码然后将编译好的系统镜像尝试多种方式刷入测试手机设备中。