macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码

前置条件


  • macOS Sierra  (10.12.3)
  • Homebrew (1.1.9 或更高版本)
  • Xcode (8.2.1 或更高版本)
  • Xcode (5.1.1 只能是此版本)

准备环境


1.创建大小写区分的磁盘分区

$ cd ~

$ mkdir Android

$ cd Android

$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g android.dmg

2.挂载刚刚创建好的分区

$ hdiutil attach ~/Android/android.dmg.sparseimage -mountpoint /Volumes/android

3. 切换到刚刚挂载的分区

$ cd /Volumes/android

4.安装最新版本的repo

$ brew update

$ brew install repo

5. 安装依赖的第三方应用

$ brew update

$ brew install GnuPG

$ brew install gnupg2

6.下载并安装Xcode 5.1.1此版本,我们只是使用其中的SDK,其他的,我们使用8.2.1中的工具,注意,我们只能使用MacOSX10.8.sdk才能顺利编译通过。

下载地址 http://adcdownload.apple.com/Developer_Tools/xcode_5.1.1/xcode_5.1.1.dmg

下载之后,安装之前我们先把8.2.1的Xcode重命名一下,稍后我们再修改回来即可。我们安装之后,提取Xcode 5.1.1版本里面的"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk",然后拷贝到Xcode 8.2.1 版本的"/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs"目录下面。操作完成后,可以删除Xcode 5.1.1

也可以从phracker/MacOSX-SDKs 获取已经提取好了的版本。

执行如下命令,使得低版本的SDK生效。

$ sudo /usr/libexec/PlistBuddy -c "Set :MinimumSDKVersion 10.8" /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Info.plist

如此操作的原因有两条:

(1)在macOS Sierra  (10.12.3)上,Xcode 5.1.1无法执行,因此没办法做到两个版本并存.

(2)如果通过修改代码来把代码中限制的系统版本调整到10.8版本以上,则GCC存在BUG,导致编译无法正常通过,具体的BUG参考
libgcc: error: unknown value '10.10' of -mmacosx-version-min

7.下载Android-5.1.1_r38源代码(此处请准备梯子,或者自己从国内源进行替换)

$ mkdir Android_Source

$ cd Android_Source

$ repo init -u https://android.googlesource.com/platform/manifest -b android-5.1.1_r38

$ repo sync

编译代码


1.设置编译需要的环境信息

$ sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

2.切换Java版本到1.7

$ export JAVA_HOME=$(/usr/libexec/java_home -v 1.7)

3.清理代码,为编译准备干净的环境

$ make clobber

4.引入编译环境变量

$ source build/envsetup.sh

5.设置编译目标,此处我们指定编译ARM下的完整调试版本

$ lunch aosp_arm-eng

6.如果需要跟踪调试代码,建议编译为调试类型

$ export TARGET_BUILD_TYPE=debug

7.编译

$ make -j8

注意此处如果发生编译失败,原因基本上是编译顺序导致的引用出错,也就是某些模块还没有编译完成,其他模块已经开始尝试链接,导致依赖错误,此时只要把多线程并发编译修改成单线程编译即可,即直接执行

$ make

运行镜像


$ cd /Volumes/android/Android_Source

$ export ANDROID_BUILD_TOP=/Volumes/android/Android_Source

$ export PATH=$PATH:$ANDROID_BUILD_TOP/out/host/darwin-x86/bin

$ export ANDROID_SWT=$ANDROID_BUILD_TOP/out/host/darwin-x86/framework

$ export ANDROID_PRODUCT_OUT=$ANDROID_BUILD_TOP/out/debug/target/product/generic

$ ./prebuilts/android-emulator/darwin-x86_64/emulator -system ./out/debug/target/product/generic/system.img -data ./out/debug/target/product/generic/data.img -ramdisk ./out/debug/target/product/generic/ramdisk.img

上面运行起来的镜像是从/Volumes/android/Android_Source/out/debug/target/product/generic/hardware-qemu.ini即可读取配置信息的,但是这个文件直接修改无效,我们如果需要修改参数,只能从启动参数中设置。
比如我们如果需要增大内存,开启GPU的支持,则执行如下命令:

$ ./prebuilts/android-emulator/darwin-x86_64/emulator -system ./out/debug/target/product/generic/system.img -data ./out/debug/target/product/generic/data.img -ramdisk ./out/debug/target/product/generic/ramdisk.img -gpu on -memory 2048 

参考链接


发布者

《macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码》上有1条评论

回复 rong 取消回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注