更新2.3

This commit is contained in:
feiocng 2023-03-06 12:31:46 +08:00
parent 6d071a7124
commit f349605d9c

View File

@ -160,7 +160,9 @@ pip install pytest
### 2.3.1 编译
上面知道了我们需要的目标分支接下来要拉取代码。repo是一个以git为基础包装的代码版本管理工具内部是由python脚本构成的对git命令进行包装主要为了方便管理大型的项目使用repo可以非常方便的拉取对应的分支节点。下面我们开始拉取代码。
上面知道了需要的目标分支,接下来的步骤是拉取代码。
AOSP官方使用`repo`管理项目。`repo`是一个以`git`为基础包装的代码版本管理工具,内部是由`python`脚本构成的,对`git`命令进行包装,方便管理大型的项目。下面开始拉取代码。
```
// 安装git
@ -197,7 +199,7 @@ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-12.0
repo sync -c -j8
```
同步代码`repo sync -c -j8`的命令其中`-c`表示只同步当前分支代码,可以提高同步速度,而`-j`是设置同步使用的线程数这里我使用了8条线程,但并不是线程越多速度越快而是根据cpu的核心使用最合理的线程数才能达到最佳的并发效果。
同步代码使用`repo sync -c -j8`的命令其中`-c`表示只同步当前分支代码,可以提高同步速度,而`-j`是设置同步使用的线程数这里我使用了8个线程,并不是线程越多速度越快而是根据cpu的核心数,使用最合理的线程数才能达到最佳的并发效果。
```
// 查看可用cpu数量我的环境显示为16
@ -210,7 +212,7 @@ repo sync -c -j16
repo sync -c -j$(nproc --all)
```
代码同步完成后,会提示`Success`,如果失败了,就重新拉取即可,多拉取几次后,基本都能同步成功。接下来我们开始安装编译的底层依赖。
代码同步完成后会提示`Success`,如果失败了,就重新拉取即可,多拉取几次后,基本都能同步成功。接下来开始安装编译的底层依赖。
```
// AOSP编译的相关依赖安装
@ -220,7 +222,7 @@ sudo apt-get install -y git-core gnupg flex bison build-essential \
fontconfig libncurses5 procps rsync libsqlite3-0
```
依赖安装完成后,我们再进行一个细节调整,由于我们经常需要备份代码,将整个源码进行打包备份,但是编译出来的输出目录`out`的体积非常庞大,所以我备份时会选择移走`out`目录,或者干脆删除掉,这样非常的麻烦,所以我会选择直接修改编译输出的目录。通过设置环境变量`OUT_DIR`就可以调整编译结果的输出目录了。
注意编译AOSP需要大量的磁盘空间通常300G的空间足够存放代码与编译输出的结果。如果你希望将输出的结果存放在其它目录。这一点通过设置`OUT_DIR`环境变量来调整编译结果的输出目录。如下所示,
```
vim ./build/envsetup.sh
@ -228,13 +230,13 @@ vim ./build/envsetup.sh
export OUT_DIR=~/android_src/aosp12_out
```
在开始编译前,我们还需要准备对应设备的驱动,根据我们前面选择的版本号`SP1A.210812.016.A1`,在官网地址:`https://developers.google.com/android/drivers`中找到对应的版本号,并且可以看到`Pixel 3`的手机对应的代号是`blueline`
在开始编译前,还需要准备对应设备的驱动,根据前面选择的版本号`SP1A.210812.016.A1`,在官网地址:`https://developers.google.com/android/drivers`中找到对应的版本号,并且可以看到`Pixel 3`的手机对应的代号是`blueline`
![image-20230103232052738](.\images\image-20230103232052738.png)
第一个文件`Vendor`是用来存储厂商特定的文件比如设备驱动程序。Android穷的那个时会根据提供的这些设备驱动来正确的加载硬件。这个文件通常由设备厂商提供。如果你成功编译Android后输出目录缺少vendor.img文件那么你就需要检查下是否忘记导入对应型号的设备驱动了。
第一个文件`Vendor`是用来存储厂商特定的文件比如设备驱动程序。Android驱动会根据提供的这些设备驱动来正确的加载硬件。这个文件通常由设备厂商提供。如果你成功编译Android后输出目录缺少vendor.img文件那么你就需要检查下是否忘记导入对应型号的设备驱动了。
第二个文件是高通提供的相关设备驱动程序比如GPS摄像头传感器等
第二个文件是高通提供的相关设备驱动程序比如GPS摄像头传感器等设备的闭源二进制文件
点击`Link`下载然后将下载的文件拷贝到Android源码根目录下。然后解压并导出相关驱动文件。
@ -252,8 +254,7 @@ tar -xvf google_devices-blueline-sp1a.210812.016.a1-d10754e0.tgz
导入设备驱动完成后,准备工作基本完成,可以开始编译源码了。
```
// 初始化环境,执行后会导入多个命令,辅助我们进行编译。
// 这里也可以使用. build/envsetup.sh 是同样的效果
// 初始化构建环境参数
source ./build/envsetup.sh
// 选择编译的版本
@ -280,17 +281,17 @@ Which would you like? [aosp_arm-eng]
make -j$(nproc --all)
```
在上面选择版本中可以看到`aosp_arm-eng``aosp_arm64-eng`的选项,这两个是模拟器使用的版本。而模拟器使用的版本是可以不需要导入设备驱动文件的。如果在`lunch`的菜单中没有看到你要编译的版本,并且直接`lunch aosp_blueline-userdebug `也提示错误,可能是没有成功导入驱动文件,或者下载的驱动文件不对
在上面选择版本中可以看到`aosp_arm-eng``aosp_arm64-eng`的选项,这两个是模拟器使用的版本。而模拟器使用的版本是可以不需要导入设备驱动文件的。如果在`lunch`的菜单中没有看到你要编译的版本,并且直接`lunch aosp_blueline-userdebug `也提示错误,可能是没有成功导入驱动文件,或者下载的驱动文件错误
同一个代号的编译有三种编译版本选择。分别如下:
1、`aosp_blueline-user` 一般是默认的编译环境,主要是作为发布版本,这种版本编译的环境会默认开启大多数的安全机制,比如`ro.secure`值为1`ro.debuggable`值为0需要我们自行用第三方工具获取root权限。我们日常使用的机子就是属于user环境的
1、`aosp_blueline-user` 为用户版本,一般是默认的编译版本。主要用于发布版本,这种版本编译的环境会默认开启大多数的安全机制,比如`ro.secure`值为1`ro.debuggable`值为0需要自行用第三方工具获取root权限。厂商设备出厂时设备通常会编译为user版本
2、`aosp_blueline-userdebug` 通常用于测试和调试Android系统会启动一些调试工具例如默认开启`adb`调试,`ro.debuggable`值为1系统自带root权限等。
2、`aosp_blueline-userdebug` 为用户调试版本,通常用于测试和调试Android系统会启动一些调试工具例如默认开启`adb`调试,`ro.debuggable`值为1系统自带root权限等。
3、`aosp_blueline-eng` 同样也是用于测试和调试的环境,但是`userdebug`要更加极端,会禁用一些安全机制,比如签名验证,关闭一些编译优化等。
3、`aosp_blueline-eng` 为工程版本,同样也是用于测试和调试的环境,但是系统限制比`userdebug`要更加少,会禁用一些安全机制,比如签名验证,关闭一些编译优化等。
第一次完整编译非常的漫长,我的电脑耗时2个小时成功编译。编译成功后我们检查一下输出的文件。
第一次完整编译非常的漫长,笔者的电脑耗时约2个小时成功编译。编译成功后检查一下输出的文件。
```
// 查看输出目录的所有镜像文件
@ -318,7 +319,7 @@ vbmeta.img
vendor.img
```
确定有编译出`vendor.img、system.img、boot.img`镜像文件,就说明编译成功了。
确定有编译出`vendor.img、system.img、boot.img`等镜像文件,就说明编译成功了。
### 2.4 模块编译