必须达到或超出以下硬件要求:
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jre
注意: 如果系统已经安装了jdk,多个JDK版本需要配置和切换。Ubuntu多个JDK版本配置和切换
安装git:
sudo apt-get install git
配置git:
git config --global user.name xxx
git config --global user.email [email protected]
sudo apt-get install python3.7
直接使用apt-get安装python3.7失败。改为手动安装:
python 官网找到python3.7的下载地址:Python3.7.1
https://www.python.org/ftp/python/python3.7.1/Python-3.7.1.tgz
下载安装包:
wget https://www.python.org/ftp/python/python3.7.1/Python-3.7.1.tgz
bin/
目录,并且它包含在你的路径中:mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
创建用于存放源码的目录:
mkdir aosp
进入到 aosp
目录,初始化仓库,并指定版本:android-11.0.0_r17
cd aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r17
下载Android源代码树:
repo sync
如果只是编译运行于虚拟器,则不需要下载设备驱动文件。我们使用真机调试(这里使用的是Pixel 3a),所以需要下载对应源码分支真机驱动,并解压到源码目录一起编译。
代号、标记和 Build 号
下载的代码分支为:android-11.0.0_r17,对应的build ID为: RP1A.201105.002,
下载样机对应Android分支的驱动文件:
Google驱动程序
执行解压后的 .sh
文件。
envsetup.sh
脚本初始化环境:source build/envsetup.sh
*说明:
如果之前已经编译过,重新编译需要清除缓存和之前生成的文件
make clobber // 清除缓存
lunch product_name-build_variant
会选择 product_name
作为需要构建的产品,并选择 build_variant
作为需要构建的变体,然后将这些选择存储在环境中,以便供后续对 m 和其他类似命令的调用读取。设备对应代号
我们使用Pixel 3a真机调试,其对应代号:sargo,编译配置:aosp_sargo-userdebug
lunch aosp_sargo-userdebug
make -j4 2>&1 | tee build.log
创建用于存放kernel的目录:
mkdir kernel
进入到 kernel
目录,初始化仓库,并指定分支:
cd kernel
repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-bonito-4.9-android11
设备对应内核分支
下载kernel源代码:
repo sync
编译内核:
./build/build.sh
将内核合入image:
export TARGET_PREBUILT_KERNEL=/home/lxy/kernel/out/android-msm-pixel-4.9/private/msm-google/arch/arm64/boot/Image.lz4-dtb
编译:
cd ~/aosp
make bootimage
fastboot
和 adb
,如果你没有 fastboot
和 adb
,可以使用常规构建系统进行构建。make fastboot adb
只有在引导加载程序允许的情况下,您才可以刷写自定义系统。但请注意,引导加载程序默认处于锁定状态。您可以解锁引导加载程序,但这样做会导致系统出于隐私原因而删除用户数据。解锁之后,系统会清空设备上的所有数据,即应用中的私人数据以及可通过 USB 访问的共享数据(包括照片和影片)。请先备份设备上的所有重要文件,然后再尝试解锁引导加载程序。
自 2014 年以来发布的所有 Nexus 和 Pixel 设备(从 Nexus 6 和 Nexus 9 开始)都内置有恢复出厂设置保护功能,需要执行多个步骤才能解锁引导加载程序。
如需在设备上启用 OEM 解锁功能,请执行以下操作:
在“设置”中,点按关于手机,然后点按版本号七次。
a. 当看到“您已处于开发者模式”这条消息后,点按返回按钮。
b. 点按开发者选项,然后启用 OEM 解锁和 USB 调试(如果 OEM 解锁处于停用状态,请连接到互联网,以便设备可以至少检入一次。如果“OEM 解锁”仍处于停用状态,说明设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)
重新启动进入引导加载程序,然后使用 fastboot 解锁。
fastboot flashing unlock
fastboot
模式:adb reboot bootloader
fastboot
模式后,运行以下命令:fastboot flashall -w
-w
选项会擦除设备上的 /data
分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。
第一次需要刷入所有img文件,之后只需要刷入修改模块的img文件,如:
fastboot flash boot out/target/product/sargo/boot.img
fastboot flash dtbo /home/lxy/kernel/out/android-msm-pixel-4.9/private/msm-google/arch/arm64/boot/dtbo.img
fastboot boot /home/lxy/kernel/out/android-msm-pixel-4.9/private/msm-google/arch/arm64/boot/Image.lz4-dtb
.ko
文件:remount
后才能成功推入,否则会推入失败,同时remount
后还需要重启设备,才能生效。adb root
adb remount
adb push /home/lxy/kernel/out/android-msm-pixel-4.9/dist/*.ko /vendor/lib/modules/