Android源码的下载编译与导入到Android Studio
Posted Eateeer
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android源码的下载编译与导入到Android Studio相关的知识,希望对你有一定的参考价值。
转载请注明出处:http://blog.csdn.net/wl9739/article/details/51429242
如果只是为了看android源码的话,有一个很方便的方法,用Android studio打开一个项目,双击shift
,然后输入你想查看的类名,比如ListView
,再敲一下回车,就OK了。那么,为什么要大费周章地下载源码然后编译导入呢?因为
生命不息,折腾不止
哈哈,开个玩笑。
首先要注意一点,Android源码只能在Linux和Mac OS系统上进行编译,如果你使用的是Windows系统,可以在Linux虚拟机中进行编译。
如果你使用的是Mac OS,那么可以参考官网的这一篇文章来进行环境配置:Setting up a Mac OS build environment
如果是用的Linux系统,则可以参考这里:Setting up a Linux build environment
由于我使用的是Mac OS系统,所以下面所有的方法适合于Mac。
下载Android源码
创建一块大小写敏感的磁盘分区
由于Mac OS默认的是大小写不敏感的文件系统,而一些git的命令(比如git status)在这种系统中会有一些行为异常。所以我们要创建一个大小写敏感的分区,在Mac下,分区有两种方式:
可以使用Mac自带的磁盘工具
进行分区,注意选择的格式是:OS X扩展(区分大小写,日志式)
,建议大小为80G(下载源码需要36G,编译完后一共占用75G)。
官方推荐的做法是使用命令行:
$ hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 80g ~/android.dmg
该命令会创建一个后缀为.dmg
或.dmg.sparseimage
的文件。
如果在下载编译过程中需要将分区扩容,可以使用如下命令:
$ hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
安装jdk。
按照Software requirements的要求,jdk版本必须为jdk-7u71-macosx-x64
,如果电脑里面安装的是jdk8,则需重新下载安装。
为了方便,我在~/.bash_profile
文件中做了配置,方便jdk版本切换
export JAVA_7_PATH=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home
export JAVA_8_PATH=/Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home
export JAVA_HOME=$JAVA_7_PATTH
安装其他软件
然后需要下载MacPorts,安装完成之后调用下面的命令来下载安装其他需要的软件:
$ POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
如果这里报错了,说找不到
port
命令,就需要在~/.bash_profile
中添加一行:export PATH=/opt/local/bin:$PATH
。
当然,还需要安装Xcode。官网上要求Mac OS系统中需要使用的Xcode的版本很低,但实际证明,我电脑上使用的新版Xcode同样可以正常运行。
设置文件描述符限制
在Mac OS中,默认限制的同时打开的文件数量很少,不能满足编译过程中的高并发需要,因此,在~/.bash_profile
中添加下面的命令:
# set the number of open files to be 1024
ulimit -S -n 1024
编译源码
下载Repo
下载Repo之前,需要创建一个bin
文件,并且将路径写入到path中:
$ mkdir ~/bin
$ PATH=~/bin:$PATH
然后在命令行中输入下面的命令,下载Repo,并且修改属性:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
可以将Repo中的下载地址改为清华大学tuna镜像源,这样就不用挂着VPN下载了。编辑Repo,修改REPO_URL
后的地址:
REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
下载源码
现在,进入到我们创建的额分区,创建一个文件夹作为源码的根文件,进入根目录后,调用下面的方法,执行repo init:
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r17
完成之后,调用下面的命令来下载源码:
$ repo sync
由于下载源码的时间太长,中途可能会出现链接断开的情况,虽然repo同步是支持断点续传,但是不知道什么时候会断开,这一点很麻烦,所以可以写一个shell脚本来开启同步:
#!/bin/bash
#FileName get_android.sh
PATH=~/bin:$PATH
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r17
repo sync
while [ $? = 1 ]; do
echo "================sync failed, re-sync again ====="
sleep 3
repo sync
done
将上面的代码保存成get_android.sh,放在下载的源码的根目录下,输入下面的指令开始下载:
$ ./get_android.sh
完成后可以删除.repo/
文件:
$ rm -rf .repo/
编译源码
兼容处理
如果你和我一样,使用的是Mac OS 的EI Capitan系统,在编译之前,需要做一些兼容性处理。
打开build/core/combo/mac_version.mk
文件,在mac_sdk_versions_supported
变量后添加版本号10.11:
mac_sdk_versions_supported := 10.6 10.7 10.8 10.9 10.11
然后在源码根目录下调用下面的命令:
$ source build/envsetup.sh
或者为了少输入几个字母,你也可以用下面的命令代替:
$ . build/envsetup.sh
选择设备
$ $lunch
You're building on Darwin
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_mips-eng
4. aosp_mips64-eng
5. aosp_x86-eng
6. aosp_x86_64-eng
7. aosp_deb-userdebug
8. aosp_flo-userdebug
9. full_fugu-userdebug
10. aosp_fugu-userdebug
11. mini_emulator_arm64-userdebug
12. m_e_arm-userdebug
13. mini_emulator_mips-userdebug
14. mini_emulator_x86-userdebug
15. mini_emulator_x86_64-userdebug
16. aosp_flounder-userdebug
17. aosp_angler-userdebug
18. aosp_bullhead-userdebug
19. aosp_hammerhead-userdebug
20. aosp_hammerhead_fp-userdebug
21. aosp_shamu-userdebug
根据后缀可以判断出使用的场景如下:
类型 | 用途 |
---|---|
user | 权限少,用于刷机使用 |
userdebug | 和“user”类似,但可以root,并且可以调试 |
eng | 具有开发配置,并且有额外的调试工具 |
然后选择需要的类型,比如5。
安装驱动
从这里下载所需的驱动,下载完后解压,会发现三个.sh
文件,依次执行。如果不安装驱动的话,机器(真机和模拟器)运行时只能停留在启动界面。
编译
使用下面的命令开始编译源码:
$ make -j16
参数-jN
中的数字N,根据你电脑的线程数量的1~2倍来设置,比如我的电脑是双核CPU,每个CPU为双核心四线程,那么就有8个线程。所以我配置的数量为16。
编译过程中可能会失败,不过不用担心,再次编译的时候会接着编译,而不会从头开始编译。
运行
刷机
如果有真机并且连接到了电脑,准备刷机的话,输入以下命令:
$ adb reboot bootloader
进入刷机模式后,输入下面的指令:
$ fastboot -w flashall
运行模拟器
运行模拟器很简单,输入下面的命令即可:
$ emulator
导入到Android Studio
在导入到Android Studio之前,还需要进行一些处理。首先是要编译idegen模块,使用如下命令:
$ mmm development/tools/idegen/
m、mm、mmm命令可以让你只编译单独模块,而不用费大量的时间比编译整个Android系统。
如果你的shell和我一样使用的是zsh,而不是bash,使用mmm
就会得到错误信息。因为oh-my-zsh
是不支持mmm
的,具体可以参见:Android source code build commend “mm or mmm” couldn’t use in oh-my-zsh,因此,这里只能切换回bash,切换回bash的命令是chsh -s /bin/bash
。
当然如果你和我一样得到了错误信息
-bash: mmm: command not found
,那么就需要在源码目录下执行如下指令(点与build之间是有空格的):. build/envsetup.sh
然后在根目录生成对应的android.ipr、android.iml IDEA工程配置文件。使用以下脚本:
$ development/tools/idegen/idegen.sh
大概半分钟后(视你的电脑配置决定),会在源码根目录下生成android.ipr
和android.iml
。
使用Android studio
打开任意一个项目,然后选择File
->Open
,打开根目录下的android.ipr
文件夹,然后等待漫长的index完成后,就可以方便查看源码了。
以上是关于Android源码的下载编译与导入到Android Studio的主要内容,如果未能解决你的问题,请参考以下文章