转载:
Android 5.0.1(Lollipop)源码的下载、编译(eng版本)并烧录到Ne,有需要的朋友可以参考下。
1.配置Linux编译环境
安装JDK
AOSP(AndroidOpen Source Project)需要Java7支持,在Ubuntu中使用OpenJDK,安装方法如下:
$ sudo apt-get update
$ sudo apt-get install openjdk-7-jdk
安装需要的包(只针对Ubuntu14.04)
$ sudo apt-get install bison g++-multilib git gperf libxml2-utils
配置USB连接和设置编译好的output文件目录等在此不作详细介绍(不影响编译效果)
2.下载Android源码
创建Repo客户端
①.创建新的目录WORKING_DIRECTORY来存放工作文件:
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
②. 运行repoinit获取最新的Repo版本(推荐),之后下载的源码将存放在工作路径WORKING_DIRETORY中:
$ repo init -u https://android.googlesource.com/platform/manifest
或者指定下载任一版本(Branch),在创建Repo客户端时使用-b 选项:
$repo init -u https://android.googlesource.com/platform/manifest-b android-5.0.1_r1
(注:由于没有安装Repo必要软件,会提示安装Repo和Git相关软件,按照提示安装即可)
③在Repo初始化时会提示配置real name和email address,email address需要是连接到注册的Google账号的地址(推荐直接使用Gmail邮箱),real name在提交代码时会显示在代码信息中
下载Android代码树
这里运行下面一条指令直接下载上一步指定的安卓版本的源码:
$repo sync
等吧,最快可能也要五六个小时…..好像只能开代理下…..
3.获取硬件驱动
Google提供的所有Nexus系列设备的硬件驱动的二进制文件在以下网址中均可下载https://developers.google.com/android/nexus/drivers#makolrx22c我手中的是Nexus4,也可根据自己手机型号选择,找到“Nexus4 binaries for Android 5.0.1(LRX22C)”,有3个硬件驱动的压缩包,分别是qcom-mako-lrx22c-1146e92c.tgz、lge-mako-lrx22c-ad9be737.tgz、broadcom-mako-lrx22c-ea539f92.tgz
下载完成后将三个压缩包解压至Android源码根目录(WORKING_DIRECTORY),得到三个.sh文件extract-broadcom-mako.sh、extract-lge-mako.sh、extract-qcom-mako.sh,分别执行这三个shell脚本(会提示是否接受License之类的,IACCEPT即 可),会在源码目录下新生成一个/vendor目录,里面就是Nexus4所需的相关硬件驱动二进制文件
(一定要在编译Android源码前确保在源码根目录有官方提供的硬件驱动目录vendor,否则编译完成烧录后reboot会因为缺少硬件驱动卡在Google启动画面上)
4.编译Android源码
初始化编译环境
执行初始化编译环境的脚本:
$ source build/envsetup.sh
选择一个Target
使用lunch指令制定编译的target,具体的配置可以通过参数来指定,例如:
$lunch aosp_arm-eng
这行指令用来编译一个完整的模拟器emulator,所有的debug都是开启的。
所有的target形式都是BUILD-BUILDTYPE,其中BUILD是一个特定代码集合的名称,如Nexus4的代码名称就是occam(mako)。
BUILDTYPE即编译的模式,有一下三种:
-user: 受限的访问,适用于发行版的产品
-userdebug: 和”user”模式类似,但是有root权限访问并具有debug功能,适用于debug
-eng: 工程机的模式,用于在开发配置中添加新的debug工具等
显然,我们需要进行eng模式的编译,Nexus4的编译配置是:
$lunch full_mako-eng
编译代码
使用make指令,GNU的make指令可以通过-jN选项进行并行操作,N的设置在此不多介绍,我使用8个任务并行的指令:
$make -j8
5.解锁Bootloader
只有在Bootloader是unlock模式下才可能烧录定制的系统,Nexus4设备默认的Bootloader都是locked的,需要解锁。先把Nexus4关机,然后同时按住音量的2个键和power键,进入fastbootmode,执行下面命令解锁:
$fastboot oem unlock
官方推荐在烧录系统前格式化cache和userdate,注意在执行下面命令前做好手机数据的备份:
$fastboot format cache
$fastboot format userdata
6.刷入Android5.0.1适配的Bootloader和基带版本
从官方提供的出厂镜像中可以找到合适的Bootloader和radio信息,如果不执行这步,查看“Settings->”Aboutphone”->”Baseband version”为“unknown”,更简单的说,打不了电话….
google factory image:https://developers.google.com/android/nexus/images
nexus4 factory image:https://developers.google.com/android/nexus/images#occamjdq39
我下的是FactoryImages “occam” for Nexus 4的5.0.1(LRX22C),.zip文件解压后的文件信息如下:
bootloader-mako-makoz30f.img (Nexus 4 的bootloader镜像)
flash-base.sh
flash-all.bat
image-occam-lrx22c.zip(出厂镜像)
flash-all.sh
radio-mako-m9615a-cefwmazm-2.0.1701.05.img(Nexus 4的基带镜像)
把bootloader和radio刷入Nexus4,我使用了自己的路径,注意要替换成你的路径:
$fastbootflash bootloader/mnt/software/factory-image/occam-lrx22c/bootloader-mako-makoz30f.img
刷好bootloader后重启进入bootloader用最新的bootloader进行烧录radio和编译好的rom:
$fastboot reboot-bootloader
刷入基带radio:
$fastbootflash radio/mnt/software/factory-image/occam-lrx22c/radio-mako-m9615a-cefwmazm-2.0.1701.05.img
6.执行(for emulator)/烧录(for Nexus 4)
模拟器运行
如果在选择编译模式时采用full_arm-eng或者aosp_arm-eng等的参数时可以进行模拟器运行:
$emulator
烧录到设备(Nexus4)
完整的Android5.0.1可以通过一行简单的命令刷入Nexus 4,它在检测bootloader和radio版本和编译好的Android版本匹配后把boot、recovery、system文件分区烧录到设备中,命令里的“-w”参数是wipe,就是把所有的user data格式化,如果有要保留的数据注意备份:
$fastboot -w flashall
烧录完成后会reboot到开机启动界面,Android 5.0.1的Nexus 4工程机版本的编译烧录全部完成,enjoy it~