由于最近工作需要 + 自己也挺感兴趣,折腾起 Android 的下层开发。
<!--more-->
上 Google 爸爸的 Android Source ,按 Establishing a Build Environment
和 Downloading the Source
做完即可,只有小坑如下:
Creating a case-sensitive disk image
时,不要用 Disk Utility 的 GUI 界面创建,大概因为版本更新了,找不到创建稀疏磁盘的选项,并且大小写那项我选了两回都没生效(???),请按它后续的提示直接用 shell 操作;Reverting from make 3.82
这段,看清楚其实只有在 4.0.x 及以下系统才需要做,现在一般不会去编这个版本了可以忽略;Initializing a Repo client
就是下源码啦,可以使用清华大学的 AOSP 镜像,比较不会碰到下载的各种问题(不过我是公司网,直连速度喜人 4M/s)。按着 Android Source 的步骤,现在终于要 Preparing to Build
啦,注意到其实还有个页面可能没看仔细——Requirements,这里有坑的:
Mac OS (Intel/x86)
Android 6.0 (Marshmallow) - AOSP master: Mac OS v10.10 (Yosemite) or later with Xcode 4.5.2 and Command Line Tools
Android 5.x (Lollipop): Mac OS v10.8 (Mountain Lion) with Xcode 4.5.2 and Command Line Tools
Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat): Mac OS v10.6 (Snow Leopard) or Mac OS X v10.7 (Lion) and Xcode 4.2 (Apple's Developer Tools)
Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich): Mac OS v10.5 (Leopard) or Mac OS X v10.6 (Snow Leopard) and the Mac OS X v10.5 SDK
按这个表,Google 其实推荐 5.x 6.0 使用 4.5.2 的 Xcode 及其 SDK 来编译,然而现代 macOS 早已不支持这些老东西了:
build/core/combo/mac_version.mk
,我试了一早上各种版本,没成sudo xcode-select -s /Volumes/Xcode/Xcode.app/Contents/Developer
目测一切奇怪的环境问题都可以用这个终极办法修复。
最后的最后,终于是编译啦:
$ make clobber
$ source build/envsetup.sh
$ lunch aosp_arm-eng
$ make -j4
需要注意的是:
lunch
要选对应机型和权限类型,比如我要编 Nexus 7(flo)的 debug,就是 lunch aosp_flo-userdebug
make -j
跟的数字有些讲究,其实根据线程池的最高效算法,CPU 密集型的线程池应该是 n + 1 的 pool 大小,由于现在的 Intel CPU 都是超线程的,例如我用的 15 寸 Mac 是 4 核 8 线程,所以就是 make -j9
Running Build
这章没多少内容,也就一个命令有点坑:fastboot flashall -w
。直接运行会抛错:error: neither -p product specified nor ANDROID_PRODUCT_OUT set
。需要设置一下 img 的目录,按照提示 export ANDROID_BUILD_OUT="path/to/your/img/folder"
设置即可 (-p 参数用了没成功...大概姿势有问题)
OK,终于 Run 起来了。后续可以做进一步的调试了。
欢迎关注我的公众号和微博。