Android 5.0.1(Lollipop)源码的下载、编译(eng版本)并烧录到Nexus 4
来源:互联网 发布:甜甜圈是什么软件 编辑:程序博客网 时间:2024/05/17 01:10
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
-
j
8
5.解锁Bootloader
只有在Bootloader是unlock模式下才可能烧录定制的系统,Nexus4设备默认的Bootloader都是locked的,需要解锁。先把Nexus4关机,然后同时按住音量的2个键和power键,进入fastbootmode,执行下面命令解锁:
$fastboot oem unlock
官方推荐在烧录系统前格式化cache和userdate,注意在执行下面命令前做好手机数据的备份:
$fastboot format cache
$fastboot format userdat
a
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)
完整的Android 5.0.1可以通过一行简单的命令刷入Nexus 4,它在检测bootloader和radio版本和编译好的Android版本匹配后把boot、recovery、system文件分区烧录到设备中,命令里的“-w”参数是wipe,就是把所有的user data格式化,如果有要保留的数据注意备份:
$fastboot
-
w flashal
l
烧录完成后会
reboot
到开机启动界面,
Android 5.0.1
的
Nexus 4
工程机版本的编译烧录全部完成,
enjoy it~
参考博客:http://blog.163.com/zhou_411424/blog/static/19736215620139101154776
- Android 5.0.1(Lollipop)源码的下载、编译(eng版本)并烧录到Nexus 4
- Android 5.0.1(Lollipop)源码的下载、编译(eng版本)并烧录
- Android编译版本eng、user和userdebug的区别
- Android编译版本eng、user和userdebug的区别:
- 编译Nexus具体版本的源码
- 编译android-4.3.1_r源码并刷到自己的Galaxy Nexus I9250真机上
- 编译android-4.3.1_r源码并刷到自己的Galaxy Nexus I9250真机上
- Android源码编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- Android源码编译选项eng、user、userdebug的区别
- [Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
- [Android编译(二)] 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机
- Ubuntu14.10 x64配置Android 4.4(kitkat)/5.0(lollipop) 编译环境的方法(更新)
- android源码学习之源码编译并nexus s真机刷机
- android源码学习之源码编译并nexus s真机刷机
- 下载并编译Android kernel的指定版本源代码
- Android user 与 eng 版本的差异
- [Linux]RHEL虚拟机KVM使用网络桥接模式
- USART---串口发送数据
- MySQL C API函数大全
- NYOJ 55 懒省事的小明 (优先队列)
- This Android SDK requires Android Developer Toolkit version 20.0.0 or above
- Android 5.0.1(Lollipop)源码的下载、编译(eng版本)并烧录到Nexus 4
- cocos2dx 3.3 lua 绑定类
- ubuntu使用LDAP做用户管理
- 代码优化
- 找工作前的准备
- Halcon 例程学习之频域自相关变换( correlation_fft)
- MySQL 数据库 InnoDB 引擎的事务隔离级别
- 补间(Tween)动画
- Vim中常用的提速指令