一、前言
本文不涉及源码下载过程,主要记录自己的编译源码过程及其中遇到的问题,并最终运行在真机上。
二、预置环境
1、ubuntu16.04,8G内存,2T硬盘
2、手机真机nexus 5x, nexus 5
3、编译源码版本为android-7.1.2_r18和android-4.4_r1两个
版本选择参考链接:https://source.android.google.cn/setup/start/build-numbers#source-code-tags-and-builds,根据你的真机型号选择对应的源码版本。
三、编译要求
由于两个源码版本不同,本文依次编译。
1、编译android-7.1.2版本
1)要求
参考链接:https://source.android.google.cn/setup/build/requirements
需要jdk、python、gnu make、git
由于本文在下载源码过程中已经配置了git,因此略过。
a、设置java环境
如图所示,此时要编译源码7.1.2版本,Ubuntu下要求java环境为OpenJDK8
执行命令安装:
//正常来说命令行配置jre即可
sudo apt-get install openjdk-8-jre
//但我同时安装了jdk
sudo apt-get install openjdk-8-jdk
执行命令查看是否安装成功:
java -version
javac -version
如果安装过程没有出错,那么此时应该能够看到openjdk1.8环境。
b、设置python
ubuntu中自带python环境,且版本为2.7,可通过执行python命令查看。
c、设置gnu make
ubuntu中自带gnu make,版本为4.1,但由于我们此时编译Android版本为7.1,可以在该版本执行,因此也不作改变。可通过执行make命令查看版本。
2)下载驱动
因为本文编译系统最终需要刷到真机上,因此需要下载对应的驱动。google提供了 Nexus 和 Pixel 设备的驱动文件,链接:https://developers.google.cn/android/drivers,在链接中,可以根据下载源码的版本名称,搜索到对应的驱动。本文在该7.1.2版本中直接下载编译好的镜像文件,查看版本选择时的链接,7.1.2_r18对应的细分版本为N2G47Z,在https://developers.google.cn/android/images中搜索N2G47Z,找到对应压缩包下载。
3)安装需要的库文件
sudo apt install g++-multilib
sudo apt install gperf
sudo apt install libxml2-utils
sudo apt install curl
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
sudo apt-get install m4
4)开始编译
进入源码根目录
a、初始化编译环境,执行以下命令,注意.和build之间有空格:
. build/envsetup.sh
b、使用lunch选择编译目标
lunch
执行此命令后,会出现当前可以编译的版本其对应的数字
运行版本查看链接:https://source.android.google.cn/source/running
在该链接中查看手机类型,选择对应的运行版本,这里我的手机是nexus5x,希望编译带有root权限的可调试版本,因此选择userdebug类型,选择aosp-bullhead-userdebug对应的数字即可。
c、执行编译
time make -j8
这里的工作线程数可以设置为物理内核数-逻辑内核数之间的数字,我的电脑物理内核为4,逻辑内核数为8,因此设置-j参数为8.
d、查看生成的镜像文件并刷入
进入源码目录下/out/target/product/bullhead,执行以下命令:
//进入手机bootloader
adb reboot bootloader
//开始刷机
fastboot flash boot boot.img
fastboot flash system system.img
fastboot flash cache cache.img
fastboot flash userdata userdata.img
fastboot flash recovery recovery.img
参考链接:https://source.android.google.cn/source/running
刷入过程中首先需要将手机解锁,否则无法刷入,同时打开手机调试,这里可能会遇到一些坑,如果是adb devices 命令udev问题可以参考踩坑7.1的问题e,如果是其他问题可参考官网链接https://source.android.google.cn/source/running或文末博客链接。
f、刷入vendor.img
7.1.2版本的源码编译过程中,我们没有下载驱动二进制文件,因此在/out/target/product/bullhead目录中也不会有vendor.img,直接解压前面下载的镜像包,找到里面的image***.zip继续解压找到vendor.img,刷入vendor.img镜像。
g、手机重启
fastboot reboot
此时处于fastboot模式,执行该命令即可重启手机。手机重启后会报内部错误,由于用于自己调试,因此也没关系,需要解决的同学可以参考文末博客链接。
5)编译7.1踩坑
在我修复的过程中,有时候执行make命令会报同样的错,这个时候我通常执行make clobber命令清除之前编译生成的环境和文件,全部重新执行生效。
a、
[ 1% 761/49025] Yacc: aidl &