Mac El Capitan(10.11.6) 编译以及烧制Nexus6P(6.0.1-MTC20F)的曲折经历

下载Android源码

由于以前有过Android源码相关的开发经验,所以这一关倒是难不倒,重新参考官方的文档即可(http://source.android.com/source/downloading.html)

搭建Mac下的编译环境

Android官方有Mac的源码编译环境搭建介绍(https://source.android.com/source/initializing.html#setting-up-a-mac-os-x-build-environment),但是里面的坑挺多的。主要是在用MacPorts安装GNU工具的时候,爆出来

Port gmake not found

这个问题。Google一把,原来是先要sync一遍才行。

$ sudo port -d sync
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

编译代码

以前在Ubuntu下编译Android代码几乎没有遇到过啥问题,但愿在Mac下面也能够菩萨保佑一下吧~然而我却在一开始就遇坑了>_<

$ . build/envsetup.sh 
including device/asus/deb/vendorsetup.sh
including device/asus/flo/vendorsetup.sh
including device/asus/fugu/vendorsetup.sh
including device/generic/mini-emulator-arm64/vendorsetup.sh
including device/generic/mini-emulator-armv7-a-neon/vendorsetup.sh
including device/generic/mini-emulator-mips/vendorsetup.sh
including device/generic/mini-emulator-x86/vendorsetup.sh
including device/generic/mini-emulator-x86_64/vendorsetup.sh
including device/htc/flounder/vendorsetup.sh
including device/huawei/angler/vendorsetup.sh
including device/lge/bullhead/vendorsetup.sh
including device/lge/hammerhead/vendorsetup.sh
including device/moto/shamu/vendorsetup.sh
including sdk/bash_completion/adb.bash
$ lunch 17
build/core/combo/mac_version.mk:38: *****************************************************
build/core/combo/mac_version.mk:39: * Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk
build/core/combo/mac_version.mk:40: *****************************************************
build/core/combo/mac_version.mk:41: *** Stop..  Stop.

** Don't have a product spec for: 'aosp_angler'
** Do you have the right repo manifest?

去看了下mac_version.mk,发现

mac_sdk_versions_supported :=  10.6 10.7 10.8 10.9

正好没有10.11,于是加上10.11在后面后,lunch成功了。

正式进入编译

由于我的Mac Pro是13寸的,只有两个CPU~并且白天还要用它生产生活,于是我就运行的m,默认只开了一个核去编译,这个蜗牛般的编译从下午到晚上下班还没停,我就把电脑挂了一晚上。希望第二天来看到奇迹发生。然而老天总是不会让我们太一帆风顺,第二天来,编译失败了,错误如下:

stat: cannot read file system information for '%z': No such file or directory

这个时候我真蒙逼了,这是什么鬼?放到Google上也搜不到啥结果。看来只能够靠自己了!引用下Linus的名言:Read the fucking source code……好在这个error很是明显,就是stat命令执行失败了。然后我跑到build/core/里面大致探索了一番,发现combo/HOST_darwin-x86.mk里面有如下代码

define get-file-size
stat -f "%z" $(1)
endef 

嗯,看起来是获取文件大小的,为啥会执行失败呢?原来是因为我安装了coreutils这个工具集,stat被重定向到了/usr/local/opt/coreutils/libexec/gnubin/stat目录下,和Mac原生的stat并不兼容。找到问题后,

export PATH=/usr/bin/:$PATH

一下再次编译,总算编译再次进入正轨,一直到编译成功!难以掩饰心中的喜悦,赶紧刷到我那饥渴的机器上面。

$ cd out/target/product/angler
$ fastboot flash system system.img
$ fastboot flash boot boot.img
$ fastboot flash recovery recovery.img
$ fastboot flash cache cache.img
$ fastboot flash userdata userdata.img
$ fastboot flash vendor vendor 咋个补全不了

发现居然没有vendor.img!这如何是好?我心里默默想:没事,我刷入原厂的vendor.img不就行了么?于是在Google上下载了angler-mtc20f-factory-4355fe06.zip,解压后刷入了里面的vendor.img,然后fastboot reboot重启手机,现在是不是就是见证奇迹的时刻了?成功进入系统了,但是首先系统报了个错

“There’s an internal problem with your device. Contact your manufacturer for details”

感觉问题应该不大,用起来都还行~~貌似没问题,然后我插入SIM卡,想试试能不能用。然而发现这系统竟然识别不了Sim卡。网上搜了下,发现在(http://www.2cto.com/kf/201609/551334.html)解决过这个问题,原因是vendor.img里面有一些需要依赖system.img的东西,所以需要在Android的源码目录里面编译出来才行。但是那个文章里面是在Ubuntu的环境下解决的。没事,Mac下应该也是可以解决的吧。于是我执行了下面的命令

git clone git@github.com:anestisb/android-prepare-vendor.git
./execute-all.sh -d angler -b MTC20F -o $(pwd) -i ~/nexus6p/angler-mtc20f-factory-4355fe06.zip -k

发现解压成功后mount ext2文件系统失败了,因为我系统里面没有安装fuseext2。去网上找到了fuseext2.dmg,解压后安装,发现好像太老了,已经不支持现在的Mac系统版本了。。我的天!没事,要的就是折腾。我尝试着去clone了 fuse-ext2来手动编译之,但是发现按照官方说的命令,在./configure的时候又发现一直找不到libfuse库。但是我明明已经安装了osxfuse,而且/usr/local/include/osxfuse/目录下也有fuse。Google无果后,我彻底放弃了在Mac下面生成Vendor的想法,果断跑到我的搬瓦工的VPS上的Linux系统去做了。然而发现android-prepare-vendor工具只支持64位系统。我勒个擦擦擦!最后只好祭出我的大招了,安装64Bit的Linux虚拟机来做。下载了ubuntu-16.04.1-desktop-amd64.iso之后,迅速在VirtualBox上面装上,然后装上Java,以及一大堆依赖之后,终于成功生成了vendor。欣喜若狂的我立即把vendor拷贝到了Android源码下,然后m一下,编译成功后,总算在out/target/product/angler/下找到了vendor.img。重新刷入所有的img后,重启后发现那个系统的报错也没有了,sim卡也能够识别了。我把生成的 vendor放到了(https://github.com/tbruceyu/angler-MTC20F_vendor)里,如果有需要的同学就不需要经历我这样痛苦的生成经历了。最后还在github上面创建了我自己的Android Repo。享受自己定制系统的快感咯~哈哈哈。

总结

遇坑不抛弃不放弃,不在一棵树上吊死。总是能峰回路转的~~~另外默默的谴责Google居然不提供Vendor.img的行为。。。

你可能感兴趣的:(Android移动开发)