Android 2.2 源码结构分析

Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示: 

|– Makefile (全局的Makefile) 
|– bionic (Bionic含义为仿生,这里面是一些基础的库的源代码) 
|– bootloader (引导加载器) 
|– build (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) 
|– dalvik (JAVA虚拟机) 
|– development (程序开发所需要的模板和工具) 
|– external (目标机器使用的一些库) 
|– frameworks (应用程序的框架层) 
|– hardware (与硬件相关的库) 
|– kernel (Linux2.6的源代码) 
|– packages (Android的各种应用程序) 
|– prebuilt (Android在各种平台下编译的预置脚本) 
|– recovery (与目标的恢复功能相关) 
`– system (Android的底层的一些库) 

bionic目录展开一个级别的目录如下所示: 
bionic/ 
|– Android.mk 
|– libc 
|– libdl 
|– libm 
|– libstdc++ 
|– libthread_db 
`– linker 

bootloader目录展开的两个级别目录: 
bootloader/ 
`– legacy 
|– Android.mk 
|– README 
|– arch_armv6 
|– arch_msm7k 
|– fastboot_protocol.txt 
|– include 
|– libboot 
|– libc 
|– nandwrite 
`– usbloader 

build目录展开的一个级别的目录如下所示: 
build/ 
|– buildspec.mk.default 
|– cleanspec.mk 
|– core (各种以mk为结尾的文件,它门是编译所需要的Makefile) 
|– envsetup.sh 
|– libs 
|– target (包含board和product两个目录,为目标所需要文件) 
`– tools (编译过程中主机所需要的工具,一些需要经过编译生成) 

其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。 
envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。 
dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。 
development目录展开的一个级别的目录如下所示: 
development 
|– apps (Android应用程序的模板) 
|– build (编译脚本模板) 
|– cmds 
|– data 
|– docs 
|– emulator (仿真相关) 
|– host (包含windows平台的一些工具) 
|– ide 
|– pdk 
|– samples (一些示例程序) 
|– simulator (大多是目标机器的一些工具) 
`– tools 

在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,skins是仿真时手机的界面。 
samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用。 
external目录展开的一个级别的目录如下所示: 
external/ 
|– aes 
|– apache-http 
|– bluez 
|– clearsilver 
|– dbus 
|– dhcpcd 
|– dropbear 
|– elfcopy 
|– elfutils 
|– emma 
|– esd 
|– expat 
|– fdlibm 
|– freetype 
|– gdata 
|– giflib 
|– googleclient 
|– icu4c 
|– iptables 
|– jdiff 
|– jhead 
|– jpeg 
|– libffi 
|– libpcap 
|– libpng 
|– libxml2 
|– netcat 
|– netperf 
|– neven 
|– opencore 
|– openssl 
|– oprofile 
|– ping 
|– ppp 
|– protobuf 
|– qemu 
|– safe-iop 
|– skia 
|– sonivox 
|– sqlite 
|– srec 
|– strace 
|– tagsoup 
|– tcpdump 
|– tinyxml 
|– tremor 
|– webkit 
|– wpa_supplicant 
|– yaffs2 
`– zlib 

在external中,每个目录表示Android目标系统中的一个模块,可能有一个或者若干个库构成。其中: 
opencore为PV(PacketVideo),它是Android多媒体框架的核心。 
webkit是Android网络浏览器的核心。 
sqlite是Android数据库系统的核心。 
openssl是Secure Socket Layer,一个网络协议层,用于为数据通讯提供安全支持。 
frameworks目录展开的一个级别的目录如下所示: 
frameworks/ 
|– base 
|– opt 
`– policies 

frameworks是Android应用程序的框架。 
hardware是一些与硬件相关的库 
kernel是Linux2.6的源代码 

packages目录展开的两个级别的目录如下所示: 
packages/ 
|– apps 
| |– AlarmClock 
| |– Browser 
| |– Calculator 
| |– Calendar 
| |– Camera 
| |– Contacts 
| |– Email 
| |– GoogleSearch 
| |– HTMLViewer 
| |– IM 
| |– Launcher 
| |– Mms 
| |– Music 
| |– PackageInstaller 
| |– Phone 
| |– Settings 
| |– SoundRecorder 
| |– Stk 
| |– Sync 
| |– Updater 
| `– VoiceDialer 
`– providers 
|– CalendarProvider 
|– ContactsProvider 
|– DownloadProvider 
|– DrmProvider 
|– GoogleContactsProvider 
|– GoogleSubscribedFeedsProvider 
|– ImProvider 
|– MediaProvider 
`– TelephonyProvider 

packages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源)。 
packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的。 
prebuilt目录展开的一个级别的目录如下所示: 
prebuilt/ 
|– Android.mk 
|– android-arm 
|– common 
|– darwin-x86 
|– linux-x86 
`– windows 

system目录展开的两个级别的目录如下所示: 
system/ 
|– bluetooth 
| |– bluedroid 
| `– brfpatch 
|– core 
| |– Android.mk 
| |– README 
| |– adb 
| |– cpio 
| |– debuggerd 
| |– fastboot 
| |– include (各个库接口的头文件) 
| |– init 
| |– libctest 
| |– libcutils 
| |– liblog 
| |– libmincrypt 
| |– libnetutils 
| |– libpixelflinger 
| |– libzipfile 
| |– logcat 
| |– logwrapper 
| |– mkbootimg 
| |– mountd 
| |– netcfg 
| |– rootdir 
| |– sh 
| `– toolbox 
|– extras 
| |– Android.mk 
| |– latencytop 
| |– libpagemap 
| |– librank 
| |– procmem 
| |– procrank 
| |– showmap 
| |– showslab 
| |– sound 
| |– su 
| |– tests 
| `– timeinfo 
`– wlan 
`– ti 

你可能感兴趣的:(Android 2.2 源码结构分析)