Android源代码结构分析.docx
《Android源代码结构分析.docx》由会员分享,可在线阅读,更多相关《Android源代码结构分析.docx(28页珍藏版)》请在冰豆网上搜索。
Android源代码结构分析
目录
一、源代码结构2
第一层次目录2
bionic目录3
bootloader目录5
build目录7
dalvik目录9
development目录9
external目录13
frameworks目录19
Hardware20
Out22
Kernel22
packages目录22
prebuilt目录27
SDK28
system目录28
Vendor32
一、源代码结构
第一层次目录
Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示:
.
|--Makefile(全局的Makefile)
|--bionic(Bionic含义为仿生,这里面是一些基础的库的源代码)
|--bootloader(引导加载器),我们的是bootable,
|--build(build目录中的内容不是目标所用的代码,而是编译和配置所需要的脚本和工具)
|--dalvik(JAVA虚拟机)
|--development(程序开发所需要的模板和工具)
|--external(目标机器使用的一些库)
|--frameworks(应用程序的框架层)
|--hardware(与硬件相关的库)
|--kernel(Linux2.6的源代码)
|--packages(Android的各种应用程序)
|--prebuilt(Android在各种平台下编译的预置脚本)
|--recovery(与目标的恢复功能相关)
|--system(Android的底层的一些库)
bionic目录
bionicC库
bionic目录展开一个级别的目录如下所示:
bionic/
|--Android.mk
|--libc
|--libdl
|--libm
|--libstdc++
|--libthread_db
`--linker
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/
`--legacy
|--Android.mk
|--README
|--arch_armv6
|--arch_msm7k
|--fastboot_protocol.txt
|--include
|--libboot
|--libc
|--nandwrite
`--usbloader
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 (OTAOverTheAirUpdates升级工具)
`--updater (升级器)
build目录
存放系统编译规则及generic等基础开发包配置
build目录展开的一个级别的目录如下所示:
build/
|--buildspec.mk.default
|--cleanspec.mk
|--core(各种以mk为结尾的文件,它门是编译所需要的Makefile)
|--envsetup.sh
|--libs
|--target(包含board和product两个目录,为目标所需要文件)
`--tools(编译过程中主机所需要的工具,一些需要经过编译生成)
其中,core中的Makefile是整个Android编译所需要的真正的Makefile,它被顶层目录的Makefile引用。
envsetup.sh是一个在使用仿真器运行的时候,用于设置环境的脚本。
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 (Thisprogramtakesalistoffilesanddirectories)
|--fs_get_stats (获取文件系统状态)
|--iself (判断是否ELF格式)
|--isprelinked (判断是否prelinked)
|--kcm (按键相关)
|--lsd (Listsymboldependencies)
|--releasetools (生成镜像的工具及脚本)
|--rgb2565 (rgb转换为565)
|--signapk (apk签名工具)
|--soslim (strip工具)
`--zipalign (ziparchivealignmenttool)
dalvik目录
用于提供AndroidJAVA应用程序运行的基础————JAVA虚拟机。
dalvik目录dalvik虚拟机
.
|--dalvikvm (main.c的目录)
|--dexdump (dex反汇编)
|--dexlist (ListallmethodsinallconcreteclassesinaDEXfile.)
|--dexopt (预验证与优化)
|--docs (文档)
|--dvz (和zygote相关的一个命令)
|--dx (dx工具,将多个java转换为dex)
|--hit (?
java语言写成)
|--libcore (核心库)
|--libcore-disabled (?
禁用的库)
|--libdex (dex的库)
|--libnativehelper (SupportfunctionsforAndroid'sclasslibraries)
|--tests (测试代码)
|--tools (工具)
`--vm (虚拟机实现)
development目录
展开的一个级别的目录如下所示:
development
|--apps(Android应用程序的模板)
|--build(编译脚本模板)
|--cmds
|--data
|--docs
|--emulator(仿真相关)
|--host(包含windows平台的一些工具)
|--ide
|--pdk
|--samples(一些示例程序)
|--simulator(大多是目标机器的一些工具)
`--tools
在emulator目录中qemud是使用QEMU仿真时目标机器运行的后台程序,skins是仿真时手机
的界面。
samples中包含了很多Android简单工程,这些工程为开发者学习开发Android程序提供了很大便利,可以作为模板使用。
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 (PlugDevelopmentKit)
|--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 (一些工具)
external目录
android使用的一些开源的模组
展开的一个级别的目录如下所示:
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
|-