Android系统源代码目录结构 “Android源代码”“目录结构”

博观而约取,厚积而薄发。这篇文章主要讲述Android系统源代码目录结构 “Android源代码”“目录结构”相关的知识,希望能为你提供帮助。
在讲述android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置。
Android源代码顶层目录结构如下所示:
├──abi #应用二进制接口,不同的操作系统,应用二进制接口不同,因此linux上的二进制可执行文件在windows上无法执行
├──android #存放了一些xml文件,用于描述工程路径及其对应的远程仓库地址,repo工具将使用这些信息同步代码
├──bionic #bionic C库,Android没有使用标准的glibc库,而是自己重新实现了一套c/C++库,包括libc libdl libm libstdc++ libthread_db;
├──bootable #启动引导程序的源代码;包含两个工程:bootloader、recovery和diskinstaller,刷机或者系统升级都是由recovery完成的;
├──build #Android编译系统核心代码都存放在该目录,包含makefiles、scripts和其他工具;
├──cts #Android兼容性测试套件标准。Android设备如果需要google认证,就需要通过google的兼容性检测,目的是确保该设备系统具有标准的SDK API接口;
├──dalvik #dalvik java虚拟机,专用于Android设备的java虚拟机;
├──development #开发所需要的一些例程、文档和工具等;
├──device #设备相关配置文件;不同厂商设备相关的diamante和编译脚本等;
├──docs #介绍开源相关的source.android.com文档;
├──external #用到的第三方库,包括:bluetooth、skia、sqlite、freetype、webkit等功能库和一些工具库,系统运行库层(Libraries)大部分代码均存放于此;
├──filelist #使用godir命令生成的索引文件
├──frameworks #Android应用框架层代码,为应用层提供API。应用层框架提供了可以服用的组件,提供了应用开发的规范,屏蔽了应用层和底层交互的复杂性;
├──gdk #glass开发Sdk
├──hardware #部分厂家开源的硬件适配层HAL代码
├──kernel #内核源码目录 存放规则kernel/$vendor/$product
├──libcore #核心java库;
├──libnativehelper #Support functions for Android‘s class libraries
├──Makefile #在顶层目录编译,利用的默认Makefile,它只是简单包含了build/core/main.mk
├──ndk #Android的NDK(native development kit,原生开发套件),NDK提供了一系列的工具,帮助开发者快速开发C或者C++的动态库,并能自动将so和java用一起打包成apk;
├──packages #应用程序包,包含各种内置的核心应用程序,如:bluetooth、calendar、camera等;
├──pdk #Platform Development Kit The goal of the PDK release is to help chipset vendors and OEMs to migrate to a new relelase
├──prebuilt #编译所需要的程序文件,主要包含不同平台下的ARM编译器:x86和arm架构下预编译的一些资源;
├──prebuilts #有clang eclipse gcc misc ndk qemu-kernel sdk tools等子目录,交叉编译工具链所在目录
├──sdk #SDK软件开发包,是编译SDK工具所需要的文件,包含:hierarchyviewer、eclipse插件、emulator等;
├──system #核心代码,包含了最小化可启动的环境,还有底层调试及检查工具。嵌入式linux所需要的一些系统工具程序,比如:adb、fastboot、debugger、logcat等;
├──tools #有子目录build和motodev,可能跟摩托罗拉有关
├──vendor #设备制造商专用的配置存放目录,存放规则vendor/$vendor/$product,cm编写的apk也放在该目录
bionic 目录
|-- libc                                    (C库)
|    |-- arch-arm        (ARM架构,包含系统调用汇编实现)
|    |-- arch-x86        (x86架构,包含系统调用汇编实现)
|    |-- bionic                (由C实现的功能,架构无关)
|    |-- docs                    (文档)
|    |-- include              (头文件)
|    |-- inet                   
|    |-- kernel                (Linux内核中的一些头文件)
|    |-- netbsd                (?netbsd系统相关,具体作用不明)
|    |-- 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两种架构)
bootable 目录
|-- 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)
dalvik目录 dalvik虚拟机
|-- dalvikvm                                  (main.c的目录)
|-- dexdump                                  (dex反汇编)
|-- dexlist                                          (List all methods in all concrete classes in a DEX file.)
|-- dexopt                                                      (预验证与优化)
|-- docs                                              (文档)
|-- dvz                                                  (和zygote相关的一个命令)
|-- dx                                                    (dx工具,将多个java转换为dex)
|-- hit                                                    (?java语言写成)
|-- libcore                                                      (核心库)
|-- libcore-disabled                (?禁用的库)
|-- libdex                                            (dex的库)
|-- libnativehelper                    (Support functions for Android‘s class libraries)
|-- tests                                              (测试代码)
|-- tools                                              (工具)
`-- vm                                                  (虚拟机实现)
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 (联系人管理器)
|    |-- CubeLiveWall**        (动态壁纸的一个简单例程)
|    |-- FixedGridLayout (像是布局)
|    |-- GlobalTime                (全球时间)
|    |-- HelloActivity            (Hello)
|    |-- Home                                (Home)
|    |-- JetBoy                            (jetBoy游戏)
|    |-- LunarLander            (貌似又是一个游戏)
|    |-- MailSync                      (邮件同步)
|    |-- MultiResolution    (多分辨率)
|    |-- MySampleRss        (RSS)
|    |-- NotePad                        (记事本)
|    |-- RSSReader                (RSS阅读器)
|    |-- SearchableDictionary (目录搜索)
|    |-- **JNI                  (JNI例程)
|    |-- SkeletonApp            (空壳APP)
|    |-- Snake                              (snake程序)
|    |-- SoftKeyboard        (软键盘)
|    |-- Wiktionary                  (?维基)
【Android系统源代码目录结构 “Android源代码”“目录结构”】|    `-- Wiktionary**(?维基例程)
|-- scripts                                                      (脚本)
|-- sdk                                                  (sdk配置)
|-- simulator                                  (?模拟器)
|-- testrunner                                (?测试用)
`-- tools                                              (一些工具)
external 目录
|-- aes      (AES加密)
|-- apache-http    (网页服务器)
|-- astl      (ASTL (Android STL) is a slimmed-down version of the regular C++ STL.)
|-- bison      (自动生成语法分析器,将无关文法转换成C、C++)
|-- blktrace    (blktrace is a block layer IO tracing mechanism)
|-- bluetooth    (蓝牙相关、协议栈)
|-- bsdiff      (diff工具)
|-- bzip2      (压缩工具)
|-- clearsilver    (html模板系统)
|-- dbus      (低延时、低开销、高可用性的IPC机制)
|-- dhcpcd    (DHCP服务)
|-- dosfstools    (DOS文件系统工具)
|-- dropbear    (SSH2的server)
|-- e2fsprogs    (EXT2文件系统工具)
|-- elfcopy    (复制ELF的工具)
|-- elfutils      (ELF工具)
|-- embunit    (Embedded Unit Project)
|-- emma      (java代码覆盖率统计工具)
|-- esd      (Enlightened Sound Daemon,将多种音频流混合在一个设备上播放)
|-- expat      (Expat is a stream-oriented XML parser.)
|-- fdlibm      (FDLIBM (Freely Distributable LIBM))
|-- freetype    (字体)
|-- fsck_msdos    (dos文件系统检查工具)
|-- gdata      (google的无线数据相关)
|-- genext2fs    (genext2fs generates an ext2 filesystem as a normal (non-root) user)
|-- giflib      (gif库)
|-- googleclient (google用户库)
|-- grub      (This is GNU GRUB, the GRand Unified Bootloader.)
|-- gtest      (Google C++ Testing Framework)
|-- icu4c      (ICU(International Component for Unicode)在C/C++下的版本)
|-- ipsec-tools    (This package provides a way to use the native IPsec functionality )
|-- iptables    (防火墙)
|-- jdiff      (generate a report describing the difference between two public Java APIs.)
|-- jhead      (jpeg头部信息工具)
|-- jpeg      (jpeg库)
|-- junit      (JUnit是一个Java语言的单元测试框架)
|-- kernel-headers (内核的一些头文件)
|-- libffi      (libffi is a foreign function inte**ce library.)
|-- libpcap    (网络数据包捕获函数)
|-- libpng      (png库)
|-- libxml2    (xml解析库)
|-- mtpd      (一个命令)
|-- netcat      (** Unix utility which reads and writes dataacross network connections)
|-- netperf      (网络性能测量工具)
|-- neven      (看代码和JNI相关)
|-- opencore    (多媒体框架)
|-- openssl    (SSL加密相关)
|-- openvpn    (VPN开源库)
|-- oprofile    (OProfile是Linux内核支持的一种性能分析机制。)
|-- ping      (ping命令)
|-- ppp      (pppd拨号命令,好像还没有chat)
|-- proguard    (Java class file shrinker, optimizer, obfuscator, and preverifier)
|-- protobuf    (a flexible, efficient, automated mechanism for serializing structured data)
|-- qemu      (arm模拟器)
|-- safe-iop    (functions for performing safe integer operations )
|-- skia      (skia图形引擎)
|-- sonivox    (sole MIDI solution for Google Android Mobile Phone Platform)
|-- speex      (Speex编/解码API的使用(libspeex))
|-- sqlite      (数据库)
|-- srec      (Nuance 公司提供的开源连续非特定人语音识别)
|-- strace      (trace工具)
|-- svox      (Embedded Text-to-Speech)
|-- tagsoup    (TagSoup是一个Java开发符合SAX的HTML解析器)
|-- tcpdump    (抓TCP包的软件)
|-- tesseract    (Tesseract Open Source OCR Engine.)
|-- tinyxml    (TinyXml is a **, small, C++ XML parser)
|-- tremor      (I stream and file decoder provides an embeddable,integer-only library)
|-- webkit      (浏览器核心)
|-- wpa_supplicant (无线网卡管理)
|-- xmlwriter    (XML 编辑工具)
|-- yaffs2      (yaffs文件系统)
`-- zlib      (a general purpose data compression library)
frameworks 目录 (核心框架——java及C++语言)
|-- base      (基本内容)
|    |-- api    (都是xml文件,定义了java的api)
|    |-- awt    (AWT库)
|    |-- build    (空的)
|    |-- camera    (摄像头服务程序库)
|    |-- cmds    (重要命令:am、app_proce等)
|    |-- core    (核心库)
|    |-- data    (字体和声音等数据文件)
|    |-- docs    (文档)
|    |-- graphics (图形相关)
|    |-- include    (头文件)
|    |-- keystore (和数据签名证书相关)
|    |-- libs    (库)
|    |-- location (地区库)
|    |-- media    (媒体相关库)
|    |-- obex    (蓝牙传输库)
|    |-- opengl    (2D-3D加速库)
|    |-- packages (设置、TTS、VPN程序)
|    |-- sax    (XML解析器)
|    |-- services (各种服务程序)
|    |-- telephony (电话通讯管理)
|    |-- test-runner (测试工具相关)
|    |-- tests    (各种测试)
|    |-- tools    (一些叫不上名的工具)
|    |-- vpn    (VPN)
|    `-- wifi    (无线网络)
|-- opt      (可选部分)
|    |-- com.google.android        (有个framework.jar)
|    |-- com.google.android.googlelogin    (有个client.jar)
|    `-- emoji    (standard message elements)
`-- policies    (Product policies are operating system directions aimed at specific uses)
      `-- base
              |-- mid (MID设备)
              `-- phone (手机类设备,一般用这个)
hardware 目录    (部分厂家开源的硬解适配层HAL代码)
|-- broadcom      (博通公司)
|    `-- wlan      (无线网卡)
|-- libhardware      (硬件库)
|    |-- include      (头文件)
|    `-- modules    (Default (and possibly architecture dependents) HAL modules)
|            |-- gralloc    (gralloc显示相关)
|            `-- overlay    (Skeleton for the "overlay" HAL module.)
|-- libhardware_legacy (旧的硬件库)
|    |-- flashlight    (背光)
|    |-- gps      (GPS)
|    |-- include      (头文件)
|    |-- mount      (旧的挂载器)
|    |-- power      (电源)
|    |-- qemu      (模拟器)
|    |-- qemu_tracing (模拟器跟踪)
|    |-- tests      (测试)
|    |-- uevent      (uevent)
|    |-- vibrator      (震动)
|    `-- wifi      (无线)
|-- msm7k      (高通7k处理器开源抽象层)
|    |-- boot      (启动)
|    |-- libaudio    (声音库)
|    |-- libaudio-qsd8k (qsd8k的声音相关库)
|    |-- libcamera    (摄像头库)
|    |-- libcopybit    (copybit库)
|    |-- libgralloc    (gralloc库)
|    |-- libgralloc-qsd8k (qsd8k的gralloc库)
|    |-- liblights    (背光库)
|    `-- librpc      (RPC库)
|-- ril        (无线电抽象层)
|    |-- include      (头文件)
|    |-- libril      (库)
|    |-- reference-cdma-sms (cdma短信参考)
|    |-- reference-ril      (ril参考)
|    `-- rild        (ril后台服务程序)
`-- ti            (ti公司开源HAL)
      |-- omap3        (omap3处理器)
      |    |-- dspbridge    (DSP桥)
      |    |-- libopencorehw (opencore硬件库)
      |    |-- liboverlay    (overlay硬件库)
      |    |-- libstagefrighthw (stagefright硬件库)
      |    `-- omx      (omx组件)
      `-- wlan        (无线网卡)
