mirror of
https://github.com/feicong/rom-course.git
synced 2025-05-06 10:31:18 +00:00
更新2.3
This commit is contained in:
parent
6d071a7124
commit
f349605d9c
@ -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`。
|
||||
|
||||

|
||||
|
||||
第一个文件`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 模块编译
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user