osx 10.10.1编译 Android 4.4.4_r2

来源:互联网 发布:加强网络安全管理通知 编辑:程序博客网 时间:2024/06/03 08:20
一、下载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、修改系统框架源码,需要修改头文件如下

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h

:156:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/System/Library/Frameworks/QTKit.framework/Headers/QTMovieModernizer.h
:163:
编译qemu时候报错: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,在源码目录找到并打开文件./external/qemu/distrib/sdl-1.2.15/src/video/quartz/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目录。 

三、启动虚拟机,运行编译好的镜像
1、在src目录下设置好ANDROID_PRODUCT_OUT环境变量,否则启动虚拟机无反应就是ANDROID_PRODUCT_OUT的问题,会不会就是. ./build/envsetup.sh的bug呢?

export ANDROID_PRODUCT_OUT=$(pwd)/out/target/product/generic/

export ANDROID_HOST_OUT=$(pwd)/out/host/darwin-x86/


2、执行环境变量初始化脚本

source ./build/envsetup.sh

lunch 1

3、启动虚拟机

emulator -verbose #-verbose主要看虚拟机器的输出日志,方便问题排查

0 0