想看看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