博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
build-android-in-OS-X-Yosemite-Xcode-7
阅读量:6938 次
发布时间:2019-06-27

本文共 2713 字,大约阅读时间需要 9 分钟。

hot3.png

摘自自己的github 

build-android-in-OS-X-Yosemite-Xcode-7

build whole android (AOSP) in Mac OS X Yosemite + Xcode 7.0.1(v10.5 SDK)

My environment:

Mac OX X 10.10.5(14F27)Xcode 7.0.1(7A1001)jdk1.7.0_80jdk1.8.0_51 (Default)

First of course, download AOSP by official  except that i use android-5.1.1_r14 branch instead of android-4.0.1_r1.

Then what i did especically are:

1. To avoid check error of OS X SDK version, run following command first:

export build_mac_version=`sw_vers -productVersion`  #for me, result is 10.10.5export mac_sdk_version=10.9  #this is the biggest version AOSP build system supportexport mac_sdk_root=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdkexport gcc_darwin_version=11

2. To skip disk case sensitive check and java version check, create a file TOP_AOSP_DIR/out/versions_checked.mk with contents:

VERSIONS_CHECKED := 5BUILD_EMULATOR ?= false

AOSP要求输出所在的文件系统区分大小写,这真是无稽之谈,我不相信有什么工具故意生成大小写不同的两个文件。而且java版本检查做的很笨,envsetup.sh里都能够正确的检测出了1.7了,为何这里就傻乎乎的非要执行1.8的java,还给我抱错!索性跳过去。

3. To avoid error of some header files not found, create a symbol link MacOSX10.11.sdk/...c++/v1 => xctoolchain/...c++/v1:

sudo ln -s /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/v1

这个是我用-v选项打印出include path list后发现的。Xcode 7就自动的使用了toolchain的那个c++/v1。这个v1似乎是C++11的意思。一开始我把v1指向和他同级别的4.2.1目录,结果在ld链接时发生很多std:string的符号找不到,查呀查,发现需要用libstdc++而不是默认的libc++。后来发现Xcode根本就不用这个4.2.1目录里的东西,而是toolchain那边的,这才发现4.2.1里都是GNU的C++头文件,而v1里的都是LLVM工程里C++头文件。

4. AOSP's prebuild compiler for host side can not handle some latest header file of OS X SDK, i have no way, so modify following two files:

$mac_sdk_root/System/Library/Frameworks/CoreGraphics.framework/Versions/A/Headers/CGFont.h:

53c53,54< static const CGFontIndex kCGGlyphMax = kCGFontIndexMax;---> //static const CGFontIndex kCGGlyphMax = kCGFontIndexMax;> static const CGFontIndex kCGGlyphMax = ((1 << 16) - 2);

$mac_sdk_root/System/Library/Frameworks/CoreServices.framework/Versions/A/Frameworks/FSEvents.framework/Versions/A/Headers/FSEvents.h:

489a490> #if MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_9495a497> #endif

就是在489行插入#if,495行插入#endif。这个改动使得10.10以下无效,10.10开始才有效,本来里面的内容就是这个前提的,所以不影响Xcode的使用。


OK, now you can , as a tip, you can add "showcommands" option to make, and even combine more like following commands to save output with timestamp prefix to log file.

make -j4 -k showcommands 2>&1 | (while read line; do echo `date +"%Y-%m-%d %H:%M:%S"` $line; done) | tee out/make.log

Good luck

转载于:https://my.oschina.net/osexp2003/blog/517967

你可能感兴趣的文章
Android 4.2 系统编译 找不到添加的内部资源 com.android.internal.R
查看>>
Spring Boot WebFlux + Server-sent事件示例
查看>>
Git for windows 中文乱码解决方案
查看>>
python 爬虫
查看>>
OpenGL超级宝典笔记——雾
查看>>
javaScript元素选择器
查看>>
核心交易链路架构设计与演进
查看>>
websocket-bench压力测试
查看>>
http://91.213.30.151/
查看>>
Android ViewStub详解
查看>>
JavaScript中的prototype、__proto__和constructor
查看>>
Android Studio更新升级方法
查看>>
iOS10全新方法实现推送+deviceToken无法获取或无效的解决
查看>>
centos7 修改selinux 开机导致 faild to load SELinux polic
查看>>
Spring3.1 Cache注解
查看>>
c++ ActiveX基础1:使用VS2010创建MFC ActiveX工程项目
查看>>
linux 基础入门一
查看>>
mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法
查看>>
java类初始化顺序-阿里笔试题
查看>>
ExecutorService线程池
查看>>