编译前准备:
先安装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
这样就把 头文件复制过去了
- 方法一:修改build/core/combo/HOST_darwin_x86.mk将:
问题四:”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源码