build from source

Android是一个开源系统,源码都是公开的, 可以到http://source.android.com/上去下载源码。

具体的操作都在官网上这了:http://source.android.com/source/building.html

首先,需要的是一个unix环境,window就装虚拟机装ubuntu吧,很多build的工具也只能在unix环境下用。

然后是装各种需要的工具和依赖库,包括bison,gmake之类。

在macos上要注意的一点是mac默认安装的时候都是大小写不敏感的文件系统,而android framework的文件是区分大小写的,官方的说法是大小写不敏感会影响git对文件的处理。所以我们需要一块大消息区分的磁盘区域。

有些老教程做法是用mac自带的工具去分了一块新的大小写区分的磁盘。千万不要这么做!虽然mac的磁盘工具不会影响你的数据,但新磁盘分区设计到老磁盘分区的大小调整,速度是非常非常慢。中间如果出现断电或者其他异常,就哭吧。 现在官方的推荐做法是新建一个磁盘镜像.dmg文件,对就是你平时看到的软件安装文件,然后再把这个镜像文件挂载到自己的目录下。

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

上面的命令会创建一个大小为40g的大小写区分的磁盘镜像。这个大小是对4.+以上系统的要求,有些老教程会分20G,等到编译的时候就哭了。(是的,我之前就是看了一篇老教程=.= 还是官方的靠谱)

对于mac上来说,还一个就是设置下文件句柄的数量限制,印象中mac默认设置是256,而在并行编译的过程中打开的文件数很可能超过,所以官方也是建议提高上限:

ulimit -S -n 1024  

接下来我们就可以去下载源码了。

AOSP(Android Open Source Project)的源码管理也是用的git, 理论上来说你只要用git也就能clone项目了,但是你还是要去下一个小python脚本repo来帮助你管理源码。为什么? 因为aosp下面的项目实在是太多了,从list上来看目前有684个项目,如果用git来一个个下载管理的话,要多麻烦有多麻烦。

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

下载repo,然后执行

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

可以看到这是去访问了一个manifest路径,实际上就是把aosp的项目列表拉了下来,之后还会下载和生成一系列的辅助脚本。执行

$ repo sync

下载就开始了,repo默认是使用并行下载,也支持断点续传,看起来是基于git branch的。

之后就是默默的等待代码下好了。

default apps

系统默认的app都在android源码里面可以找到,如果只想看这些app的代码的话,可以去https://github.com/android 里面找, 搜索apps的项目就好了。

比如找Launcher,可以搜到platform_packages_apps_launcer这就是系统自带的默认启动launcher:

https://github.com/android/platformpackagesapps_launcher