您的位置:首页 > 移动开发 > Android开发

MAC OS X 10.10编译android5.0源码 步骤 以及 遇到的问题

2015-09-25 22:03 543 查看

编译前准备:

先安装port:macports下载地址

命令行执行:sudo port install pnupg git libsdl bison make

(注意:通常 不需要装make 和bison 因为后面会装xcode )

装xcode:最好APPSTORE下载,最近有个什么后门事件。

xcode装好后:装命令行工具:

命令行运行:xcode-select –install(注意:install前面 2个杠)

装jdk1.7 jdk1.6 这2个都要装(后面有说明)

jdk 1.7在oracle官网可下载,1.6在苹果官网 有下载(具体需要自行百度)

把jdk 1.7作为 首选jdk 也就是加入环境变量的时候 放在前面 而1.6放在后面

为android 分出一个 大小写敏感的分区 镜像 因为 android源码编译必须要大小写敏感的文件系统

~/下执行 hdiutil create -type SPARSE -fs ‘Case-sensitive Journaled HFS+’ -size 60g ~/android.dmg.sparsefile

建议:分区60G以上 最好100G 否则编译到中途 满了就蛋疼了

hdiutil attach ~/android.dmg.sparsefile -mountpoint /Volumes/android

挂载分区 这样在/Volumes/android下就是我们的源码分区了

在~/.bash_profile中添加以下内容:

#set the number of open files to be 1024

ulimit -S -n 1024

下载源码:

由于国内访问不了google的网站 所以下载源码通过清华镜像站来下载 包括repo

先下载源码仓库管理工具repo:

repo是一个python脚本文件,用来下载管理源码,实质是git

在~/bin下执行

git clone git://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/

并且把 repo加入环境变量 以便我们使用

直接修改~/目录下的.bashrc文件 加入环境变量

然后执行chmod a+x ~/bin/repo 以提供运行权限

修改repo文件:mvim(或其他编辑器) ~/bin/repo 里的REPO_URL改为:

REPO_URL = ‘git://aosp.tuna.tsinghua.edu.cn/android/git-repo’ 也就是 把google换成 清华镜像站

为什么不直接下载压缩好的源码:

有了repo 可以方便的同步源码 更新源码 切换各版本源码 并且可以随时下载某个 模块的源码 源码由众多的工程组成

下载好repo后 就可以开始下载源码了 :同样使用清华镜像站来下载,速度好 ,链接稳定

在我们刚刚建立的大小写敏感分区也就是:/Volumes/android/下执行:mkdir android-source

然后执行:

repo init -u

git://aosp.tuna.tsinghua.edu.cn/android/platform/mainfest -b android-5.0.1_r1 (-b选项指定分支)

注意分支r1 这个r几 和 要烧写到真机nexus 的 型号有关 如果要烧写则要注意

很快就可以init成功 然后就可以执行repo sync 同步源码到本地了

编译源码

下载完成后,就可以开始编译了,我大概下载了20个小时,中间断过一次,我编译的是android-5.0.1_r1的源码

源码根目录执行 source build/envsetup.sh 将编译源码所需要的命令 设置好

源码根目录执行 lunch aosp_arm-eng 该句表示:编译的版本为带全套debug工具的 版本 其他更多选项参见google官网

在源码根目录 执行make即可 开始编译

关于make -4j 多核处理器 可以加快编译速度 但 这么做 可能会引起内存撑到最大 导致编译 失败 建议make 慢慢编译

我编译 花了大约6小时

用模拟器运行编译好的源码

1.注意:模拟器运行源码 实质是加载内核 加载system.img 加载userdata.img 加载ramdisk.img 来运行的

内核文件在/Volumes/android/android-source/prebuilts/qemu-kernel/arm 下

其他三个文件在:

/Volumes/android/android-source/out/target/product/generic目录下

2.官网的步骤只有一个 任意目录执行emulator 如果发现 emulator command not found 就需要先执行:

source build/envsetup.sh

lunch sdk-eng

这样就可以执行运行emulator运行源码了

调试源码

要想自己写程序 在源码里 或修改源码文件 来运行 ,需要用到mmm命令.

该命令用于编译某个模块 这样就不需要全编译了

编译好模块后执行 make snod就会重新打包 成镜像文件

注意:mmm command not found 需要先执行source build/envsetup.sh

注意:需要编译的模块必须有Android.mk编译脚本文件 具体写法自行google 百度

遇到的问题

问题一 :can’t found xcode sdk 10.6

xcode sdk 版本问题。编译android5.0.1的编译脚本里有些使用10.6 10.7 10.8来编译 但我们装的都是新的xcode已经是10.9 10.10了

所以 我们修改编译脚本build/core/combo/mac_version.mk 将里面的 10.6 10.7 10.8改成 10.9 10.10

具体需要根据自己的sdk版本来 查看sdk版本:

/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

问题二:treat warnings as errors

make编译脚本里 有-Werror选项 会导致这个问题 这时 我们需要修改编译脚本 去掉-Werror选项

看是哪个模块报的错,例如:system/core/adb/get_my_path_darwin.c报错 那么可以定位为adb模块 修改system/core/adb/Android.mk文件 将里面的-Werror全都去掉

问题三:”stdarg.h” could not found file

include <stdarg.h>


造成该问题的原因是 xcode sdk 10.9已经没有这个文件了 有2个办法:

方法一:修改build/core/combo/HOST_darwin_x86.mk将:

ifeq ($(mac_sdk_version),10.8)里的10.8 换成10.9
该方法可能没有用

方法二:既然没有 我可以给它增加 让它有。实际上android源码里就有这些头文件:

源码根目录直接执行sudo cp -Rf prebuilts/misc/darwin-x86/analyzer/lib/clang/3.3/include/* /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include

这样就把 头文件复制过去了

问题四:”string” could not found file

include <string>


该问题和问题三同理 只不过该头文件位于:

external/libcxx/include 这里 同样 复制所有头文件到xcode sdk目录

问题五:com.sun.javadoc class not found

执行有些类 要导入javadoc包 会引起这个错误

解决该问题就需要安装jdk1.6了 也就是必须要1.7 1.6都由才能编译成功

问题六:空间不够了 我的mac才128G ,只分配了50g 给android源码,这个时候把android挪走 重新分区 是不可能的了 因为 外面的空间只有18G了

那么可以考虑把.repo文件夹删掉 这个文件夹有18G的空间占用,删掉不影响编译 但就不能方便源码管理了, 实在没有办法 只有出此下策。

问题七:在下载源码的时候repo sync如果断掉了,直接重新执行repo sync 就能继续 续传下载了

但有时候 可能会发生 还是下载不了 报fetch errors 那么可以执行repo sync –force-broken 来跳过下载不了的project 继续下载其他project

最后下载 完成的时候 这个broken project 没下载好的话 重新执行repo sync即可

如果还是无法下载:那么进入.repo 目录 把该project删掉 再执行repo sync 就可以继续下载了

最后:

一定要坚持,不要放弃,遇到任何问题都是能解决的,最后编译成功 真是无比巨大的喜悦,我从下载到编译 总共花了4天 。除了吃饭睡觉,就再搞这个。

为什么要编译Android5.0源码?

因为方便学习源码,而5.0源码可以导入android studio 无疑是最方便学习源码的方式 代码跳转 代码风格 都十分好 。关于导入请自行google 百度

本人参考的blog:mac os x10.10编译android 4.4.4源码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: