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

|-- Makefile        (全局的Makefile) 

|-- bionic          (Bionic C库) 

|-- bootloader      (引导相关代码) 

|-- build           (build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具) 

|-- cts           (Android兼容性测试套件标准) 

|-- dalvik          (JAVA虚拟机) 

|-- development     (程序开发所需要的模板和工具) 

|-- external        (目标机器使用的一些库,android使用的一些开源的模组) 

|-- frameworks      (应用程序的框架层 核心框架) 

|-- fw_tools

|-- hardware        (部分厂家开源的硬解适配层HAL代码) 

|-- out                      (编译完成后的代码输出与此目录) 

|-- kernel          (Linux2.6的源代码) 

|-- packages        (Android的各种应用程序) 

|-- prebuilt        (Android在各种平台下编译的预置脚本) 

|-- sdk      (sdk及模拟器) 

|-- system          (底层文件系统库、应用及组件——C语言) 

`-- vendor          (厂商定制代码) 


bionic目录展开一个级别的目录如下所示: 

bionic 目录 

|-- libc                        (C库) 

|   |-- arch-arm        (ARM架构,包含系统调用汇编实现) 

|   |-- arch-x86        (x86架构,包含系统调用汇编实现) 

|   |-- bionic                (由C实现的功能,架构无关) 

|   |-- docs                (文档) 

|   |-- include                (头文件) 

|   |-- inet                (inet相关,具体作用不明) 

|   |-- kernel                (Linux内核中的一些头文件) 

|   |-- netbsd                (nesbsd系统相关,具体作用不明) 

|   |-- private                (一些私有的头文件) 

|   |-- stdio                (stdio实现) 

|   |-- stdlib                (stdlib实现) 

|   |-- string                (string函数实现) 

|   |-- tools                (几个工具) 

|   |-- tzcode                (时区相关代码) 

|   |-- unistd                (unistd实现) 

|   `-- zoneinfo        (时区信息) 

|-- libdl                        (libdl实现,dl是动态链接,提供访问动态链接库的功能) 

|-- libm                        (libm数学库的实现,) 

|   |-- alpha                (apaha架构) 

|   |-- amd64                (amd64架构) 

|   |-- arm                (arm架构) 

|   |-- bsdsrc                (bsd的源码) 

|   |-- i386                (i386架构) 

|   |-- i387                (i387架构) 

|   |-- ia64                (ia64架构) 

|   |-- include                (头文件) 

|   |-- man                (数学函数,后缀名为.3,一些为freeBSD的库文件) 

|   |-- powerpc        (powerpc架构) 

|   |-- sparc64                (sparc64架构) 

|   `-- src                (源代码) 

|-- libstdc++                (libstdc++ C++实现库) 

|   |-- include                (头文件) 

|   `-- src                (源码) 

|-- libthread_db        (多线程程序的调试器库) 

|   `-- include                (头文件) 

`-- linker                        (动态链接器) 

`-- arch                (支持arm和x86两种架构) 



bootloader目录展开的两个级别目录: 

bootloader/ 

|-- bootloader                                (适合各种bootloader的通用代码) 

|   `-- legacy                                (估计不能直接使用,可以参考) 

|       |-- arch_armv6                (V6架构,几个简单的汇编文件) 

|       |-- arch_msm7k                (高通7k处理器架构的几个基本驱动) 

|       |-- include                        (通用头文件和高通7k架构头文件) 

|       |-- libboot                        (启动库,都写得很简单) 

|       |-- libc                        (一些常用的c函数) 

|       |-- nandwrite                (nandwirte函数实现) 

|       `-- usbloader                (usbloader实现) 

|-- diskinstaller                        (android镜像打包器,x86可生产iso) 

`-- recovery                                (系统恢复相关) 

|-- edify                                (升级脚本使用的edify脚本语言) 

|-- etc                                (init.rc恢复脚本) 

|-- minui                                (一个简单的UI) 

|-- minzip                                (一个简单的压缩工具) 

|-- mtdutils                        (mtd工具) 

|-- res                                (资源) 

|   `-- images                        (一些图片) 

|-- tools                                (工具) 

|   `-- ota                        (OTA Over The Air Updates升级工具) 

`-- updater                        (升级器) 




build目录展开的一个级别的目录如下所示: 

|-- bootloader                                (适合各种bootloader的通用代码) 

|   `-- legacy                                (估计不能直接使用,可以参考) 

|       |-- arch_armv6                (V6架构,几个简单的汇编文件) 

|       |-- arch_msm7k                (高通7k处理器架构的几个基本驱动) 

|       |-- include                        (通用头文件和高通7k架构头文件) 

|       |-- libboot                        (启动库,都写得很简单) 

|       |-- libc                        (一些常用的c函数) 

|       |-- nandwrite                (nandwirte函数实现) 

|       `-- usbloader                (usbloader实现) 

|-- diskinstaller                        (android镜像打包器,x86可生产iso) 

`-- recovery                                (系统恢复相关) 

|-- edify                                (升级脚本使用的edify脚本语言) 

|-- etc                                (init.rc恢复脚本) 

|-- minui                                (一个简单的UI) 

|-- minzip                                (一个简单的压缩工具) 

|-- mtdutils                        (mtd工具) 

|-- res                                (资源) 

|   `-- images                        (一些图片) 

|-- tools                                (工具) 

|   `-- ota                        (OTA Over The Air Updates升级工具) 

`-- updater                        (升级器) 


build目录 


|-- core                                (核心编译规则) 

|-- history                                (历史记录) 

|-- libs                                

|   `-- host                        (主机端库,有android “cp”功能替换) 

|-- target                                (目标机编译对象) 

|   |-- board                        (开发平台) 

|   |   |-- emulator        (模拟器) 

|   |   |-- generic                (通用) 

|   |   |-- idea6410        (自己添加的) 

|   |   `-- sim                (最简单) 

|   `-- product                (开发平台对应的编译规则) 

|       `-- security        (密钥相关) 

`-- tools                                (编译中主机使用的工具及脚本) 

|-- acp                        (Android "acp" Command) 

|-- apicheck                (api检查工具) 

|-- applypatch                (补丁工具) 

|-- apriori                        (预链接工具) 

|-- atree                        (tree工具) 

|-- bin2asm                (bin转换为asm工具) 

|-- check_prereq        (检查编译时间戳工具) 

|-- dexpreopt                (模拟器相关工具,具体功能不明) 

|-- droiddoc                (作用不明,java语言,网上有人说和JDK5有关) 

|-- fs_config                (This program takes a list of files and directories) 

|-- fs_get_stats                (获取文件系统状态) 

|-- iself                        (判断是否ELF格式) 

|-- isprelinked                (判断是否prelinked) 

|-- kcm                        (按键相关) 

|-- lsd                        (List symbol dependencies) 

|-- releasetools                (生成镜像的工具及脚本) 

|-- rgb2565                (rgb转换为565) 

|-- signapk                (apk签名工具) 

|-- soslim                        (strip工具) 

`-- zipalign                (zip archive alignment tool) 




其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。 

envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。 

dalvik目录用于提供Android JAVA应用程序运行的基础————JAVA虚拟机。 

development目录展开的一个级别的目录如下所示: 

|-- apps                                (一些核心应用程序) 

|   |-- BluetoothDebug        (蓝牙调试程序) 

|   |-- CustomLocale        (自定义区域设置) 

|   |-- Development        (开发) 

|   |-- Fallback                (和语言相关的一个程序) 

|   |-- FontLab                (字库) 

|   |-- GestureBuilder        (手势动作) 

|   |-- NinePatchLab        () 

|   |-- OBJViewer                (OBJ查看器) 

|   |-- SdkSetup                (SDK安装器) 

|   |-- SpareParts                (高级设置) 

|   |-- Term                        (远程登录) 

|   `-- launchperf                () 

|-- build                                (编译脚本模板) 

|-- cmds                                (有个monkey工具) 

|-- data                                (配置数据) 

|-- docs                                (文档) 

|-- host                                (主机端USB驱动等) 

|-- ide                                (集成开发环境) 

|-- ndk                                (本地开发套件——c语言开发套件) 

|-- pdk                                (Plug Development Kit) 

|-- samples                        (例程) 

|   |-- AliasActivity        () 

|   |-- ApiDemos                (API演示程序) 

|   |-- BluetoothChat        (蓝牙聊天) 

|   |-- BrowserPlugin        (浏览器插件) 

|   |-- BusinessCard        (商业卡) 

|   |-- Compass                (指南针) 

|   |-- ContactManager        (联系人管理器) 

|   |-- CubeLiveWallpaper        (动态壁纸的一个简单例程) 

|   |-- FixedGridLayout        (像是布局) 

|   |-- GlobalTime                (全球时间) 

|   |-- HelloActivity        (Hello) 

|   |-- Home                        (Home) 

|   |-- JetBoy                        (jetBoy游戏) 

|   |-- LunarLander        (貌似又是一个游戏) 

|   |-- MailSync                (邮件同步) 

|   |-- MultiResolution        (多分辨率) 

|   |-- MySampleRss        (RSS) 

|   |-- NotePad                (记事本) 

|   |-- RSSReader                (RSS阅读器) 

|   |-- SearchableDictionary        (目录搜索) 

|   |-- SimpleJNI                (JNI例程) 

|   |-- SkeletonApp        (空壳APP) 

|   |-- Snake                        (snake程序) 

|   |-- SoftKeyboard        (软键盘) 

|   |-- Wiktionary                (维基) 

|   `-- WiktionarySimple(维基例程) 

|-- scripts                                (脚本) 

|-- sdk                                (sdk配置) 

|-- simulator                        (模拟器) 

|-- testrunner                        (测试用) 

`-- 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编译完成后的代码结构 

Android编译完成后,将在根目录中生成一个out文件夹,所有生成的内容均放置在这个文件夹中。out文件夹如下所示: 


out/ 


|-- CaseCheck.txt 


|-- casecheck.txt 


|-- host 


|   |-- common 


|   `-- linux-x86 


`-- target 


|-- common 


`-- product 




主要的两个目录为host和target,前者表示在主机(x86)生成的工具,后者表示目标机(模认为ARMv5)运行的内容。 




host目录的结构如下所示: 


out/host/ 


|-- common 


|   `-- obj              (JAVA库) 


`-- linux-x86 


|-- bin              (二进制程序) 


|-- framework        (JAVA库,*.jar文件) 


|-- lib              (共享库*.so) 


`-- obj              (中间生成的目标文件) 


host目录是一些在主机上用的工具,有一些是二进制程序,有一些是JAVA的程序。 




target目录的结构如下所示: 


out/target/ 


|-- common 


|   |-- R           (资源文件) 


|   |-- docs 


|   `-- obj         (目标文件) 


`-- product 


`-- generic 


其中common目录表示通用的内容,product中则是针对产品的内容。 


在common目录的obj中,包含两个重要的目录: 


APPS  中包含了JAVA应用程序生成的目标,每个应用程序对应其中一个子目录,将结合每个应用程序的原始文件生成Android应用程序的APK包。 


JAVA_LIBRARIES  中包含了JAVA的库,每个库对应其中一个子目录。 




在默认的情况下,Android编译将生成generic目录,如果选定产品还可以生成其他的目录。generic包含了以下内容: 


out/target/product/generic/ 


|-- android-info.txt 


|-- clean_steps.mk 


|-- data 


|-- obj 


|-- ramdisk.img 


|-- root 


|-- symbols 


|-- system 


|-- system.img 


|-- userdata-qemu.img 


`-- userdata.img 




在generic/obj/APPS目录中包含了各种JAVA应用,与common/APPS相对应,但是已经打成了APK包。 


system目录是主要的文件系统,data目录是存放数据的文件系统。 


obj/SHARED_LIBRARIES中存放所有动态库。 


obj/STATIC_LIBRARIES中存放所有静态库。 


几个以img为结尾的文件是几个目标映像文件,其中ramdisk是作为内存盘的根文件系统映像,system.img是主要文件系统的映像,这是一个比较大的文件,data.img是数据内容映像。这几个image文件是运行时真正需要的文件