Ubuntu 16.04下载编译Android11源码

Ubuntu 16.04下载编译Android11源码

  • Ubuntu 16.04下载编译Android11源码
    • 1. 硬件要求
    • 2. 设置Linux构建环境
      • 1. 安装所需的软件包
      • 2. 安装Open JDK1.8
      • 3. 安装git
      • 4. 安装Python3.7
    • 3. 源码下载
      • 1. 下载repo
      • 2. 下载Android11 源码
      • *3. 获取专有二进制文件
    • 4. 编译 Android
    • 5. kernel下载编译
    • 6. 合入内核,重新编译
    • 7. 刷入设备
      • 1. 构建 `fastboot` 和 `adb`,如果你没有 `fastboot` 和 `adb`,可以使用常规构建系统进行构建。
      • 2. 解锁引导加载程序
      • 3. 刷写设备

1. 硬件要求

必须达到或超出以下硬件要求:

  • 如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
  • 如果要检出代码,至少需要 250 GB 可用磁盘空间;如果要进行构建,则还需要 150 GB。如果要进行多次构建,则需要更多空间。
  • 至少需要 16 GB 的可用 RAM/交换空间。

2. 设置Linux构建环境

1. 安装所需的软件包

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

2. 安装Open JDK1.8

sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-8-jre

注意: 如果系统已经安装了jdk,多个JDK版本需要配置和切换。Ubuntu多个JDK版本配置和切换

3. 安装git

安装git:

sudo apt-get install git

配置git:

git config --global user.name xxx
git config --global user.email [email protected]

4. 安装Python3.7

sudo apt-get install python3.7

直接使用apt-get安装python3.7失败。改为手动安装:

  1. python 官网找到python3.7的下载地址:Python3.7.1
    https://www.python.org/ftp/python/python3.7.1/Python-3.7.1.tgz

  2. 下载安装包:

wget https://www.python.org/ftp/python/python3.7.1/Python-3.7.1.tgz
  1. 解压安装,参考手动安装python3.7

3. 源码下载

1. 下载repo

  1. 确保你的主目录中有一个 bin/ 目录,并且它包含在你的路径中:
mkdir ~/bin
PATH=~/bin:$PATH
  1. 下载 Repo 启动器,并确保它可执行:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2. 下载Android11 源码

创建用于存放源码的目录:

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

*3. 获取专有二进制文件

如果只是编译运行于虚拟器,则不需要下载设备驱动文件。我们使用真机调试(这里使用的是Pixel 3a),所以需要下载对应源码分支真机驱动,并解压到源码目录一起编译。

代号、标记和 Build 号

下载的代码分支为:android-11.0.0_r17,对应的build ID为: RP1A.201105.002,
在这里插入图片描述Ubuntu 16.04下载编译Android11源码_第1张图片
下载样机对应Android分支的驱动文件:
Google驱动程序
Ubuntu 16.04下载编译Android11源码_第2张图片

解压驱动文件到源码目录:
Ubuntu 16.04下载编译Android11源码_第3张图片

执行解压后的 .sh文件。

4. 编译 Android

  1. 设置环境,使用 envsetup.sh 脚本初始化环境:
source build/envsetup.sh

*说明:
如果之前已经编译过,重新编译需要清除缓存和之前生成的文件

make clobber // 清除缓存
  1. 选择目标:
    使用 lunch 选择要构建的目标。lunch product_name-build_variant 会选择 product_name 作为需要构建的产品,并选择 build_variant 作为需要构建的变体,然后将这些选择存储在环境中,以便供后续对 m 和其他类似命令的调用读取。

设备对应代号
Ubuntu 16.04下载编译Android11源码_第4张图片
我们使用Pixel 3a真机调试,其对应代号:sargo,编译配置:aosp_sargo-userdebug

lunch aosp_sargo-userdebug

Ubuntu 16.04下载编译Android11源码_第5张图片

  1. 编译,并把log保存到build.log文件。
make -j4 2>&1 | tee build.log

Ubuntu 16.04下载编译Android11源码_第6张图片

5. kernel下载编译

创建用于存放kernel的目录:

mkdir kernel

进入到 kernel目录,初始化仓库,并指定分支:

cd kernel
repo init -u https://android.googlesource.com/kernel/manifest -b android-msm-bonito-4.9-android11

设备对应内核分支

Ubuntu 16.04下载编译Android11源码_第7张图片

下载kernel源代码:

repo sync

编译内核:

./build/build.sh

6. 合入内核,重新编译

将内核合入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

7. 刷入设备

1. 构建 fastbootadb,如果你没有 fastbootadb,可以使用常规构建系统进行构建。

make fastboot adb

2. 解锁引导加载程序

只有在引导加载程序允许的情况下,您才可以刷写自定义系统。但请注意,引导加载程序默认处于锁定状态。您可以解锁引导加载程序,但这样做会导致系统出于隐私原因而删除用户数据。解锁之后,系统会清空设备上的所有数据,即应用中的私人数据以及可通过 USB 访问的共享数据(包括照片和影片)。请先备份设备上的所有重要文件,然后再尝试解锁引导加载程序。

自 2014 年以来发布的所有 Nexus 和 Pixel 设备(从 Nexus 6 和 Nexus 9 开始)都内置有恢复出厂设置保护功能,需要执行多个步骤才能解锁引导加载程序。

如需在设备上启用 OEM 解锁功能,请执行以下操作:

  1. 在“设置”中,点按关于手机,然后点按版本号七次。
    a. 当看到“您已处于开发者模式”这条消息后,点按返回按钮。
    b. 点按开发者选项,然后启用 OEM 解锁USB 调试(如果 OEM 解锁处于停用状态,请连接到互联网,以便设备可以至少检入一次。如果“OEM 解锁”仍处于停用状态,说明设备可能已被运营商锁定 SIM 卡,系统无法解锁引导加载程序。)

  2. 重新启动进入引导加载程序,然后使用 fastboot 解锁。

fastboot flashing unlock
  1. 在屏幕上确认解锁。

3. 刷写设备

  1. 在启动时按住相应的组合键或使用以下命令使设备进入 fastboot 模式:
adb reboot bootloader
  1. 在设备处于 fastboot 模式后,运行以下命令:
fastboot flashall -w

-w 选项会擦除设备上的 /data 分区;该选项在您第一次刷写特定设备时非常有用,但在其他情况下则没必要使用。

第一次需要刷入所有img文件,之后只需要刷入修改模块的img文件,如:

fastboot flash boot out/target/product/sargo/boot.img
  1. 刷入内核:
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
  1. 推入.ko 文件:
    提示: 需要先对设备进行remount后才能成功推入,否则会推入失败,同时remount后还需要重启设备,才能生效。
adb root 
adb remount

adb push /home/lxy/kernel/out/android-msm-pixel-4.9/dist/*.ko /vendor/lib/modules/

你可能感兴趣的:(Android,android,系统编译,源码下载,Android11,Ubuntu16.04)