想看看Android的源码,然而在android.googlesource.com上在线查看有些不爽,不能支持代码跳转什么的,因此想把代码下载到本地用Android Studio查看。然而Git不支持下载部分子目录,得先把所有代码都clone下来才能查看。本来只想看看framework/base里面的代码,与其只下载这部分,还不如将AOSP的全部源码下载下来算了。

直接使用source.android上介绍的方法从google下载源码会很慢,因此,选择从清华开源镜像站下载。按照上面介绍的方法,下载得到全部的AOSP源码,但是还不能将其直接导入到Android Studio中,要先将源码编译一遍。

首先,Establishing a Build Environment。操作系统为Ubuntu 16.04 :

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache \
  libgl1-mesa-dev libxml2-utils xsltproc unzip

然后开始编译

$ source build/envsetup.sh
$ lunch aosp_x86_64-eng #(or pick your favorite lunch target)
$ make

make的过程会耗费很多时间,十个小时?首先应该是编译内核等一些cpp文件,然后再编译java文件。编译java文件时,可能会报错说堆大小不足,要重新设置一下

$ export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
$ ./prebuilts/sdk/tools/jack-admin kill-server
$ ./prebuilts/sdk/tools/jack-admin start-server

然后编译就完成了,会在out目录下面生成系统镜像什么的。接下来就要为导入到Android Studio做准备

可以先在development/tools/idegen/excluded-paths文件中加入不需要引入工程中的目录

^cts
^developers
^development
^external
.*/tests/.*
^sdk

然后开始生成配置

$ mmm development/tools/idegen/
$ development/tools/idegen/idegen.sh

运行完成后会在AOSP根目录生成android.ipr,android.iml等文件。使用Android Studio打开即可。

接下来,选择module 的SDK为 JDK,选择project的SDK为 android-SDK。然后把out/target/common/R目录mark as source dir。

若遇到File size exceeds configured limit (2560000). Code insight features not available.,则更改idea.properties:

idea.max.intellisense.filesize=5000

若遇到 External file changes sync may be slow: The current inotify(7) watch limit is too low.,则更改/etc/sysctl.conf

fs.inotify.max_user_watches = 524288

然后运行

sudo sysctl -p --system