[轉載請註明出處] http://kezeodsnx.pixnet.net/blog

作者: kezeodsnx

這篇有好一部分是引用Android的源代碼結構,L10N和自己的補充如下:

Google提供的Android第一層的目錄和文件如下所示:
|-- Makefile        (整個android的Makefile)
|-- bionic          (glibc的reimplementation)
|-- bootable      (bootloader,diskinstaller,recovery)    
|-- build           (host編譯和配置所需要的script和工具,而非target)
|-- dalvik          (JAVA虛擬機)
|-- development     (程序開發所需要的template和工具)
|-- external        (target machine使用的一些lib)
|-- frameworks      (應用程式的框架層)
|-- hardware        (與硬體相關的lib)
|-- kernel          (Linux2.6的source)
|-- packages        (Android的各種應用程式,如alarmclock,calendar,和一些提供應用程式使用的provider)
|-- prebuilt        (Android在各種平台下預先編譯好的image,如gdbserver,vmlinux)
|-- recovery        (cupcake移至bootable)
|-- system          (Android的底層的一些lib,如wlan,bluetooth,core。core裡包括init,toolbox(ls,date, etc), netutility(netcfg),liblog, etc)
bionic目錄如下所示:
bionic/ (only 200k)
|-- Android.mk
|-- libc
|-- libdl
|-- libm
|-- libstdc++
|-- libthread_db
|-- linker
bootable目錄展開:
bootloader/
-- legacy
    |-- Android.mk
    |-- README
    |-- arch_armv6
    |-- arch_msm7k
    |-- fastboot_protocol.txt
    |-- include
    |-- libboot
    |-- libc
    |-- nandwrite
    |-- usbloader

--diskinstaller/

    |-- Android.mk
    |-- config.mk
    |-- editdisklbl
    |-- init.rc
    |-- installer.c
    |-- installer.conf
    |-- installer.h
    |-- installer_img_layout.conf
    |-- libdiskconfig

--recovery/

    |--amend
    |--Android.mk
    |--bootloader.c
    |--bootloader.h
    |--commands.c
    |--commands.h
    |--common.h
    |--etc
    |--firmware.c
    |--firmware.h
    |--install.c
    |--install.h
    |--minui
    |--minzip
    |--mtdutils
    |--NOTICE
    |--recovery.c
    |--res
    |--roots.c
    |--roots.h
    |--test_roots.c
    |--tools
    |--ui.c
    |--verifier.c
    |--verifier.h

build目錄展開:
build/
|-- buildspec.mk.default
|-- cleanspec.mk
|-- core                       (各種以mk為結尾的文件,它門是編譯所需要的Makefile)
|-- envsetup.sh
|-- libs
|-- target                     (包含board和product兩個目錄,為target device所需要文件)
|-- tools                      (編譯過程中host machine所需要的工具,一些需要經過編譯生成)
其中,core中的Makefile是整個Android編譯所需要的真正的Makefile,它被頂層目錄的Makefile引用。
envsetup.sh是一個在使用emulator的時候,用於設置環境的script。
dalvik目錄用於提供Android JAVA應用程式執行的基礎————JAVA虛擬機。
development目錄展開:
development
|-- apps                       (Android應用程式的template)
|-- build                      (編譯script的template)
|-- cmds                       (內含一隻monkey,可用來對應用程式做一些stress test)
|-- data
|-- docs                         (sdk buid相關的文件)
|-- emulator                   (emulator相關)
|-- host                       (windows平台的一些工具)
|-- ide                           (elicpse相關的東西)
|-- pdk                          (platform development kit)
|-- samples                    (一些範例程式)
|-- simulator                  (大多是target device的一些工具)
|-- tools                           (在host machine上使用到的工具)
在emulator目錄中qemud是使用QEMU時target device的後台程序,skins是在emulator上手機的界面。
samples中包含了很多Android簡單應用程式,為開發者學習開發Android程序提供了很大便利,可以作為template使用。
external目錄展開:(target machine使用的一些lib)
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目標系統中的一個module,可能有一個或者若干個lib構成。其中:
opencore為PV(PacketVideo),它是Android多媒體框架的核心。
webkit是Android網絡瀏覽器的核心。
sqlite是Android數據庫系統的核心。
openssl是Secure Socket Layer,一個網絡協議層,用於為數據通訊提供安全支持。
frameworks目錄展開的一個級別的目錄如下所示:
frameworks/
|-- base  (模擬器上看到的UI界面)
|-- opt
|-- policies
frameworks是Android應用程式的框架,不過看起來不太像有relase framework 的source code。事實上,個人也認為不應該來修改framework的程式,因為framework是所有應用程式在執行時所共同使用的,必須要follow,除非不在乎共通性! 要改的應該是framework下的lib層,也就是opensource或是android自己的lib。
hardware是一些與硬體相關的lib,看起來像是架構圖中的hal層。不知道這層是不是就是可讓driver避開GPL問題的那個洞?
kernel是Linux2.6的source
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中的一個data source,用來在應用程式間share data)。另外一個就是國內開發商很在意的輸入法了,目前只看到LatinIME  PinyinIME。

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                     (就是開機的init)
|   |-- libctest
|   |-- libcutils
|   |-- liblog
|   |-- libmincrypt
|   |-- libnetutils
|   |-- libpixelflinger
|   |-- libzipfile
|   |-- logcat
|   |-- logwrapper
|   |-- mkbootimg
|   |-- mountd
|   |-- netcfg
|   |-- rootdir
|   |-- sh
|   |-- toolbox
|-- extras  (一些跟process相關的統計資料工具,如uptime,memory等)
|   |-- Android.mk
|   |-- latencytop
|   |-- libpagemap
|   |-- librank
|   |-- procmem
|   |-- procrank
|   |-- showmap
|   |-- showslab
|   |-- sound
|   |-- su
|   |-- tests
|   |-- timeinfo
|-- wlan
    |—ti

kezeodsnx 發表在 痞客邦 PIXNET 留言(0) 人氣()