当前位置: 代码迷 >> Android >> 替Nexus4编译android4.2.2
  详细解决方案

替Nexus4编译android4.2.2

热度:25   发布时间:2016-05-01 11:16:07.0
为Nexus4编译android4.2.2

上周入手了Nexus4,今天有时间自己编了包出来并成功烧到手机,现在总结一下过程。

过程主要参考了Android官方的两篇文章:“Building the System” 和 “Building for devices”

第一步:download Android代码:

按照官方的介绍下载代码即可,注意Nexus4的branch可以用android-4.2.2_r1,Nexus系列手机和对应的android branch版本在 “Codenames, Tags, and Build Numbers” 都可以查到。我们家里是10M的联通光纤,昨天晚上一个多小时就下载完了,而且中间没有出现断链等情况,比较理想;


第二步:获得驱动

Google所有Nexus的手机驱动都可以在“Binaries for Nexus Devices”  取到, Nexus4的驱动文件一共有3个包:

NFC、 Camera、Sensors、Audio、DRm、Cryptography、Graphics、Bluetooth、Media等等,我们只需要下载这3个包,解压后得到3个sh文件,在解压的目录下分别执行这3个sh脚本(不分先后顺序),就可以得到vendor目录,下面包括了来自3个厂商的驱动代码,把这个vendor目录整个直接copy到源码目录下。


第三步:编译

执行命令:

$ source build/envsetup.sh

$ lunch

Nexus的工程代号是mako,其它nexus手机的对应代号可以从“Binaries for Nexus Devices”找到完整的对应关系。

You're building on Linux
Lunch menu... pick a combo:
     1. full-eng
     2. full_x86-eng
     3. vbox_x86-eng
     4. full_mips-eng
     5. full_grouper-userdebug
     6. full_tilapia-userdebug
     7. mini_armv7a_neon-userdebug
     8. mini_armv7a-userdebug
     9. mini_mips-userdebug
     10. mini_x86-userdebug
     11. full_mako-userdebug
     12. full_maguro-userdebug
     13. full_manta-userdebug
     14. full_toroplus-userdebug
     15. full_toro-userdebug
     16. full_panda-userdebug

Which would you like? [full-eng] 11

这里选择“11” 。

之后就可以使用make命令编译了:

$make -j10

经过一段稍微漫长的时间编译,在out/target/product/mako目录下就会生成三个img文件, ramdisk.img+userdata.img+system.img.

只要编译成功完成,就不用care这些文件,在当前shell下执行fastboot和adb看是不是都生成,如果没有的话就需要手动再编译出来,执行$make fastboot adb.


第四步:Bootloader解锁

我们买来的Nexus4默认都是锁了bootloader的,但是为了烧自己编的系统或者其他第三方ROM就需要解锁bootloader,google提供了接口让开发者可以方便的解锁。

先把Nexus4关机,然后同时按下两个音量键和power键,一直按住直到界面上出现bootloader的画面。

这时用usb线连上手机,在shell里执行:

$ fastboot oem unlock

幸运的话会得到结果如下:

[email protected]:~/my_repo/nexus4# fastboot oem unlock
...
OKAY [104.945s]
finished. total time: 104.945s

这个过程中间界面上会出现提示让你选择accept解锁,按照操作提示执行就oK


google的官方介绍里还给出了format cache和userdata的命令,觉得有必要的话也可以执行一下,注意数据备份。

[email protected]:~/my_repo/nexus4# fastboot format cache
erasing 'cache'...
OKAY [  0.022s]
formatting 'cache' partition...
Creating filesystem with parameters:
    Size: 587202560
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7168
    Inode size: 256
    Journal blocks: 2240
    Label: 
    Blocks: 143360
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 11/35840 inodes and 4616/143360 blocks
sending 'cache' (10984 KB)...
writing 'cache'...
OKAY [  1.270s]
finished. total time: 1.292s


# fastboot format userdata
erasing 'userdata'...
OKAY [  5.090s]
formatting 'userdata' partition...
Creating filesystem with parameters:
    Size: 14129561600
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8144
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 3449600
    Block groups: 106
    Reserved block group size: 847
Created filesystem with 11/863264 inodes and 95427/3449600 blocks
sending 'userdata' (137438 KB)...
writing 'userdata'...
OKAY [ 15.479s]
finished. total time: 20.569s


第五步:烧系统

一切准备就绪后,就可以把编好的系统烧入手机了,执行命令:
[email protected]# fastboot -w flashall

在Root目录下可能会提示ANDROID_PRODUCT_OUT变量不存在。退出root shell在刚刚编译的用户shell下看看ANDROID_PRODUCT_OUT的值然后再重新切到root下export一下即可:
error: neither -p product specified nor ANDROID_PRODUCT_OUT set
[email protected]:~/my_repo/nexus4# exit
exit
[email protected]:~/my_repo/nexus4$ echo $ANDROID_PRODUCT_OUT
/home/xxxx/my_repo/nexus4/out/target/product/mako
[email protected]:~/my_repo/nexus4$ sudo -s
[email protected]:~/my_repo/nexus4# export ANDROID_PRODUCT_OUT=/home/xxxx/my_repo/nexus4/out/target/product/mako
[email protected]:~/my_repo/nexus4# fastboot -w flashall
--------------------------------------------
Bootloader Version...: MAKOZ10o
Baseband Version.....: M9615A-CEFWMAZM-2.0.1700.48
Serial Number........: 019xxxxxxxxxxx [IMEI号]
--------------------------------------------
checking product...
OKAY [  0.002s]
sending 'boot' (5898 KB)...
OKAY [  0.372s]
writing 'boot'...
OKAY [  0.304s]
sending 'recovery' (6396 KB)...
OKAY [  0.402s]
writing 'recovery'...
OKAY [  0.325s]
erasing 'system'...
OKAY [  0.845s]
sending 'system' (234361 KB)...
OKAY [ 14.649s]
writing 'system'...
OKAY [ 13.133s]
erasing 'userdata'...
OKAY [  0.626s]
formatting 'userdata' partition...
Creating filesystem with parameters:
    Size: 14129561600
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8144
    Inode size: 256
    Journal blocks: 32768
    Label: 
    Blocks: 3449600
    Block groups: 106
    Reserved block group size: 847
Created filesystem with 11/863264 inodes and 95427/3449600 blocks
sending 'userdata' (137438 KB)...
writing 'userdata'...
OKAY [ 15.491s]
erasing 'cache'...
OKAY [  0.038s]
formatting 'cache' partition...
Creating filesystem with parameters:
    Size: 587202560
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7168
    Inode size: 256
    Journal blocks: 2240
    Label: 
    Blocks: 143360
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 11/35840 inodes and 4616/143360 blocks
sending 'cache' (10984 KB)...
writing 'cache'...
OKAY [  1.274s]
rebooting...

至此,编好的系统已经烧入手机,手机会自动重启进入新的系统,编译和烧入手机算顺利完成。
但是进入启动后的手机你会发现,只有几个仅有的app,google native的应用都没有了,于是我们就要想办法恢复google的服务出来,我再单独写个笔记记录恢复google service的事情吧。

  相关解决方案