Mac系统下编译Android系统源代码

前言

我们知道,Android OS是基于Linux内核的移动操作系统,主要分成了

  • Application
  • ApplicationFramework(Java)
  • System Libraries(Native C/C++)/Android Runtime
  • HAL(Hardware Abstraction Layer)
  • Linux Kernel

这几个部分。

作为一个Android Developer,熟练使用Android系统API是必不可少的(Application),但是在进阶的道路上,揭开API的『面具』,直面API背后的Android FW/Linux Kernel同样是一条必经之路。

今天就介绍一下,如何在Mac OSX上进行Android系统源代码的编译。


正文

AOSP 是Google领导的Android系统开源项目,旨在为开发者创建定制的Android堆栈版本提供源代码以及相关信息。AOSP的相关简介可以在这里查看。

下面就分步进行Android系统源码的编译:

1. 创建区分大小写的磁盘映像

AOSP项目使用git进行版本控制,mac默认的磁盘对大小写是非敏感的,在这类文件系统中,可能导致git的一些命令失效(比如:git status),因此需要创建出一个Case-sensitive的磁盘映像来存储AOSP项目代码。

  • 创建磁盘空间:

     hdiutil create -type SPARSE -fs ‘Case-sensitive Journaled HFS+‘ -size 40g ~/    android.dmg

    执行完成后,会在用户根目录(命令行cd ~)创建出一个未挂载的磁盘映像android.dmg(也可能是android.dmg.sparseimage)

  • 调整磁盘大小:
    创建完成后,可对磁盘空间的大小进行调整
    hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

这里如果想要完整编译master分支,resize的大小建议120G左右,否则空间不足会导致编译重置,并且mac存储空间中会多一部分无法删除的占用。

双击用户目录的android.dmg.sparseimage即可挂载磁盘空间。

2. 安装JDK

需注意,AOSP项目必须基于Open JDK的版本。

  • 对于5.0.x的Android版本,需要下载安装JDK7
  • 对于4.4及以下的版本,需要安装JDK6
  • 对于master分支或者6.0+的版本,安装最新的JDK版本

3. 安装Xcode

  • 从App store下载xcode安装,完成后执行

    $ xcode-select --install

    Note:这里最好再运行一下

    sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

    以防后面的步骤出现warning:

      Warning: Xcode appears to be installed but xcodebuild is unusable; some ports will likely fail to build.
    

4. 安装MacPorts

  • 根据自己的系统来选择 MacPorts的下载地址
  • 编辑.bash_profile文件(如果没有此文件,vi会自动创建)
    vi ~/.bash_profile
  • 复制export PATH=/opt/local/bin:$PATH到.bash_profile文件中。
  • 激活MacPorts命令:
    source ~/.bash_profile

5. 通过MacPorts安装Make、Git、GPG

POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

同时,由于mac中允许同时打开的文件描述符数较低,复制以下文本至.bash_profile文件中:

ulimit -S -n 1024

6. 下载源代码

可以参阅 [官方教程]

  • 确保主目录下有一个bin/目录,在.bash_profile中添加:

    mkdir ~/bin
    PATH=~/bin:$PAT

    激活:

    source ~/.bash_profile
  • 下载repo
    curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    chmod a+x ~/bin/repo

    关于repo的介绍,看这里

  • 初始化repo
    挂载的磁盘目录一般在/Volumes文件夹下,cd /Volumes进去后,找到挂载的磁盘名,cd进入磁盘目录后:
    repo init -u https://android.googlesource.com/platform/manifest
  • 开始下载源码
    repo sync

    Note:这里下载的为AOSP master分支的代码,也就是当前最新的Android版本。如需repo特定分支,请使用:

    repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

    你可以从这里查看源代码的各版本分支

    如需使用本地镜像或者需要验证git,请参阅官方教程。

7. 编译

编译过程在经历了多个Android版本之后变得更加简单明了。可以参考 [官方教程]

  • 设置环境

    source build/envsetup.sh
  • cd到源代码目录后:
    make -j17

    GNU Make 可以借助 -jN 参数处理并行任务,通常使用的任务数 N 介于编译时所用计算机上硬件线程数的 1-2 倍之间。

Note:此博文仅编译代码用于查看系统代码。如需要设备调试或者需要修改代码,请参阅郭霖的博客

8. 在AndroidStudio中查看源码

