天天看點

[轉]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

|-- README

|-- arch_armv6

|-- arch_msm7k

|-- fastboot_protocol.txt

|-- include

|-- libboot

|-- 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-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

| |-- latencytop

| |-- libpagemap

| |-- librank

| |-- procmem

| |-- procrank

| |-- showmap

| |-- showslab

| |-- sound

| |-- su

| |-- tests

| `-- timeinfo

`-- wlan

`-- ti