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

编译前准备:

  1. 先安装port:macports下载地址

  2. 命令行执行:sudo port install pnupg git libsdl bison make
    (注意:通常 不需要装make 和bison 因为后面会装xcode )

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

  4. xcode装好后:装命令行工具:
    命令行运行:xcode-select –install(注意:install前面 2个杠)

  5. 装jdk1.7 jdk1.6 这2个都要装(后面有说明)
    jdk 1.7在oracle官网可下载,1.6在苹果官网 有下载(具体需要自行百度)
    把jdk 1.7作为 首选jdk 也就是加入环境变量的时候 放在前面 而1.6放在后面

  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下就是我们的源码分区了

  7. 在~/.bash_profile中添加以下内容:
    #set the number of open files to be 1024
    ulimit -S -n 1024

下载源码:

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

  1. 先下载源码仓库管理工具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换成 清华镜像站

  2. 为什么不直接下载压缩好的源码:
    有了repo 可以方便的同步源码 更新源码 切换各版本源码 并且可以随时下载某个 模块的源码 源码由众多的工程组成

  3. 下载好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的源码

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

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

  3. 在源码根目录 执行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 百度

遇到的问题

  1. 问题一 :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

  2. 问题二:treat warnings as errors
    make编译脚本里 有-Werror选项 会导致这个问题 这时 我们需要修改编译脚本 去掉-Werror选项
    看是哪个模块报的错,例如:system/core/adb/get_my_path_darwin.c报错 那么可以定位为adb模块 修改system/core/adb/Android.mk文件 将里面的-Werror全都去掉

  3. 问题三:”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
      这样就把 头文件复制过去了
  4. 问题四:”string” could not found file
    include <string>
    该问题和问题三同理 只不过该头文件位于:
    external/libcxx/include 这里 同样 复制所有头文件到xcode sdk目录

  5. 问题五:com.sun.javadoc class not found
    执行有些类 要导入javadoc包 会引起这个错误
    解决该问题就需要安装jdk1.6了 也就是必须要1.7 1.6都由才能编译成功

  6. 问题六:空间不够了 我的mac才128G ,只分配了50g 给android源码,这个时候把android挪走 重新分区 是不可能的了 因为 外面的空间只有18G了
    那么可以考虑把.repo文件夹删掉 这个文件夹有18G的空间占用,删掉不影响编译 但就不能方便源码管理了, 实在没有办法 只有出此下策。

  7. 问题七:在下载源码的时候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源码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值