osx 10.10.1编译 Android 4.4.4_r2

一、下载android 4.4.4_r2源码

1、创建目录:cd ~ && mkdir bin src
2、切换到bin 目录,按官方教程初始化好repo文件
3、设置检出android源码相关的host ip地址为nslookup g.cn查询出来的IP地址;本次编译使用的host  ip地址(加入到hosts列表)
203.208.46.148 googlesource.com
203.208.46.148 www.googlesource.com
203.208.46.148 android.googlesource.com
64.233.168.87 chromium.googlesource.com
64.233.168.87 gerrit.googlesource.com
64.233.168.87 kernel.googlesource.com

4、在src目录执行../bin/repo sync,等下载好源码,现在是android 5.0发布之后,源码下载完后有70G+,里面有个git的索引目录.repo有60G+之大

二、编译android 4.4.4_r2源码

1、修改系统框架源码,需要修改头文件如下
/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h:156:
/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h:163:
编译qume时候报错:error: expected a property attribute before ‘atomic’
网上搜索得出结论是新版xcode编译默认了objc的property都是atomic的,所以不能定义 property attribute 为 atomic,都说要装xcode5.x来编译。没那闲工夫,直接注释QTMovieModernizer.h:156, 163两行的atomic关键字,改后可以xcdoe 6.1.1正常编译过去。

2、修改android源码编译脚本,使其支持10.10系统下编译。直接修改文件
//相关修复方法从此博主小球球处得知,安装编译环境什么都都是学习博主小球球的,感谢。
vi build/core/combo/HOST_darwin-x86.mk
//找到找到mac_sdk_versions_supported
mac_sdk_versions_supported := 10.6 10.7 10.8 改成 mac_sdk_versions_supported :=  10.9 10.10

修改external/chromium_org/base/android/jni_generator/jni_generator.py,按博主提示得到补丁修改,补丁片段就是检查系统版本,决定子进程启动参数是否带-fpreprocessed

修改build/core/combo/HOST_darwin-x86.mk 
ifeq ($(mac_sdk_version),10.8) // 10.8改成我们的sdk版本10.9
# Mac SDK 10.8 no longer has stdarg.h, etc
据说到这里博主小球球就可以愉快的编译下去了,可惜我不能。还需处理几个步骤处理一下。

3、移除NDK_ROOT环境变量,在开始编译支持需要unset NDK_ROOT, 否则编译出现webrtc神马的错误。如果你没装NDK,没设置NDK_ROOT环境变量忽略之。

4、为SDL打源码补丁,为什么g神们就没打上补丁呢,只好我们自己来修改源码,参考补丁地址是http://hg.libsdl.org/SDL/changeset/bbfb41c13a87,在源码目录找到并打开文件SDL_QuartzVideo.h,找到CGDirectPaletteRef palette所在行数,前后加入判断,如下: 
 #if (MAC_OS_X_VERSION_MIN_REQUIRED < 1070)
     CGDirectPaletteRef palette;            /* palette of an 8-bit display */
 #endif

5、至此我们就真的可以愉快的编译下去了,我使用的的是远程mac机器来编译,所以在ssh 到远程mac后切换到android src目录后执行
source build/envsteup.sh //导入一下环境变量
lunch 1  //估计生成arm-eng的编译配置吧
nohup make -j4 > ~/android-build.log 2>&1  & //很奇怪的是,需要重新登录ssh,才能顺利编译,在本地表现为需要重新打开新窗口,否则出现是奇怪分隔符错误。

至此,我们的make就在后台使用4线程去编译了,2小时完成生成了20G的out目录。 
  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。