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
`– 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目錄用於提供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
`– 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




創作者介紹
創作者 立你斯 的頭像
立你斯

立你斯學習記錄

立你斯 發表在 痞客邦 留言(0) 人氣()