在Android源码中包含了很多的东西,如内嵌在Android系统中应用程序(如拍照、计算器、日历、拨号器等)的源代码;Android SDK带的各种工具(如adb、emulator等)的源代码;Android NDK的源代码;硬件抽象层HAL的源代码等等。
《Android源码解析》系列博文将记录下我学习Android源码过程中的点点滴滴。
1.安装Git工具
Android源代码采用了Git版本控制工具来进行管理。可以使用如下的命令在ubuntu操作系统上安装Git工具:
root@ubuntu:~# apt-get install git-core gnupg
安装过程中,遇到了【404 Not Found】的错误,如图1所示。
图1 【404 Not Found】错误
原因是在http://us.archive.ubuntu.com/ubuntu/源上找不到Git软件资源。解决办法是换一个有效的源。具体方法如下:
选择“Applications”菜单下的“Ubuntu Software Center”选项,在弹出的“Ubuntu Software Center”对话框中选择“Edit”菜单下的“Software Sources”选项,将弹出如图2所示的“Software Sources”对话框。
图2 “Software Sources”对话框
在如图2所示的“Software Sources”对话框中选择“Download from”中的“Other”选项。将弹出所图3所示的“Chose a Download Server”对话框。
图3 “Chose a Download Server”对话框
在如图3所示的“Choose a Download Server”对话框中选择“Select Best Server”,系统会自动寻找出最好的源来,最后点击“Choose Server”即可。
更换了源之后,Git就可以顺利的安装了。
2.下载repo工具
在下载Android源码之前,需要先下载一个repo工具,在这个工具中封装了用来下载Android源码所需要的git命令。
repo工具的下载和安装方法如下:
root@ubuntu:~# wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo root@ubuntu:~# chmod a+x repo root@ubuntu:~# mv repo /bin/
通过以上的操作,我们下载了repo工具,然后修改其权限为可执行,最后将repo工具放到了/bin目录下。
3.下载Android源代码
现在,我们就可以新建一个空目录,用来放置下载好的Android源码了。这里,我的存放目录为:/home/menlsh/AndroidSrc。
在AndroidSrc目录下执行如下的命令就可以开始下载Android源码了,这里我选择了下载Android4.0版本的源码。
root@ubuntu:/home/menlsh/AndroidSrc# repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1 root@ubuntu:/home/menlsh/AndroidSrc# repo sync
接下来,便是漫长的等待时间了。repo支持断点续存,所以如果在下载过程中碰到网络中断的现象,只需要重复执行repo sync命令就可以继续下载了。
在下载过程中,AndroidSrc目录中是没有文件内容显示的。下载完成后,会出现如图4所示“done”信息提示。
图4 下载完成
同时,在AndroidSrc目录中可以看到如图5所示的Android源码目录结构。
图5 Android源码目录结构
至此,Android源码便算是下载完成了。
4.Android源码目录结构解析
由图5可以看出,在Android源码目录中包含了很多的子目录,下面就来说说这些子目录所代表的含义。
(1)abi:应用程序二进制接口(Application Binary Interface)
(2)bionic:C/C++运行时库
(3)bootable:用于Android装载和启动程序,包括bootloader和recovery等
(4)build:用于编译Android源码以及建立system.img、ramdisk.img等文件的工具
(5)cts:用于兼容性测试的工具
(6)dalvik:Dalvik虚拟机的源代码
(7)development:一些开发和测试工具
(8)device:与设备相关的代码
(9)docs:Android源代码项目相关的文档和工具
(10)external:扩展工具的源代码
(11)frameworks:Android框架层源代码(也就是Android SDK的源代码)
(12)hardware:硬件层接口和库(HAL的源代码)
(13)libcore:Java核心库
(14)ndk:NDK的源代码
(15)packages:与Android系统一起发布的应用程序的源代码(如拍照、计算器等)
(16)prebuilt:Android在各种平台下编译之前要使用的工具
(17)sdk:在开发环境中使用到的工具(如ddms、draw9patch等)
(18)system:Android基本系统
(19)Makefile:编译脚本
在这些目录中,device、frameworks、hardware、packages将是我重点进行学习的对象,也将会是本系列博文的主要介绍内容。