在Mac下编译Android最麻烦的就是设置Android的编译环境了,做完这一步基本上剩下的就是近乎傻瓜式的操作了.说起来也简单就三步,设置大小写敏感的文件系统、安装编译工具、设置文件系统同时能打开的数量.

默认情况下,Mac OS运行在不区分大小写的文件系统上,git对这类型的文件系统支持不太好,有可能会导致git命令运行出错(比如git status)。因此,我们推荐在一个区分大小写的文件系统中,做与AOSP相关的操作。这很容易就可以用磁盘映像(disk image)做到,下面会讨论到.

一旦我们有了合适的文件系统,在Mac系统上编译master就变得非常简单、直接了。早起的分支,比如ICS,需要一些额外的工具.

创建大小写敏感的磁盘映像

为了创建一个大小写敏感的分区,我们可以使用带GUI界面的磁盘工具(Mac自带)或者使用命令行创建。根据我的经验,下载Android 6.0的代码大约需要50GB,编译后能膨胀到72GB。当然,如果磁盘空间紧张,下载源代码后,你可以手动将源码根目录下面的.repo目录删除,这样大约可以节省25GB的空间.

使用磁盘工具创建的步骤:

  1. 选择"新建映像(new Image)"
  2. 格式那里选择Mac Os扩展(区分大小写,日志式),大小至少选择50GB.

使用命令行创建

  1. 创建磁盘空间
hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg

这会创建一个.dmg(或者也与可能是一个.dmg.sparseimage)文件,一旦挂载上,就是一个Android开发所需要的文件系统格式的磁盘.

如果你需要调整磁盘空间的大小,可以使用下面的命令:

2. 调整磁盘空间的大小

hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage

android.dmg(android.dmg.sparseimage)会保存在home()目录下,你可以在/.bash_profile添加帮助函数:

使用mountAndroid来挂载映像:

# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }

使用 umountAndroid取消挂载:

# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }

完成后,就可以看见在/Volumes/中挂载了一个叫android的磁盘。

安装JDK

Android开源项目(AOSP)的master分支需要java 8.在Mac系统上使用jdk 8u45 或者更新的版本.

5.0.x的分支需要Java 7.在Mac上,使用 use jdk-7u71-macosx-x64.dmg

开发从版本Gingerbread(Android 2.3)到KitKat(Android 4.4)需要使用Java 6

安装需要的包

从Apple的开发者网站下载XCode。推荐使用3.1.4或者更新(比如gcc 4.2)版本4.X可能会导致一些问题.

对于我而言,我安装了最新的Xcode(7.2版本,SDK 版本MacOSX10.11),但是由于不是Android官方推荐的版本,在编译前还需要作一些修改,具体的后面会介绍.

从 macports.org安装MacPorts.

注意:要确保/opt/local/bin 在path中排在/usr/bin之前.如果没有添加下面的东西到/.bash_profile**文件中.如果没有**/.bash_profile文件,那么就创建一个

export PATH=/opt/local/bin:$PATH

从MacPorts获取make, git, and GPG packages :

$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

如果使用 Mac OS X v10.4, 还需要安装 bison:

$ POSIXLY_CORRECT=1 sudo port install bison

设置文件同时打开数量

在Mac中,默认的文件同时打开数实在太低,一个高速并行的编译进程运行时可能会遇到瓶颈。(注:Mac上限制最大打开文件数的原因是每打开一个文件,系统都需要内存来管理它们,内存是有限的资源)

为了增加最大文件打开数量,在~/.bash_profile中添加:

# 设置文件打开数量为1024
ulimit -S -n 1024

接下来,就可以下载Android的源代码了.剩下的就只是需要耐心了.