prebuilt 目录      (x86和arm架构下预编译的一些资源)
.
|-- android-arm    (arm-android相关)
|    |-- gdbserver    (gdb调试器)
|    `-- kernel      (模拟的arm内核)
|-- android-x86    (x86-android相关)
|    `-- kernel      (空的)
|-- common      (通用编译好的代码,应该是java的)
|-- darwin-x86      (drawin x86平台)
|    `-- toolchain    (工具链)
|            |-- arm-eabi-4.2.1
|            |-- arm-eabi-4.3.1
|            `-- arm-eabi-4.4.0
|-- darwin-x86_64    (drawin x86 64bit平台)
|-- linux-x86      (linux x86平台)
|    `-- toolchain    (工具链,我们应该主要用这个)
|            |-- arm-eabi-4.2.1
|            |-- arm-eabi-4.3.1
|            |-- arm-eabi-4.4.0
|            `-- i686-unknown-linux-gnu-4.2.1 (x86版编译器)
|-- linux-x86_64    (linux x86 64bit平台)
|-- windows      (windows平台)
`-- windows-x86_64 (64bit windows平台)
system 目录    (底层文件系统库、应用及组件——C语言)
.
|-- Bluetooth    (蓝牙相关)
|-- core      (系统核心工具盒接口)
|    |-- adb    (adb调试工具)
|    |-- cpio    (cpio工具,创建img)
|    |-- debuggerd (调试工具)
|    |-- fastboot (快速启动相关)
|    |-- include    (系统接口头文件)
|    |-- init    (init程序源代码)
|    |-- libacc    (轻量级C编译器)
|    |-- libctest    (libc测试相关)
|    |-- libcutils (libc工具)
|    |-- liblog    (log库)
|    |-- libmincrypt (加密库)
|    |-- libnetutils (网络工具库)
|    |-- libpixelflinger (图形处理库)
|    |-- libsysutils (系统工具库)
|    |-- libzipfile (zip库)
|    |-- logcat    (查看log工具)
|    |-- logwrapper (log封装工具)
|    |-- mkbootimg (制作启动boot.img的工具盒脚本)
|    |-- netcfg    (网络配置netcfg源码)
|    |-- nexus    (google最新手机的代码)
|    |-- rootdir    (rootfs,包含一些etc下的脚本和配置)
|    |-- sh      (shell代码)
|    |-- toolbox    (toolbox,类似busybox的工具集)
|    `-- vold    (SD卡管理器)
|-- extras      (额外工具)
|    |-- latencytop (a tool for software developers ,identifying system latency happen)
|    |-- libpagemap (pagemap库)
|    |-- librank    (Java Library Ranking System库)
|    |-- procmem (pagemap相关)
|    |-- procrank (Java Library Ranking System相关)
|    |-- showmap (showmap工具)
|    |-- showslab (showslab工具)
|    |-- sound    (声音相关)
|    |-- su      (su命令源码)
|    |-- tests    (一些测试工具)
|    `-- timeinfo (时区相关)
`-- wlan      (无线相关)
      `-- ti      (ti网卡相关工具及库)
packages 目录
|-- apps        (应用程序库)
|    |-- AlarmClock    (闹钟)
|    |-- Bluetooth    (蓝牙)
|    |-- Browser    (浏览器)
|    |-- Calculator    (计算器)
|    |-- Calendar    (日历)
|    |-- Camera      (相机)
|    |-- CertInstaller    (在Android中安装数字签名,被调用)
|    |-- Contacts    (拨号(调用)、联系人、通话记录)
|    |-- DeskClock    (桌面时钟)
|    |-- Email      (Email)
|    |-- Gallery      (相册,和Camera类似,多了列表)
|    |-- Gallery3D    (3D相册)
|    |-- GlobalSearch (为google搜索服务,提供底层应用)
|    |-- GoogleSearch (google搜索)
|    |-- HTMLViewer (浏览器附属界面,被浏览器应用调用,同时提供存储记录功能)
|    |-- IM      (即时通讯,为手机提供信号发送、接收、通信的服务)
|    |-- Launcher    (登陆启动项,显示图片框架等等图形界面)
|    |-- Launcher2    (登陆启动项,负责应用的调用)
|    |-- Mms      (彩信业务)
|    |-- Music      (音乐播放器)
|    |-- PackageInstaller (安装、卸载程序的响应)
|    |-- Phone      (电话拨号程序)
|    |-- Provision    (预设应用的状态,使能应用)
|    |-- Settings    (开机设定,包括电量、蓝牙、设备信息、界面、wifi等)
|    |-- SoundRecorder (录音机,可计算存储所需空间和时间)
|    |-- Stk        (接收和发送短信)
|    |-- Sync      (空)    -------○1
|    |-- Updater    (空)
|    `-- VoiceDialer    (语音识别通话)
|-- inputmethods    (输入法)
|    |-- LatinIME    (拉丁文输入法)
|    |-- OpenWnn    (OpenWnn输入法)
|    `-- PinyinIME    (拼音输入法)
|-- providers      (提供器,提供应用程序、界面所需的数据)
|    |-- ApplicationsProvider    (应用程序提供器,提供应用程序启动项、更新等)
|    |-- CalendarProvider      (日历提供器)
|    |-- ContactsProvider      (联系人提供器)
|    |-- DownloadProvider    (下载管理提供器)
|    |-- DrmProvider      (创建和更新数据库时调用)
|    |-- GoogleContactsProvider (联系人提供器的子类,用以同步联系人)
|    |-- GoogleSubscribedFeedsProvider(设置信息提供器)
|    |-- ImProvider        (空)
|    |-- ManagementProvider    (空)
|    |-- MediaProvider      (媒体提供器,提供存储数据)
|    |-- TelephonyProvider    (彩信提供器)
|    |-- UserDictionaryProvider (用户字典提供器,提供用户常用字字典)
|    `-- WebSearchProvider    (空)
|-- services     
|    |-- EasService        (空)
|    `-- LockAndWipe      (空)
`-- wall**s          (墙纸)
      |-- Basic          (基本墙纸,系统内置墙纸)
      |-- LivePicker        (选择动态壁纸)
      |-- MagicSmoke      (壁纸特殊效果)
      `-- MusicVisualization    (音乐可视化,图形随音乐而变化)
vendor 目录      (厂家定制内容)
|-- aosp        (android open source project)
|    `-- products    (一些板级规则)
|-- htc        (HTC公司)
|    |-- common-open (通用部分)
|    |    `-- akmd    (解压img用的工具)
|    |-- dream-open    (G1开放部分)
|    |-- prebuilt-open (预编译开放部分)
|    `-- sapphire-open (sapphire这款型号开放内容)
|-- pv-open      (没东西)
|-- qcom        (里面基本是空的)
`-- sample      (google提供的样例)
      |-- apps      (应用)
      |    |-- client    (用户)
      |    `-- upgrade (升级)
      |-- frameworks    (框架)
      |    `-- PlatformLibrary (平台库)
      |-- products    (产品)
      |-- sdk_addon    (sdk添加部分)
      `-- skins      (皮肤)
              `-- WVGAMedDpi (WVGA适用的图片)
build子目录存放编译系统的核心代码,包含着138个makefile,15个shell脚本,19个python脚本,7个C文件,7个C++文件,16个头文件,因此如果想分析编译系统核心代码,使用的IDE需支持这些编程语言,推荐使用eclipse,安装一些插件就可以很方便地查看这些代码
build子文件夹的目录结构如下所示:
build/
├── buildspec.mk.default#buildspec的模版文件,可定义一些变量比如TARGET_BUILD_VARIANT:=user,TARGET_BUILD_TYPE:=release
├── CleanSpec.mk#增量编译时,会执行该文件里的命令,这些命令一般用于清除中间文件
├── core#编译系统的核心文件放在该目录,主要是一些makefile
├── envsetup.sh#编译时需先用source envsetup.sh设置好环境变量,该脚本提供了许多有用的命令,比如cout,croot,cgrep,在详细介绍Android编译步骤时会列出来
├── libs#是一个C++模块,编译后可生成libhost.a静态库,里面的函数主要用于与编译主机交互
├── target#包含编译目标相关的makefile,它有两个子文件夹 board和product,产品都在该目录下定义,比如generic,full产品,定义设备产品时,会从这里继承产品
└── tools#各种工具,多数使用python编写,工具有用于签名的signpak, 用于下载device配置的roomservice.py等,后续将详细介绍
我们在阅读build核心代码时,可能最头疼的就是变量,编译系统里有成百上千的变量,我们常常不知道其含义,容易一头雾水,为此我做了一个编译系统的参考手册供大家查阅, 可以很方便地检索变量,查看变量的意义,并有示例值。

    推荐阅读