Ubuntu18.04 编译Android 10源码 并烧录源码到pixel3的避坑指南
- 实验环境
- 下载Android源码树
- 在pixel3上安装手机驱动版本
- 编译Android源码
- Android Studio导入Android系统源码
- 源码导入Android Studio过慢
- 在pixel3上刷入刚刚编译好的镜像文件
- 避坑
- 最终效果图
实验环境
- Ubuntu18.04
- pixel3
下载Android源码树
- 下载repo工具:
// 下载repo工具
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
- 安装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// 指定分支
- 下载Android源码树
repo sync
在pixel3上安装手机驱动版本
- 在官网上找到与手机型号以及安卓源码Build号相对应的驱动版本
这里我下载的源码是android-10.0.0_r1,因此它的Build号为QP1A.190711.019 - 再到驱动官网上找到对应的驱动信息并下载下来
- 解压到刚刚下载下来的源码根目录下
- 在命令行中输入如下代码,然后按回车来阅读协议,但是由于协议过长,可以按ctrl+c进行中断,在此会提示需要输入I ACCEPT,输入完毕后便可以提取镜像了
./extract-google_devices-blueline.sh
./extract-qcom-blueline.sh
- 提取成功后会在根目录下生成vendor目录
编译Android源码
source build/envsetup.sh
lunch aosp_blueline-userdebug
make -j12
Android Studio导入Android系统源码
- 编译成功后执行如下命令进行编译源码idegen模块及生成AS配置建(*ipr):
mmm development/tools/idegen/
development/tools/idegen/idegen.sh
完成后就会在根目录下看到三个新文件:
android.iml(用于记录项目所包含的module,依赖关系,sdk版本)
android.ipr(工程的具体配置,代码以及依赖的lib信息) android.iws(个人的配置信息)
- 将android.iml android.ipr权限改成777
sudo chmod 777 android.iml
sudo chmod 777 android.ipr
- 打开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上刷入刚刚编译好的镜像文件
- 将pixel3连接上电脑,进入bootloader模式
adb reboot bootloader
- 解锁手机
fastboot flashing unlock
// (1) 方法一:在bootloader模式下输入
fastboot reboot fastboot
// (2)方法二:返回Android系统,输入以下命令
adb reboot fastboot
- 命令行里输入以下命令
source ./build/envsetup.sh
- 命令行里输入以下命令
lunch aosp_blueline-userdebug
- 进入生成的product路径,在命令行里输入以下命令
cd $ANDROID_PRODUCT_OUT
- 烧录编译好的镜像文件,在命令行中输入以下命令
fastboot flashall -w
避坑
- 在选择刷机的手机的时候,不要买pixel2 美版,它的bootloader无法解锁,若要刷pixel2手机需要购买欧版的
- 如果在输入镜像之前一定要做在pixel3上刷入刚刚编译好的镜像文件3,4步,不然在刷入镜像文件的时候会遇到"Value too large for defined data type"
- 一定要在fastbootd模式下刷机,不然在刷到System会遇到错误:‘Partition should be flashed in fastbootd’
- :假如手机原先的系统是android 11的,如果将Android 10.0的镜像文件烧录到设备中会烧录失败,。建议先去官网烧录编译的源码分支的底包(factory images),然后再去烧录Android 10.0的镜像文件
- 如果在fastboot flashall -w输入结束后,出现“wait for any devices”,那么在pixel3上刷入刚刚编译好的镜像文件这些步骤需要在root权限下执行。