编译Android 源码

本文主要包含以下几个方面

  1. 创建Android源码的编译环境(Mac OS X)
  2. 下载Android源码
  3. 编译Android源码
  4. 将Android源码导入到Android Studio阅读

本文所依赖运行环境

  1. Mac OS X 10.11.2
  2. JDK 8
  3. Xcode 7.2

创建Android源码的编译环境(Mac OS X)

一、创立一个大小写敏感的磁盘镜像

因为Mac OS 文件管理系统对于文件名大小写特殊处理,我们需要建立一个大小写敏感的磁盘镜像
我们可以用Mac OS自带的磁盘工具软件,也可以使用命令行,在终端中敲入:

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

这样就在你的HOME目录下建立了一个名字为android.dmg或者android.dmg.sparseimage的文件。
如果你随后想调整该磁盘镜像的大小,可以使用以下命令:

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

现在,你已拥有一个在HOME目录下得android.dmg或者android.dmg.sparseimage文件。
所以你可以在你的~/.bash_profile中加入以下方法:
加载镜像:

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

卸载镜像:

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

二、安装必须的软件和包库

1.安装JDK

最近的Android版本(master分支)安装 jdk 8u45 或者更新的。所需jdk版本参考链接:https://source.android.com/source/requirements.html

2.必需的包
  1. 安装Xcode
  2. 安装MacPorts
  3. 通过MacPorts安装gmake、git 和GPG
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

如果使用Mac OS X v10.4,还需要

$ POSIXLY_CORRECT=1 sudo port install bison
3.设置文件描述符限制

在Mac OS,在同时进行的文件描述符数的缺省限制开太低,高度并行构建过程可能会超过此限制。
为了提高上限,添加以下行到你的〜/ .bash_profile中:

# set the number of open files to be 1024
ulimit -S -n 1024

下载Android源码

一、安装Repo

1.确保拥有~/bin目录
$ mkdir ~/bin
$ PATH=~/bin:$PATH
2.下载Repo工具并确保他是可执行的
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

二、安装一个Repo Client

1.建立代码要下载到的目录:

在第一项内容中我们已经建立了一个区分大小写的磁盘镜像,加载之,然后在里面执行:

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
2.设置您的Git账户:
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
3.执行repo init ,你必须指定一个mainfest的URL,这将决定接下来下载的版本。
$ repo init -u https://android.googlesource.com/platform/manifest

如果需要下载一个master之外的分支,通过-b 指定。所有分支的列表: Source Code Tags and Builds

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

执行完成会看到相应提示,这时Repo客户端的目录下将会包含.repo 目录。

三、开始下载代码

$ repo sync

取决于你的网速。这将会花费一个小时或者更多时间才能下载完。

编译Android源码

设置环境

$ source build/envsetup.sh

或者

$ . build/envsetup.sh

选择一个编译的目标

$ lunch aosp_arm-eng
Buildtype Use
user limited access; suited for production
userdebug like "user" but with root access and debuggability; preferred for debugging
eng development configuration with additional debugging tools

编译源码

$ make -j4

编译过程中遇到的问题
据说人品好的可以一次编译通过,但是我在其中遇到了几个问题:
1.内存移除 给出的提示是:GC overhead limit exceeded Try increasing heap size with java option '-Xmx<size>'
于是我根据提示增加了分配内存:

export JVM_ARGS="-Xmx4096m -XX:MaxPermSize=1024m"

之后再次运行,编译一段时间后依然OOM报错:
于是我再次增加了内存:

export JVM_ARGS="-Xmx6144m -XX:MaxPermSize=2048m"

运行一段时间依然报错...只能求助Google:得一文:http://www.cnblogs.com/hucn/p/3572384.html
将设置改为:

export JVM_ARGS="-Xmx6144m -XX:-UseGCOverheadLimit"

重新编译,然后虽得到无数Warning,漫长等待后还是编译通过了。

将Android源码导入到Android Studio阅读

请参考工匠若水的博客,写的很详细:
使用Android Studio导入源码

参考链接

Android 源码官网
OS X 10.11下载和编译Android6.0源码
Mac OSX 10.11 EI 编译 Android 6.0 Marshmallow 源码
在Mac 10.11中编译Android 6.0源码
Android Open Source Project Site

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,045评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,114评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,120评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,902评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,828评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,132评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,590评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,258评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,408评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,335评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,385评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,068评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,660评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,747评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,967评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,406评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,970评论 2 341

推荐阅读更多精彩内容