AOSP 编译&刷机

AOSP 编译&刷机

文章参考 AOSP 编译和烧写

文章目录

  • AOSP 编译&刷机
    • 1. 简介
    • 2. 准备
      • 2.1 编译系统准备
      • 2.2 源码下载
        • 2.2.1 查找驱动
        • 2.2.2 查找分支
        • 2.2.3 下载源码
        • 2.2.4 放置驱动
        • 2.2.5 集成 opengapps (可选)
          • 2.2.5.1 安装工具
          • 2.2.5.2 添加地址到 repo 仓库
          • 2.2.5.3 添加变体版本和预置opengapps
    • 3. 编译
      • 3.1 环境变量
      • 3.2 设置构建
      • 3.3 编译源码
    • 4. 刷录镜像
      • 4.1 刷机
      • 4.2 可能遇到的问题

1. 简介

自己喜欢折腾, 想要自己修改源代码, 编译并刷机.

硬件: Pixel 3A
源码: Android 10.0
系统: Ubuntu 16.04

2. 准备

Google 为我们操碎了心, 为我们提供了一系列的教程供我们学习

  • https://source.android.com/setup/build/initializing
  • https://source.android.com/setup/create/coding-tasks
  • https://source.android.com/setup/build/downloading
  • https://source.android.com/setup/build/building
  • https://source.android.com/setup/build/building-kernels

2.1 编译系统准备

https://source.android.com/setup/build/initializing

自己准备一台 Ubuntu 16.04 电脑, 可以在实体电脑上, 也可以开启一个虚拟机, 建议内存至少12GB, 不然可能会因为内存不够出现编译出错的情况.

安装一些必要的工具

sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip

2.2 源码下载

2.2.1 查找驱动

https://developers.google.com/android/drivers

不同的设备驱动有所不同, 国内手机厂商的驱动多是不开放的, 可以尝试去上述网站找找看, 以 Pixel 3A 手机为例.

AOSP 编译&刷机_第1张图片

2.2.2 查找分支

https://source.android.com/setup/start/build-numbers#source-code-tags-and-builds

根据 2.2.1 查到的 Build 代号, 在上述网站找到相应的分支名, 有可能找不到这个代号, 需要在网页右上角将语言改为英语.

AOSP 编译&刷机_第2张图片

2.2.3 下载源码

https://source.android.com/setup/build/downloading

源码根据官方教程下载既可, 但因为网络原因不能正常访问, 建议访问下面的网站下载:

  1. https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
  2. https://mirror.tuna.tsinghua.edu.cn/help/AOSP/

从 Google 官网下载步骤如下:

  1. 安装 Repo 工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  1. 下载 AOSP 源码
mkdir -p /var/local/android/aosp
cd /var/local/android/aosp
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r10
repo sync -j4
repo start android-10.0.0_r10 --all

2.2.4 放置驱动

需要将 2.2.1 步骤驱动下载并解压到源码目录下, 驱动会放置到源码 vendor 目录下, 这里以 Pixel 3A 为例.

  1. 下载并解压, 注意: 不同的设备驱动下载地址不一样, 这里以 Pixel 3A 为例
cd /var/local/android/aosp
curl https://dl.google.com/dl/android/aosp/qcom-sargo-qp1a.191105.003-77f22f98.tgz -o qcom-sargo-qp1a.191105.003-77f22f98.tgz
curl https://dl.google.com/dl/android/aosp/google_devices-sargo-qp1a.191105.003-dd53ee45.tgz -o google_devices-sargo-qp1a.191105.003-dd53ee45.tgz
tar -xvf qcom-sargo-qp1a.191105.003-77f22f98.tgz
tar -xvf google_devices-sargo-qp1a.191105.003-dd53ee45.tgz
  1. 执行驱动预置操作, 需要浏览协议(按空格)并在结尾处输入"I ACCEPT"
./extract-qcom-sargo.sh
./extract-google_devices-sargo.sh

2.2.5 集成 opengapps (可选)

参考开源仓库 Opengapps

2.2.5.1 安装工具

安装 Opengapps 所需工具

sudo apt-get instal git-lfs lunzip
2.2.5.2 添加地址到 repo 仓库

编辑.repo/manifest.xml文件, 将 opengapps 地址添加进去

  <remote name="opengapps" fetch="https://github.com/opengapps/"/>
  <remote name="gitlab" fetch="https://gitlab.opengapps.org/opengapps/"/>

  <project path="vendor/opengapps/build" name="aosp_build" revision="master" remote="opengapps"/>

  <project path="vendor/opengapps/sources/all" name="all" clone-depth="1" revision="master" remote="gitlab"/>

  
  <project path="vendor/opengapps/sources/arm" name="arm" clone-depth="1" revision="master" remote="gitlab"/>
  <project path="vendor/opengapps/sources/arm64" name="arm64" clone-depth="1" revision="master" remote="gitlab"/>

  <project path="vendor/opengapps/sources/x86" name="x86" clone-depth="1" revision="master" remote="gitlab"/>
  <project path="vendor/opengapps/sources/x86_64" name="x86_64" clone-depth="1" revision="master" remote="gitlab"/>
2.2.5.3 添加变体版本和预置opengapps

编辑vendor/google_devices/bonito/proprietary/device-vendor.mk文件

stoke 可以替换, 可以在 package types 找到

GAPPS_VARIANT := stock
$(call inherit-product, vendor/opengapps/build/opengapps-packages.mk)

3. 编译

https://source.android.com/setup/build/building

3.1 环境变量

编译时需要先设置环境变量以及 shell 函数, 这些环境在源码 build/envsetup.sh 已经写好

cd /var/local/android/aosp
. build/envsetup.sh

3.2 设置构建

需要使用 lunch 命令设置构建类型, 执行命令后会列出构建类型的列表, 以 Pixel 3A 为例, 选择 aosp_sargo-userdebug, 可以直接输入编号

具体的编译类型可以参考 https://source.android.com/setup/build/building#choose-a-target

lunch

3.3 编译源码

执行 make

make -j8

4. 刷录镜像

4.1 刷机

编译完成后, 会在 out 目录下生成 img 镜像文件, 刷机就是刷入这些镜像文件.

需要设置两个环境变量

  • PATH: 需要将新生成的 fastboot 设置到 PATH 中, 避免自带的 fastboot 版本太低

  • ANDROID_PRODUCT_OUT: 将生成的镜像 img 路径设置到 ANDROID_PRODUCT_OUT 中

export ANDROID_PRODUCT_OUT=/var/local/android/aosp/out/target/product/sargo
export PATH=/var/local/android/aosp/out/host/linux-x86/bin:${PATH}
adb reboot bootloader
fastboot flashall -w
fastboot reboot

4.2 可能遇到的问题

https://developers.google.com/android/images

刷机时可能需要先将手机解锁, 如果遇到这种情况, 执行下面的步骤, 然后根据手机指示解锁, 再执行 4.1 刷机步骤.

如果依然不能解决, 或者想刷回 Google 的系统, 可以从上述网站刷回

adb reboot bootloader
fastboot flashing unlock

你可能感兴趣的:(Android)