Android的源代码结构 8/15/2009 8:19:54 PM hanchao3c Android开发者论坛原创,转载请注明)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`-- linkerbootloader目录展开的两个级别目录:bootloader/`-- legacy |-- Android.mk |-- README |-- arch_armv6 |-- arch_msm7k |-- fastboot_protocol.txt |-- include |-- libboot |-- libc |-- nandwrite `-- usbloaderbuild目录展开的一个级别的目录如下所示: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`-- policiesframeworks是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 `-- TelephonyProviderpackages中包含两个目录,其中apps中是Android中的各种应用程序,providers是一些内容提供者(在Android中的一个数据源)。packages中两个目录的内容大都是使用JAVA编写的程序,各个文件夹的层次结构是类似的。prebuilt目录展开的一个级别的目录如下所示:prebuilt/|-- Android.mk|-- android-arm|-- common|-- darwin-x86|-- linux-x86`-- windowssystem目录展开的两个级别的目录如下所示: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