Android源码:Mac下载及编译Android源码(支持移动移动)

作为一个android开发从业者,如果我们想不停的进度,没有android源码怎么能行呢!众所周知,Android开放源代码master分支历来都是在 Ubuntu Long Term Support (LTS) 版本中进行开发和测试,但您也可以使用其他 Ubuntu 分发版本。下面我们就在Mac上下载和编译源码。

参考链接(官方):

环境:http://source.android.com/source/initializing.html
下载:http://source.android.com/source/downloading.html 编译:http://source.android.com/source/building-running.html

系统要求

Mac OS (Intel/x86)

Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具有 Xcode 4.5.2 和命令行工具

Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具有 Xcode 4.5.2 和命令行工具

Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的开发者工具)

Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDK

JDK

有关较低 Android 版本的预编译路径和安装说明,请参阅安装 JDK。

Android 7.0 (Nougat) - Android 8.0 (O):Ubuntu - OpenJDK 8;Mac OS - jdk 8u45 或更高版本

Android 5.x (Lollipop) - Android 6.0 (Marshmallow):Ubuntu - OpenJDK 7;Mac OS - jdk-7u71-macosx-x64.dmg

Android 2.3.x (Gingerbread) - Android 4.4.x (KitKat):Ubuntu - Java JDK 6;Mac OS - Java JDK 6

Android 1.5 (Cupcake) - Android 2.2.x (Froyo):Ubuntu - Java JDK 5

Make

Android 4.0.x (Ice Cream Sandwich) 及更低版本需要将 make 3.82 还原到较低版本,以避免出现编译错误。

主要软件包

python.org 中提供的 Python 2.6 - 2.7

gnu.org 中提供的 GNU Make 3.81 - 3.82

git-scm.com 中提供的 Git 1.7 或更高版本

创建磁盘映像

我们可以直接在电脑磁盘上创建映像也可以在移动硬盘上,但是如果是校验代码,至少需要 100GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译或使用 ccache,则需要更多空间。在Mac上的磁盘那么贵的前提下,我建议还是使用移动硬盘吧!

您可以使用磁盘映像在现有的 Mac OS 环境中创建区分大小写的文件系统。要创建磁盘映像,请启动磁盘工具,然后选择“新建映像”。完成编译至少需要 25GB 空间;更大的空间能够更好地满足未来的需求。使用稀疏映像有助于节省空间,而且以后可以随着需求的增加进行扩展。请务必选择“Case sensitive, Journaled”存储卷格式。

image

您也可以通过 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 的磁盘映像,您可以向 ~/.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; }

装载 android 存储卷后,您将在其中开展所有工作。您可以像对待外接式存储盘一样将其弹出(卸载)。

安装所需程序包

可以参照官方文档安装就是。

设置文件描述符数量上限

在 Mac OS 中,可同时打开的文件描述符的默认数量上限太低,在高度并行的编译流程中,可能会超出此上限。

要提高此上限,请将下列行添加到 ~/.bash_profile 中:

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

安装 Repo

要安装 Repo,请执行以下操作:

确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:

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

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

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

初始化 Repo 客户端

必须使用之前创建的区分大小写的文件系统,一般挂载的新的盘是在/Volumes/ 路径下的

我分出来的区分大小写的文件系统名字是android 所以我cd进去就ok了

  1. 创建一个目录 mkdir XXX (XXX 是你自己取得名字)
    cd XXX

  2. 配置git信息

git config --global user.name "Your Name" 
git config --global user.email "you@example.com"
  1. 运行 repo init 以获取最新版本的 Repo 及其最近的所有错误更正内容。您必须为清单指定一个网址,该网址用于指定 Android 源代码中包含的各个代码库将位于工作目录中的什么位置。
repo init -u https://android.googlesource.com/platform/manifest

如果遇到repo: command not found 问题 请在初始工作目录输入

echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc 
export PATH=$PATH:$HOME/bin

第三步过程中可以通过梯子下载,由于首次更新非常大,可以使用国内镜像下载。

由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

使用方法如下:

wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP   # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

此后,每次只需运行 repo sync 即可保持同步。 强烈建议您保持每天同步,并尽量选择凌晨等低峰时间

Android Studio导入Android源码

在AS的bin目录下,打开studio64.vmoptions文件,修改成如下数值:

-Xms1024m
-Xmx1024m
生成AS项目配置文件

1、首先全局编译一次。
2、查看out/host/linux-x86/framework/idegen.jar是否存在;
若已不存在,先执行下面命令以生成它:

source build/envsetup.sh
lunch [选择刚全局编译时的参数]
mmm development/tools/idegen/

3、执行以下命令以生成所需配置文件。

development/tools/idegen/idegen.sh
导入系统源代码至AS

1、此时在根目录下,就已经生成了android.ipr、android.iml,可以将整个源代码导入AS。
2、(可选)设置模块过滤
有些不想导入AS的模块,可以通过在android.iml中加入excludeFolder,达到过滤效果。

<excludeFolder url="file://$MODULE_DIR$/.repo"/>
<excludeFolder url="file://$MODULE_DIR$/abi"/>
<excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/>
<excludeFolder url="file://$MODULE_DIR$/art"/>
<excludeFolder url="file://$MODULE_DIR$/bionic"/>
<excludeFolder url="file://$MODULE_DIR$/bootable"/>
<excludeFolder url="file://$MODULE_DIR$/out"/>
<excludeFolder url="file://$MODULE_DIR$/pdk"/>
<excludeFolder url="file://$MODULE_DIR$/prebuilts"/>
<excludeFolder url="file://$MODULE_DIR$/sdk"/>
<excludeFolder url="file://$MODULE_DIR$/system"/>
<excludeFolder url="file://$MODULE_DIR$/tools"/>
<excludeFolder url="file://$MODULE_DIR$/trusty"/>
<excludeFolder url="file://$MODULE_DIR$/vendor"/>
...

第一次导入时间有点长,耐心等待。

取消默认JDK和SDK依赖

   我们导入完源码后,我们就可以查看整个系统的源码啦,但是我们在跳转公共的类时,并没有跳转到frameworks目录下对应的源码类,而是jar包中的类,这不是我们想要的,我们需要让其跳转到相应的类中。我们就需要新建一个没有任何jar库的SDK给到系统源码项目的依赖。 

那我们要怎么创建一个没有jar的SDK呢?步骤如下:

  1. 右键项目名->Open Module Settings->Project->New(JDK)
    然后选择SDKs->新建一个jdk->删除Classpath目录下的所有包并命名为1.8(No Libraries) 如下图所示:


    屏幕快照 2019-01-16 上午3.53.22.png
  2. 选中Modules->Source->Excluded添加过滤,如下图:


    屏幕快照 2019-01-16 上午4.13.17.png
  3. 再选择Modules->Module SDK选择对应的api版本,并删除下面所有依赖包->然后通过"JARs or directores"依次只添加frameWork和external。

最后点击apply->ok,大功告成,完成上面的步骤后,公共的类就直接指向系统的源码啦。

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

推荐阅读更多精彩内容