【原创】Android源码编译并烧录至Nexus4

环境准备:

宿主机OS:Windows 10

Vmware:11

虚拟机OS:Ubuntu-14.04(64位)

硬盘空间:150G+(一定要分150G以上,有条件的话最好直接分个200G,我最开始分配的50G,下载到一半就提示空间满了,后来不得已使用了Gparted,为Ubuntu重新分配了150G空间,说多了都是泪~)

虚拟机CPU:1CPU 2核 (有条件最好2CPU 4核,总之越高越好)

虚拟机内存:3G(建议有条件直接分4G以上,总之越高越好,因为我宿主机只有4G,所以我只能给虚机分了3G,因此编译过程中足足花了近20个小时,说多还是泪~)

当然,如果你有实体机,配个32G内存,8核CPU的话,那速度必须杠杠滴!^_^


操作步骤:

1.建立一个文件夹用于专门存放Android源码:

2.安装Git:

3.下载JDK:

先确认是否安装了OpenJDK

如果安装了,建议将其卸载

到JAVA官网下载JDK

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

下载“jdk-8u91-linux-x64.tar.gz”

4.安装JDK:

5.配置JDK环境:

在末尾添加:

 

然后执行

使其立即生效,然后输入“java -version”,看是否显示为新安装的JDK8

6.安装依赖环境:

7.配置ccache:

末尾加入:

export USE_CCACHE=1

8.安装repo:

创建目录

下载repo

对repo赋予执行权限

9.下载Android源码:

同样,由于被墙的原因,我这里选择了清华大学的镜像进行下载

如果出现中断,那就再重新repo就是了,或者直接写个sh脚本进行无人值守下载,脚本如下:

在经历了2个晚上的下载,终于将4.4.2源代码下载到了本地,此时在Android目录下可以看到你下载好的源代码了(而在下载过程中,你是看不到任何内容的,通过ls-a命令可以看到.repo的隐藏文件夹,其实这个就是你在repo源代码过程中的缓存了)

10.下载Nexus4硬件驱动(否则烧录进去img后启动会一直卡在google LOGO界面)

  1. 进入https://developers.google.com/android/nexus/drivers 根据手机型号选对应的驱动包
  2. 下载三个驱动包: broadcom-mako-krt16s-f54c9ff9.tgz, lge-mako-krt16s-23ef7d53.tgz, qcom-mako-krt16s-cc4bd932.tgz 
  3. 解压到源码根目录(也就是~/Android)
  4. 运行三个解压后的sh文件, 在根目录下会多出vendor目录, 这就是硬件驱动目录

11.Android源代码初始化及编译:

因为要烧录至Nexus4手机,按照官方指导,需要选择“full_mako-userdebug”版本,然后就可以make了。

编译过程会相当相当漫长,而在编译过程中也会出现一些报错,只要根据报错内容去网上搜索,你会找到解决办法,我遇到了以下的报错和卡死,比如CCache的报错,通过网上搜索得到答案:

比如在“target:dex framework”报错,同样通过网上搜索,发现要将内存设置大一些就可以了

再比如在“libwebviewchromium.so”这里卡了很久没响应,通过网上搜索得到解决方法:

用同样的方法,我增加了两个swap,并各设置为1G大小,终于在经历了近20小时的编译后,见到了编译完成的提示。(泪奔啊~)

12.烧录img至Nexus4:

编译成功后,会在out目录生成“system.img boot.img recovery.img userdata.img”等需要的文件

  1. 进入刷机模式: adb reboot bootloader
  2. fastboot oem unlock
  3. fastboot format cache
  4. fastboot format userdata

分别刷入img文件:

  1. fastboot flash recovery recovery.img
  2. fastboot flash boot boot.img
  3. fastboot flash system system.img
  4. fastboot flash userdata userdata.img
  5. fastboot oem unlock
  6. fastboot reboot

下图为烧录后的系统截图:

发表评论

电子邮件地址不会被公开。