Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南

  • 实验环境
  • 下载Android源码树
  • 在pixel3上安装手机驱动版本
  • 编译Android源码
  • Android Studio导入Android系统源码
  • 源码导入Android Studio过慢
  • 在pixel3上刷入刚刚编译好的镜像文件
  • 避坑
  • 最终效果图


实验环境

  1. Ubuntu18.04
  2. pixel3

下载Android源码树

  1. 下载repo工具:
// 下载repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
  1. 安装Repo后,设置自己的客户端用来访问代码库: 这里需要自己注册一个google帐号
(1)创建一个文件夹用来存放源码
mkdir Pixel3
cd Pixel3
(2)使用google帐号和真实姓名去配置Git
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
(3)运行repo init 获取最新版本代码或者指定分支
repo init -u https://android.googlesource.com/platform/manifest // 获取最新源码
repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r1// 指定分支
  1. 下载Android源码树
repo sync

在pixel3上安装手机驱动版本

  1. 官网上找到与手机型号以及安卓源码Build号相对应的驱动版本
    这里我下载的源码是android-10.0.0_r1,因此它的Build号为QP1A.190711.019
  2. android源码 编译 Android源码编译烧烤Pixel_命令行

  3. 再到驱动官网上找到对应的驱动信息并下载下来
  4. android源码 编译 Android源码编译烧烤Pixel_android_02

  5. 解压到刚刚下载下来的源码根目录下
  6. 在命令行中输入如下代码,然后按回车来阅读协议,但是由于协议过长,可以按ctrl+c进行中断,在此会提示需要输入I ACCEPT,输入完毕后便可以提取镜像了
./extract-google_devices-blueline.sh
./extract-qcom-blueline.sh

android源码 编译 Android源码编译烧烤Pixel_Android_03

  1. 提取成功后会在根目录下生成vendor目录

编译Android源码

source build/envsetup.sh
lunch aosp_blueline-userdebug
make -j12

Android Studio导入Android系统源码

  1. 编译成功后执行如下命令进行编译源码idegen模块及生成AS配置建(*ipr):
mmm development/tools/idegen/
development/tools/idegen/idegen.sh

完成后就会在根目录下看到三个新文件:
android.iml(用于记录项目所包含的module,依赖关系,sdk版本)
android.ipr(工程的具体配置,代码以及依赖的lib信息) android.iws(个人的配置信息)

  1. 将android.iml android.ipr权限改成777
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
  1. 打开Android studio,导入已有项目,选择根目录下的.ipr文件

源码导入Android Studio过慢

sudo vim /etc/sysctl.conf

进入文件后按i进入编辑模式

在文件最后加上

fs.inotify.max_user_watches = 524288

输入完这段话以后按Esc进入normal模式,再按:然后输入wq(表示写入保存)

生效文件

sudo sysctl -p –system // 生效文件

在pixel3上刷入刚刚编译好的镜像文件

  1. 将pixel3连接上电脑,进入bootloader模式
adb reboot bootloader
  1. 解锁手机
fastboot flashing unlock

  1. android源码 编译 Android源码编译烧烤Pixel_android_04


// (1) 方法一:在bootloader模式下输入
fastboot reboot fastboot
// (2)方法二:返回Android系统,输入以下命令
adb reboot fastboot
  1. 命令行里输入以下命令
source ./build/envsetup.sh
  1. 命令行里输入以下命令
lunch aosp_blueline-userdebug
  1. 进入生成的product路径,在命令行里输入以下命令
cd  $ANDROID_PRODUCT_OUT
  1. 烧录编译好的镜像文件,在命令行中输入以下命令
fastboot flashall -w

android源码 编译 Android源码编译烧烤Pixel_android_05

避坑

  1. 在选择刷机的手机的时候,不要买pixel2 美版,它的bootloader无法解锁,若要刷pixel2手机需要购买欧版的
  2. 如果在输入镜像之前一定要做在pixel3上刷入刚刚编译好的镜像文件3,4步,不然在刷入镜像文件的时候会遇到"Value too large for defined data type"
  3. 一定要在fastbootd模式下刷机,不然在刷到System会遇到错误:‘Partition should be flashed in fastbootd’
  4. :假如手机原先的系统是android 11的,如果将Android 10.0的镜像文件烧录到设备中会烧录失败,。建议先去官网烧录编译的源码分支的底包(factory images),然后再去烧录Android 10.0的镜像文件
  5. 如果在fastboot flashall -w输入结束后,出现“wait for any devices”,那么在pixel3上刷入刚刚编译好的镜像文件这些步骤需要在root权限下执行。

最终效果图

android源码 编译 Android源码编译烧烤Pixel_Android_06