android 代碼結構

來源:互聯網
上載者:User

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

Android編譯完成後的代碼結構
Android編譯完成後,將在根目錄中產生一個out檔案夾,所有產生的內容均放置在這個檔案夾中。out檔案夾如下所示:

out/

|-- CaseCheck.txt

|-- casecheck.txt

|-- host

|   |-- common

|   `-- linux-x86

`-- target

|-- common

`-- product

主要的兩個目錄為host和target,前者表示在主機(x86)產生的工具,後者表示目標機(模認為ARMv5)啟動並執行內容。

host目錄的結構如下所示:

out/host/

|-- common

|   `-- obj              (JAVA庫)

`-- linux-x86

|-- bin              (二進位程式)

|-- framework        (JAVA庫,*.jar檔案)

|-- lib              (共用庫*.so)

`-- obj              (中間產生的目標檔案)

host目錄是一些在主機上用的工具,有一些是二進位程式,有一些是JAVA的程式。

target目錄的結構如下所示:

out/target/

|-- common

|   |-- R           (資源檔)

|   |-- docs

|   `-- obj         (目標檔案)

`-- product

`-- generic

其中common目錄表示通用的內容,product中則是針對產品的內容。

在common目錄的obj中,包含兩個重要的目錄:

APPS  中包含了JAVA應用程式產生的目標,每個應用程式對應其中一個子目錄,將結合每個應用程式的原始檔案產生Android應用程式的APK包。

JAVA_LIBRARIES  中包含了JAVA的庫,每個庫對應其中一個子目錄。

在預設的情況下,Android編譯將產生generic目錄,如果選定產品還可以產生其他的目錄。generic包含了以下內容:

out/target/product/generic/

|-- android-info.txt

|-- clean_steps.mk

|-- data

|-- obj

|-- ramdisk.img

|-- root

|-- symbols

|-- system

|-- system.img

|-- userdata-qemu.img

`-- userdata.img

在generic/obj/APPS目錄中包含了各種JAVA應用,與common/APPS相對應,但是已經打成了APK包。

system目錄是主要的檔案系統,data目錄是存放資料的檔案系統。

obj/SHARED_LIBRARIES中存放所有動態庫。

obj/STATIC_LIBRARIES中存放所有靜態庫。

幾個以img為結尾的檔案是幾個目標映像檔案,其中ramdisk是作為記憶體盤的根檔案系統映像,system.img是主要檔案系統的映像,這 是一個比較大的檔案,data.img是資料內容映像。這幾個image檔案是運行時真正需要的檔案。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.