Mac下设置Android源代码编译环境的更多相关文章

  1. Mac 下设置Android 环境变量 NDK

    1. 启动终端Terminal 2. 进入当前用户的home目录 输入cd ~ 3. 创建.bash_profile    输入touch .bash_profile4. 编辑.bash_profil ...

  2. Mac下搭建quick cocos2d-x编译环境

    一. 我知道在你的电脑中一定已经安装好了Xcode(没有自己下载去吧),打开Xcode,开启"偏好设置"对话框(commond + ,).假设打开之后出现的是这种一个对话框,那么直 ...

  3. 在mac下设置环境变量

    在mac下设置环境变量   在基于unix/linux的操作系统下进行程序开发,使用环境变量将会方便.通过设置环境变量将可以在任意目录通过输入程序名来执行设定目录下的程序.不需要通过cd将工作目录改变 ...

  4. mac 下搭建 Android 开发环境

    因工作需要,要在mac 下搭建 Android 开发环境.谷歌.度娘了好久,没有找个一个完整又系统的方法,很是苦恼.最终,皇天不负有心人,找到了下面这篇文档,结合亲身体验,特此记录.也为有这方面需求的 ...

  5. Mac下改动Android Studio 所用的JDK版本号

    Mac下改动Android Studio 所用的JDK版本号 @author ASCE1885 近期项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式.自然 ...

  6. Android的编译环境--Build系统【转】

    本文转载自:http://blog.csdn.net/kitty_landon/article/details/60764232 Android是一个庞大的系统,包含太多的模块,各种模块的类型也有10 ...

  7. android源代码编译完毕之后

    android源代码编译完毕之后,在根文件夹下会有一个out文件夹生成,假设我们想要执行虚拟机的话,须要配置一下环境变量. 首先我们使用以下的命令打开配置环境变量的文件: gedit ~./bashr ...

  8. Mac下安装及配置Appium环境

    candiceli   Mac下安装及配置Appium环境 我是小白,自己研究appium好几周了. 一开始按照同事这篇文章设置Mac下的环境,http://www.cnblogs.com/tangd ...

  9. mac下通过docker搭建LEMP环境

    在mac下通过docker搭建LEMP环境境 1.安装virtualbox.由于docker是在lxc环境的容器 2.安装boot2docker,用于与docker客户端通讯 > brew up ...

随机推荐

  1. 再探JS数组原生方法—没想到你是这样的数组

    最近作死又去做了一遍javascript-puzzlers上的44道变态题,这些题号称"JS语言专业八级"的水准,建议可以去试试,这里我不去解析这44道题了, ...

  2. JavaScript高级程序设计-(1)html中使用JavaScript

    html中使用JavaScript 1.延迟脚本 script标签定义了defer属性,脚本会被延迟到整个页面都解析完毕后运行 详细内容如下: 2.异步脚本 script标签定义了async属性,as ...

  3. Tween Animation----Translate位置移动动画

    布局: 在res/下新建一个anim文件夹用来保存动画xml文件 新建一个translate文件 代码: <?xml version="1.0" encoding=" ...

  4. Java设置session超时(失效)的三种方式

    1. 在web容器中设置(此处以tomcat为例) 在tomcat-6.0\conf\web.xml中设置,以下是tomcat 6.0中的默认配置: <!-- ================= ...

  5. myeclipse 无法启动

    1.对项目中的一个文件重新命名,导致卡死,结束myeclipse进程不管用,重启不管用. 删除工程下的文件  以  .markers.snap 和  marker开头的两个文件   位置: 工作空间\ ...

  6. DataGridView 在下拉框添加下来事件

    DataGridView中有一种下拉框式的列,给这个列添加下拉事件时需要转化一下才可以绑定下拉事件 /// <summary> /// 服务类型 /// </summary> ...

  7. PHP:函数赋参数默认初值

    函数的默认参数 允许定义函数时,指定参数的默认值,如: function js_location($url, $alert='', $top=''){ if($alert=='' && ...

  8. OpenCV学习笔记(一)——OpenCV3.1.0+VS2015开发环境配置

    摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的, ...

  9. 让div垂直居中的5种方法

    方法一: 这个方法把 div 的显示方式设置为表格,然后我们可以使用表格的 vertical-align property 属性. HTML & CSS: <div class=&quo ...

  10. Angularjs ng-if和ng-show的区别

    ng-if:判断条件,为true时向html中插入节点,否则从html中移除节点: ng-show: 简单的显示和隐藏(display) 坑点:ng-if会创建一个新的作用域(scope),如果内部元 ...