Android源码编译环境

AOSP:Android Open Source Project
使用Linux 或 Mac OS,Windows下暂不支持。

选择分支

选择要编译的分支版本

创建Mac OS构建环境

默认安装下,Mac OS运行在大小写保留但大小写不敏感的文件系统上。

创建一个大小写敏感的磁盘映象
方法1:使用Mac OS下的“磁盘工具”

在Mac OS下,可以使用磁盘映象创建大小写敏感的文件系统。启动磁盘工具并选择“新建映象”创建映象。完成编译需要至少25GB。确保选择“区分大小写,日志式”作为卷格式。

方法2:使用shell命令

使用下面命令创建

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

上面的命令会生成一个.dmg(或.dmg.sparseimage文件),挂载该文件,就可以作为android源码编译环境。

使用下面命令扩容

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

android.dmg存储在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; }

安装JDK

Android不同版本对JDK的要求,参见Requirements

安装需求包
安装xcode
$ xcode-select --install
macports.org安装MacPorts

确保在你的路径中,/opt/local/bin出现在/usr/bin前。否则,在~/.bash_profile中添加如下内容:

export PATH=/opt/local/bin:$PATH
从MacPorts获取make, git, 和 GPG 包
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg

如果是Mac OS X v10.4,安装bison:

$ POSIXLY_CORRECT=1 sudo port install bison
从make 3.82恢复

Android 4.0.x或更早的版本,在gmake 3.82中有一个bug阻止android构建。根据下面步骤使用MacPorts安装3.81:

编辑/opt/local/etc/macports/sources.conf,增加下面这行内容:
file:///Users/Shared/dports

然后创建这个目录:

$ mkdir /Users/Shared/dports
dports目录下,运行:
$ svn co --revision 50980 http://svn.macports.org/repository/macports/trunk/dports/devel/gmake/ devel/gmake/
为该新的本地库创建一个port index
$ portindex /Users/Shared/dports
安装老版本gmake
$ sudo port install gmake @3.81
设置文件描述符限制

为了提高上限,在~/.bash_profile中添加以下内容:

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

下载源码

安装Repo

Repo是一个使Git在Android上下文环境中更容易工作的工具。Repo更多信息,参见Developing

确保在home下有bin/目录,并包含在你的路径中:

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

下载Repo工具并确保其可执行:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo

对于版本1.21,repo的SHA-1校验和:b8bd1804f432ecf1bab730949c82b93b0fc5fede
对于版本1.22,repo的SHA-1校验和:da0514e484f74648a890c0467d61ca415379f791
对于版本1.23,repo的SHA-1校验和:ac9d646f6d699f6822a6bc787d3e7338ae7ab6ed

初始化Repo客户端

安装Repo后,设置你的client访问Android源码repository。

创建一个空目录保存工作文件
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
配置git。为了使用Gerrit代码review工具,需要一个注册Google账户的邮件地址。
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
运行repo init获取Repo的最新版本。必须指定manifest的特定URL。
$ repo init -u https://android.googlesource.com/platform/manifest

为了检出branch而不是"master",指定-b分支列表

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

初始化成功,你的client目录会包含.repo目录。

下载Android源码树

从远程仓库拉取Android源码树到工作目录。

$ repo sync

For more about repo sync and other Repo commands, see the Developing section.
更多关于repo sync或其他Repo命令信息,参见Developing

用户认证

默认情况,访问Android源码是匿名的。为了防止对服务器的过度使用,每个IP地址一个限额。
当共享IP地址时,限额会触发一定的使用规则(如限制一定时间内的访问等)。
这种情况下,可以使用认证访问,其对每个用户使用独立的限额,而不顾IP地址。
第一步使用密钥生成器创建密钥并跟随其页面指示操作。
第二步强制认证访问,使用manifest URI:https://android.googlesource.com/a/platform/manifest
/a/路径前缀触发强制认证。下面的命令,转换已存在的client为使用强制认证:

$ repo init -u https://android.googlesource.com/a/platform/manifest

准备编译

如果你要编译Android6.0或更新版本,查看Compiling with Jack获取更多信息。

获取专用二进制文件

AOSP不能仅从纯代码中使用,也需要运行附加的硬件依赖库,例如硬件图形加速。有关其他资源的下载链接和设备二进制文件要求,请参阅以下部分。

下载专用二进制文件

你可以从Google's Nexus驱动程序界面 下载支持设备运行带AOSP版本分支标签的代码的官方二进制文件。这些二进制文件通过非开放源代码添加对附加硬件功能的访问。要改为构建AOSP主分支,请使用Nexus设备的二进制预览。在为设备构建主分支时,请使用最新编号版本或最近日期的二进制文件。

额外的专用库

每个二进制文件集合都作为在压缩归档中一个自解压脚本。解压缩每个归档,从源树根目录运行包含的自解压缩脚本,然后确认您同意所附许可协议的条款。二进制文件及其匹配的makefile将安装在源代码树的vendor/层级中。

清理

为了保证最新安装的二进制文件在解压后被正确应用,使用下面命令删除之前构建的输出:

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,827评论 25 707
  • Android 处理7.0以上的权限,有些东西会报空,比如打开相机黑屏,FileNotFund,打开处理资源之前先...
    XINHAO_HAN阅读 1,445评论 0 1
  • 春暖花开 燕飞蝶舞 简单的线稿 铺紫色和黄色打底,然后黑色分出亮色部分 加深局部,黄色有部分需要加深一个色 使出洪...
    秋日暖阳中的银杏叶阅读 598评论 4 14
  • 碧玺是彩宝界的新宠儿,吸引越来越多的投资者关注,价格每年都在上涨,是水晶中能量最强的,据说她的能量可以随温度而转化...
    哟Rita阅读 230评论 0 0
  • 兰收到信后,很伤心,哭了。视频中, “你的泪光柔弱中带伤惨白的月弯弯勾住过往夜太漫长凝结成了霜是谁在阁楼上冰冷地绝...
    阿信说阅读 220评论 0 1