【网学网提醒】:以下是网学会员为您推荐的Android 2.2 源码结构分析,希望本篇文章对您学习有所帮助。
Google提供的Android包含了原始Android的目标机代码,主机编译工具、仿真环境,代码包经过解压缩后,第一级别的目录和文件如下所示:2.2
.
|–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目录用于提供AndroidJAVA应用
程序运行的基础————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是SecureSocketLayer,一个网络协议层,用于为数据通讯提供安全支持。
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
||–And
roid.mk
||–latencytop
||–libpagemap
||–librank
||–procmem
||–procrank
||–showmap
||–showslab
||–sound
||–su
||–tests
|`–timeinfo
`–wlan
`–ti
Android2.1源码结构分析
RockieCheng
Android2.1
|--Makefile
|--bionic(bionicC库)
|--bootable(启动引导相关代码)
|--build(存放系统编译规则及generic等基础开发包配置)
|--cts(Android兼容性测试套件标准)
|--dalvik(dalvikJAVA虚拟机)
|--development(应用程序开发相关)
|--external(android使用的一些开源的模组)
|--frameworks(核心框架——java及C++语言)
|--hardware(主要保护硬解适配层HAL代码)
|--out(编译完成后的代码输出与此目录)
|--packages(应用程序包)
|--prebuilt(x86和arm架构下预编译的一些资源)
|--sdk(sdk及模拟器)
|--system(文件系统库、应用及组件——C语言)
`--vendor(厂商定制代码)
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两种架构)
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目录
.
|--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工具)
|--c
heck_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目录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目录(开发者需要的一些例程及工具)
|--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目录
.
|--aes(AES加密)
|--apache-http(网页服务器)
|--astl(ASTL(AndroidSTL)isaslimmed-downversionoftheregularC++STL.)
|--bison(自动生成语法分析器,将无关文法转换成C、C++)
|--blktrace(blktraceisablocklayerIOtracingmechanism)
|--bluetooth(蓝牙相关、协议栈)
|--bsdiff(diff工具)
|--bzip2(压缩工具)
|--clearsilver(html
模板系统)
|--dbus(低延时、低开销、高可用性的IPC机制)
|--dhcpcd(DHCP服务)
|--dosfstools(DOS文件系统工具)
|--dropbear(SSH2的server)
|--e2fsprogs(EXT2文件系统工具)
|--elfcopy(复制ELF的工具)
|--elfutils(ELF工具)
|--embunit(EmbeddedUnitProject)
|--emma(java代码覆盖率统计工具)
|--esd(EnlightenedSoundDaemon,将多种音频流混合在一个设备上播放)
|--expat(Expatisastream-orientedXMLparser.)
|--fdlibm(FDLIBM(FreelyDistributableLIBM))
|--freetype(字体)
|--fsck_msdos(dos文件系统检查工具)
|--gdata(google的无线数据相关)
|--genext2fs(genext2fsgeneratesanext2filesystemasanormal(non-root)use
r)
|--giflib(gif库)
|--googleclient(google用户库)
|--grub(ThisisGNUGRUB,theGRandUnifiedBootloader.)
|--gtest(GoogleC++TestingFramework)
|--icu4c(ICU(InternationalComponentforUnicode)在C/C++下的版本)
|--ipsec-tools(ThispackageprovidesawaytousethenativeIPsecfunctionality)
|--iptables(防火墙)
|--jdiff(generateareportdescribingthedifferencebetweentwopublicJavaAPIs.)
|--jhead(jpeg头部信息工具)
|--jpeg(jpeg库)
|--junit(JUnit是一个Java语言的单元测试框架)
|--kernel-headers(内核的一些头文件)
|--libffi(libffiisaforeignfunctioninterfacelibrary.)
|--libpcap(网络数据包捕获函数)
|--libpng(png库)
|--libxml2(xml解析库)
|--mtpd(一个命令)
|--netcat(simpleUnixutilitywhichreadsandwritesdataacrossnetworkconnections)
|--netperf(网络性能测量工具)
|--neven(看代码和JNI相关)
|--opencore(多媒体框架)
|--openssl(SSL加密相关)
|--openvpn(VPN开源库)
|--oprofile(OProfile是Linux内核支持的一种性能分析机制。)
|--ping(ping命令)
|--ppp(pppd拨号命令,好像还没有chat)
|--proguard(Javaclassfileshrinker,optimizer,obfuscator,andpreverifier)
|--protobuf(aflexible,efficient,automatedmechanismforserializingstructureddata)
|--qemu(arm模拟器)
|--safe-iop(functionsforperformingsafeintegeroperations)
|--skia(skia图形引擎)
|--sonivox(soleMIDIsolutionforGoogleAndroidMobilePhonePlatform)
|--speex(Speex编/解码API的使用(libspeex))
|--sqlite(数据库)
|--srec(Nuance公司提供的开源连续非特定人语音识别)
|--strace(trace工具)
|--svox(EmbeddedText-to-Speech)
|--tagsoup(TagSoup是一个Java开发符合SAX的HTML解析器)
|--tcpdump(抓TCP包的软件)
|--tesseract(TesseractOpenSourceOCREngine.)
|--tinyxml(TinyXmlisasimple,small,C++XMLparser)
|--tremor(Istreamandfiledecoderprovidesanembeddable,integer-onlylibrary)
|--webkit(浏览器核心)
|--wpa_supplicant(无线网卡管理)
|--xmlwriter(XML编辑工具)
|--yaffs2(yaffs文件系统)
`--zlib(ageneralpurposedatacompressionlibrary)