关于AndroidStuido的下载以及介绍,请移步 Android Studio官方网站

  • 编译完成后,cd到源代码目录,如/Volumes/android/source,执行:

    mmm development/tools/idegen/
  • idegen完成后,执行:
    sh ./development/tools/idegen/idegen.sh
  • 以上两步完成以后,打开AndroidStudio -> File -> Open -> 源代码目录 -> android.ipr,即可在AndroidStuido中查看Android源代码。

写在后面

网上其实有很多编译源码的教程,但是大多都是比较老旧的版本,亲测下来最新的master分支已经解决了很多遗留的编译问题。

整个过程并没有很复杂,最难以应对的就是mac昂贵的硬盘空间了,256G的HD结结实实折腾了几次才最终编译完成。

遇到问题多看官方文档才是最正确的姿势。

原文地址:https://www.cnblogs.com/y1011/p/11805026.html

时间: 2024-10-03 23:38:15

Mac系统下编译Android系统源代码的相关文章

在mac os下编译android -相关文章

1. Mac OS X下编译Android源码 http://blog.csdn.net/bulreed/article/details/22783467 2.MAC OS 编译 Android源代码 http://blog.sina.com.cn/s/blog_768cfa5901011zod.html 3. Setting Up A Build Environment on OS X 10.9 Mavericks http://blog.csdn.net/michaelpp/article/

Linux系统下编译连接C源代码

gcc test.c -o test 一步到位的编译指令 得到 test 文件 gcc test.c 得到 test.out 文件 gcc -g -c test.c -o test 只生成目标文件(.obj文件),没有生成可执行文件(也就是说test是.obj文件) gcc -g test.c -o test 生成可执行文件(可以通过./test运行程序) -g:生成调试信息.GNU 调试器可利用该信息. -c:只编译并生成目标文件.(没有中间文件生成和可执行文件,如列表文件.可执行文件) -o

【转】ubuntu 11.10(32位系统)下编译android源码

原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3.3源码,编译之前请确定上两篇文章(http://www.cnblogs.com/dwayne/archive/2011/11/16/2250732.html和http://www.cnblogs.com/dwayne/archive/2011/11/11/2245383.html)中所需的准备工作

【Android 系统开发】 编译 Android 系统 u-boot 内核 源码 并烧写到 OK-6410A 开发板上

博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 Android 光盘 下载地址 : http://pan.baidu.com/share/link?shareid=3662728609&uk=2754759285 ; -- 光盘所含内容 : Android 引导 u-boot 源码, Android 内核 源码, Android 系统源码, 交叉编

移植 libuv 到 Visual C++ 6.0 并支持在 Windows XP 系统下编译

移植版的 libuv:https://github.com/liigo/libuv-vc6 (支持VC6和XP,作者Liigo). 我从一年前(大概2013年6,7月份)开始在业余时间做这项移植工作,走走停停,陆续用了一两个月的时间,才基本完成.这期间做了详细的移植记录,现在发布出来,希望对某些人有用.就在昨天(2014年7月12日),我又把移植的代码同步到最新的libuv(https://github.com/joyent/libuv)并发布到Github上:但是之前的移植记录没有变更,或许在

编译Android系统源码和内核源码

好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,但是我说句真心话,那些只能提供参考,因为你的工作环境毕竟和他不一样,所以等你按照他的步骤去操作的时候还是会遇到很多问题,当然我写这篇文章

FW 编译Android系统源码和内核源码

编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操作,

【转】编译Android系统源码和内核源码

原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现最近的脑子不够用了,今天写点什么呢?就把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看重的不是结果,主要是过程,在这个过程中,我感觉最大的收获就是学习的耐心和毅力,因为在这个过程中那个问题就像是雨点似的天天打在你的脸上,虽然现在网上有很多文章介绍怎么去操

win7在64位系统下编译openssl

以前在笔记本上配置过openssl-0.9.8g版本,今天在公司的台式机上配置死活没配置成功,机器的系统是win7,64位,编译openssl-1.0.1e出现各种莫名的错误,最后无意中编译了1.0.0.a版本编译成功了. 如果出现ml找不到的时候,直接在vc10.0/bin下拷贝就好. 参考文章:http://blog.chinaunix.net/uid-20479991-id-216269.html win7在64位系统下编译openssl,布布扣,bubuko.com