2019獨角獸企業重金招聘Python工程師標準>>>
Android 4.0源碼目錄結構:
本文介紹Android源碼目錄結構,以便讀者理清Android編譯系統核心代碼在Android源代碼的位置。
Android源碼體積非常龐大,由Dalvik虛擬機、Linux內核、編譯系統、框架代碼、Android定制C庫、測試套件、系統應用程序等部分組成,在編譯Android源碼之前,必須要先掌握Android源碼的組成。
在Android源碼中,按照不同功能代碼被放在不同的目錄下:
abi目錄:應用二進制接口,不同的操作系統,應用二進制接口不同,因此linux上的二進制可執行文件在windows上無法執行。
bionic目錄:針對Android系統定制的仿生標準C庫、鏈接器等所在目錄,Android系統并沒有使用Linux的glibc庫。bioinc C庫針對嵌入式系統做了優化,添加了一些Android特定的函數API同時大大減少庫的體積,也避免了LGPL版權的問題。
bootable目錄:這個目錄下存放android部分啟動相關代碼,包括android的recovery模式,一般用于進行OTA升級,由C++編寫,可以看到用于顯示的ui.cpp和安裝的nstall.cpp,模式入口為recovery.cpp的main.
build目錄:Android的編譯系統目錄,里面包含大量的Makefile文件,用來編譯目標系統、Host主機開發環境等。這是android源碼中編譯核心所在地,把這個目錄下的所有mk搞清楚,android的編譯體系就基本了如指掌了。
cts目錄:兼容性測試工具目錄。
dalvik目錄:Dalvik虛擬機,Android系統得以運行的虛擬執行環境。
development目錄:應用程序開發所需要的模板和工具。
devices目錄:廠商設備配置目錄,針對不同設備,由不同的子目錄來分別管理,用來裁剪實現不同設備上Android目標系統。
docs目錄:官方網站文檔。
external目錄:Android系統使用的其它開源代碼目錄,如jpeg圖片解碼開源庫、opencore開源代碼等。
frameworks目錄:框架層代碼,frameworks/base目錄下存放目標系統的框架庫,frameworks/policies/base下存放應用程序框架代碼。
hardware目錄:HAL(Hardware Abstraction Layer)硬件抽象層代碼;描述對linuxkernel中的相關驅動模塊的具體操作,而在kernel中的驅動模塊只擁有通用操作接口,比如設置寄存器值,IO拉高拉低,但是具體設置什么值,拉高拉低的時序都寫在hardware層相對應的module中,這就是google對于硬件驅動的商業保護。
kernel目錄:Linux內核目錄,默認下載的Android源碼里沒有,需單獨下載。
libcore目錄:一些有用的庫,像xml、Jason、luni。
ndk目錄:ndk相關開發工具。
out目錄:編譯完成后的文件輸出與此目錄。
packages目錄:Android系統級應用程序源碼目錄,如攝像應用、電話應用等。
prebuilt目錄:主機編譯工具目錄,如arm-linux-gcc交叉系統工具鏈等。
sdk目錄:?? ?SDK及模擬器。
system目錄:init進程、藍牙、無線WIFI工具、uevent進程目錄;底層文件系統庫、應用及組件——C語言。
Makefile文件:在頂層目錄編譯,利用的默認Makefile,它只是簡單包含了build/core/main.mk。
下面對各個目錄分別詳細介紹:
1、bionic目錄:
|--libc ?(C庫)
| |--arch-arm ?(ARM架構,包含系統調用匯編實現)
| |--arch-x86 ?(x86架構,包含系統調用匯編實現)
| |--bionic ?(由C實現的功能,架構無關)
| |--docs ?(文檔)
| |--include ?(頭文件)
| |--inet ?(inet相關,具體作用不明)
| |--kernel ?(Linux內核中的一些頭文件)
| |--netbsd ?(系統相關,具體作用不明)
| |--private ?(一些私有的頭文件)
| |--stdio ?(stdio實現)
| |--stdlib ?(stdlib實現)
| |--string ?(string函數實現)
| |--tools ?(幾個工具)
| |--tzcode ?(時區相關代碼)
| |--unistd ?(unistd實現)
| |--zoneinfo ?(時區信息)
|--libdl ?(libdl實現,dl是動態鏈接,提供訪問動態鏈接庫的功能)
|--libm ?(libm數學庫的實現)
| |--alpha ?(alpha架構)
| |--amd64 ?(amd64架構)
| |--arm ?(arm架構)
| |--bsdsrc ?(bsd的源碼)
| |--i386 ?(i386架構)
| |--i387 ?(i387架構)
| |--ia64 ?(ia64架構)
| |--include ?(頭文件)
| |--man ?(數學函數)
| |--powerpc ?(powerpc架構)
| |--sparc64 ?(sparc64架構)
| |--src ?(源代碼)
|--libstdc++ ?(libstdc++ ?C++頭文件)
| |--include ?(頭文件)
| |--src ?(源代碼)
|--libthread_db ?(多線程程序的調試器庫)
| |--include ?(頭文件)
|--linker ?(動態鏈接器庫)
| |--arch ?(支持arm和x86兩種架構)
2、bootable目錄:
|--bootloader ?(適合各種bootloader的通用代碼)
| |--legacy ?(估計不能直接使用,可以參考)
| | |--arch_armv6 ?(V6架構,幾個簡單的匯編文件)
| | |--arch_msm7k ?(高通K7處理器架構的幾個基本驅動)
| | |--include ?(通用頭文件和高通K7架構文件)
| | |--libboot ?(啟動庫,都寫的很簡單)
| | |--libc ?(一些常用的C函數)
| | |--nandwrite ?(nandwrite函數實現)
| | |--usbloader ?(usbloader實現)
| |--diskinstaller ?(android鏡像打包器,x86可生產iso)
| |--recovery ?(系統恢復相關)
| | |--applypatch ?(補丁工具)
| | |--edify ?(升級腳本使用的edify腳本語言)
| | |--etc ?(init.rc恢復腳本)
| | |--minelf ?(不清楚)
| | |--minui ?(一個簡單的UI)
| | |--minzip ?(一個簡單的壓縮工具)
| | |--mtdutils ?(mtd工具)
| | |--res ?(資源文件)
| | |--testdata ?(測試數據)
| | |--tools ?(工具)
| | | |--ota ?(OTA Over The Air Updates升級工具)
| | |--updater ?(更新相關)
3、build目錄:
|--core ?(核心編譯規則)
|--lib
| |--host ?(主機端庫,有android “cp”功能替換)
|--target ?(目標機編譯對象)
| |--board ?(開發平臺)
| | |--emulator ?(模擬器)
| | |--generic ?(通用)
| | |--generic_armv5 ?(armv5通用)
| |--product ?(開發平臺對應的編譯規則)
| | |--security ?(密鑰相關)
|--tools ?(編譯中主機使用的工具及腳本)
| |--acp ?(Android "acp" Command)
| |--apicheck ?(api檢查工具)
| |--atree ?(tree工具)
| |--bin2asm ?(bin轉換為asm工具)
| |--check_prereq ?(檢查編譯時間戳工具)
| |--droiddoc ?(作用不明,java語言,網上有人說和JDK5有關)
| |--fs_config ?(This program takes a list of files and directories)
| |--fs_get_stats ?(獲取文件系統狀態)
| |--releasetools ?(生成鏡像的工具及腳本)
| |--rgb2565 ?(rgb轉換為2565)
| |--signapk ?(apk簽名工具)
| |--zipalign ?(zip archive alignment tool)
4、cts兼容性測試工具目錄。
5、Dalvik目錄:
|-dalvikvm ?(main.c的目錄)
|--dexdump ?(dex反匯編)
|--dexgen ?
|--dexlist ?(List all methods in all concrete classes in a DEX file.)
|--dexopt ?(預驗證與優化)
|--docs ?(文檔)
|--dvz ?(和zygote相關的一個命令)
|--dx ?(dx工具,將多個java轉換為dex)
|--hit ?(java語言寫成)
|--libdex ?(dex的庫)
|--libnativehelper ?(Support functions for Android's class libraries)
|--tests ?(測試代碼)
|--tools ?(工具)
|--unit-tests ?(單元測試)
|--vm ?(虛擬機)
6、development目錄:
|--apps ?(些核心應用程序)
| |--BluetoothDebug ?(藍牙調試程序)
| |--BuildWidget
| |--CustomLocale ?(自定義區域設置)
| |--Development ?(開發)
| |--Fallback ?(和語言相關的一個程序)
| |--FontLab ?(字庫)
| |--GestureBuilder ?(手勢動作)
| |--launchperf?
| |--NinePatchLab ?
| |--OBJViewer ?(OBJ查看器)
| |--SdkSetup ?(SDK安裝器)
| |--WidgetPreview ?(插件預覽器)
|--build ?(編譯腳本模板)
|--cmds ?(有個monkey工具)
|--data ?(配置數據)
|--docs ?(文檔)
|--host ?(主機端USB驅動等)
|--ide ?(集成開發環境)
|--ndk ?(本地開發套件——c語言開發套件)
|--pdk ?(Plug Development Kit)
|--samples ?(各種應用例子)
|--scripts ?(腳本)
|--sdk ?(sdk配置)
|--testrunner ?(測試用)
|--tutorials ?(教程)
7、device目錄:廠商設備配置目錄,針對不同設備,由不同的子目錄來分別管理,用來裁剪實現不同設備上Android目標系統。
8、docs目錄:官方網站文檔。
9、external目錄:Android系統使用的其它開源代碼目錄,如jpeg圖片解碼開源庫、opencore開源代碼等。
10、framework目錄:
frameworks 目錄 (核心框架——java及C++語言)
|-- base (基本內容)
| |-- api (?都是xml文件,定義了java的api?)
| |-- awt (AWT庫)
| |-- build (空的)
| |-- camera (攝像頭服務程序庫)
| |-- cmds (重要命令:am、app_proce等)
| |-- core (核心庫)
| |-- data (字體和聲音等數據文件)
| |-- docs (文檔)
| |-- graphics (圖形相關)
| |-- include (頭文件)
| |-- keystore (和數據簽名證書相關)
| |-- libs (庫)
| |-- location (地區庫)
| |-- media (媒體相關庫)
| |-- obex (藍牙傳輸庫)
| |-- opengl (2D-3D加速庫)
| |-- packages (設置、TTS、VPN程序)
| |-- sax (XML解析器)
| |-- services (各種服務程序)
| |-- telephony (電話通訊管理)
| |-- test-runner (測試工具相關)
| |-- tests (各種測試)
| |-- tools (一些叫不上名的工具)
| |-- vpn (VPN)
| |-- wifi (無線網絡)
|-- opt (可選部分)
| |-- com.google.android (有個framework.jar)
| |-- com.google.android.googlelogin (有個client.jar)
| |-- emoji (standard message elements)
|-- policies Product policies are operating system directions aimed at specific uses)
|-- base
|-- mid (MID設備)
|-- phone (手機類設備,一般用這個)
11、hardware目錄:
hardware 目錄 (部分廠家開源的硬解適配層HAL代碼)
|-- broadcom (博通公司)
| |-- wlan (無線網卡)
|-- libhardware (硬件庫)
| |-- include (頭文件)
| |-- modules (Default (and possibly architecture dependents) HAL modules)
| |-- gralloc (gralloc顯示相關)
| |-- overlay (Skeleton for the "overlay" HAL module.)
|-- libhardware_legacy (舊的硬件庫)
| |-- flashlight (背光)
| |-- gps (GPS)
| |-- include (頭文件)
| |-- mount (舊的掛載器)
| |-- power (電源)
| |-- qemu (模擬器)
| |-- qemu_tracing (模擬器跟蹤)
| |-- tests (測試)
| |-- uevent (uevent)
| |-- vibrator (震動)
| |-- wifi (無線)
|-- msm7k (高通7k處理器開源抽象層)
| |-- boot (啟動)
| |-- libaudio (聲音庫)
| |-- libaudio-qsd8k (qsd8k的聲音相關庫)
| |-- libcamera (攝像頭庫)
| |-- libcopybit (copybit庫)
| |-- libgralloc (gralloc庫)
| |-- libgralloc-qsd8k (qsd8k的gralloc庫)
| |-- liblights (背光庫)
| |-- librpc (RPC庫)
|-- ril (無線電抽象層)
| |-- include (頭文件)
| |-- libril (庫)
| |-- reference-cdma-sms (cdma短信參考)
| |-- reference-ril (ril參考)
| |-- rild (ril后臺服務程序)
|-- ti (ti公司開源HAL)
|-- omap3 (omap3處理器)
| |-- dspbridge (DSP橋)
| |-- libopencorehw (opencore硬件庫)
| |-- liboverlay (overlay硬件庫)
| |-- libstagefrighthw (stagefright硬件庫)
| |-- omx (omx組件)
|-- wlan (無線網卡)
12、packages目錄:
packages 目錄
|-- apps ? ? ? ? ? ? ? ? ?(應用程序庫)
| |-- AlarmClock ? ? ? ? ? ? (鬧鐘)
| |-- Bluetooth ? ? ? ? ? ? ? ?(藍牙)
| |-- Browser ? ? ? ? ? ? ? ?(瀏覽器)
| |-- Calculator ? ? ? ? ? ? ? ?(計算器)
| |-- Calendar ? ? ? ? ? ? ? ?(日歷)
| |-- Camera ? ? ? ? ? ? ? ? (相機)
| |-- CertInstaller ? ? ? ? ? ?(在Android中安裝數字簽名,被調用)
| |-- Contacts ? ? ? ? ? ? ? ?(撥號(調用)、聯系人、通話記錄)
| |-- DeskClock ? ? ? ? ? ? ? ?(桌面時鐘)
| |-- Email ? ? ? ? ? ? ? ? ? ? ? ?(Email)
| |-- Gallery ? ? ? ? ? ? ? ? ? ? ?(相冊,和Camera類似,多了列表)
| |-- Gallery3D ? ? ? ? ? ? ? ?(?3D相冊)
| |-- GlobalSearch ? ? ? ?(為google搜索服務,提供底層應用)
| |-- GoogleSearch ? ? ? ?(google搜索)
| |-- HTMLViewer ? ? ? (瀏覽器附屬界面,被瀏覽器應用調用,同時提供存儲記錄功能)
| |-- IM ? ? ? ? ? ? ? ? ? ? ? ?(即時通訊,為手機提供信號發送、接收、通信的服務)
| |-- Launcher ? ? ? ? ? ?(登陸啟動項,顯示圖片框架等等圖形界面)
| |-- Launcher2 ? ? ? ? ? ?(登陸啟動項,負責應用的調用)
| |-- Mms ? ? ? ? ? ? ? ? ?(?彩信業務)
| |-- Music ? ? ? ? ? ? ? ? (音樂播放器)
| |-- PackageInstaller ? ? ? ?(安裝、卸載程序的響應)
| |-- Phone ? ? ? ? ? ? ? ? ? ? (電話撥號程序)
| |-- Provision ? ? ? ? ? ? ? ?(預設應用的狀態,使能應用)
| |-- Settings ? (開機設定,包括電量、藍牙、設備信息、界面、wifi等)
| |-- SoundRecorder ? ? ? ?(錄音機,可計算存儲所需空間和時間)
| |-- Stk ? ? ? ? ? ? ? ? ? ? ? ? (接收和發送短信)
| |-- Sync ? ? ? ? (空) ? -------○1
| |-- Updater ? ? ? ? ? ? ?(空)
| |-- VoiceDialer ? ? ? ? ? ? ? ?(語音識別通話)
|-- inputmethods ? ? ? ? ? ? ? ?(輸入法)
| |-- LatinIME ? ? ? ? ? ? ? ?(拉丁文輸入法)
| |-- OpenWnn ? ? ? ? ? ? ? ?(OpenWnn輸入法)
| |-- PinyinIME ? ? ? ? ? ? ? ?(拼音輸入法)
|-- providers ? ? ? ? ? (提供器,提供應用程序、界面所需的數據)
| |-- ApplicationsProvider(應用程序提供器,提供應用程序啟動項、更新等)
| |-- CalendarProvider ? ? ? ? ? ? ? ? ? ? ? ?(日歷提供器)
| |-- ContactsProvider ? ? ? ? ? ? ? ? ? ? ? ?(聯系人提供器)
| |-- DownloadProvider ? ? ? ? ? ? ? ?(下載管理提供器)
| |-- DrmProvider ? ? ? ? ? ? ? ? ? ? ? ?(創建和更新數據庫時調用)
| |-- GoogleContactsProvider ?(聯系人提供器的子類,用以同步聯系人)
| |-- GoogleSubscribedFeedsProvider(設置信息提供器)
| |-- ImProvider ? ? ? ? ? ? ? ? (空)
| |-- ManagementProvider ? ? ? ?(空)
| |-- MediaProvider ? ? ? ? ? ? (媒體提供器,提供存儲數據)
| |-- TelephonyProvider ? ? ? ? (彩信提供器)
| |-- UserDictionaryProvider ? ? ? ?(用戶字典提供器,提供用戶常用字字典)
| |-- WebSearchProvider ? ? ? ? ? ? ? ?(空)
|-- services ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
| |-- EasService ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(空)
| |-- LockAndWipe ? ? ? ? ? ? ? ? ? ? ? ?(空)
|-- wallpapers ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(墻紙)
| |-- Basic ? ? ? ? (基本墻紙,系統內置墻紙)
| |-- LivePicker ? ? ? ? ? ?(選擇動態壁紙)
| |-- MagicSmoke ? ? ? ? ? (壁紙特殊效果)
| |-- MusicVisualization ? ? ?(音樂可視化,圖形隨音樂而變化)
13、prebuilt目錄:
prebuilt 目錄 (x86和arm架構下預編譯的一些資源)
|-- android-arm ? ? (arm-android相關)
| |-- gdbserver ? ? ? ? (gdb調試器)
| |-- kernel ? ? ?(模擬的arm內核)
|-- android-x86 ? ? (x86-android相關)
| |-- kernel ? ? ? ? ? (空的)
|-- common ? ? ? (通用編譯好的代碼,應該是java的)
|-- darwin-x86 ? ? ? ?(drawin x86平臺)
| |-- toolchain ? ? ? ? ? (工具鏈)
| | |-- arm-eabi-4.2.1 ? ? ? ?
| | |-- arm-eabi-4.3.1 ? ? ? ?
| | |-- arm-eabi-4.4.0 ? ? ? ?
|-- darwin-x86_64 ? (drawin x86 64bit平臺)
|-- linux-x86 ? ? ? ? ?(linux x86平臺)
| |-- toolchain ? ? ? ? ? ? ? ?(工具鏈,我們應該主要用這個)
| | |-- arm-eabi-4.2.1 ? ? ? ?
| | |-- arm-eabi-4.3.1 ? ? ? ?
| | |-- arm-eabi-4.4.0 ? ? ? ?
| | |-- i686-unknown-linux-gnu-4.2.1 ? ? ? ?(x86版編譯器)
|-- linux-x86_64 ? ? (linux x86 64bit平臺)
|-- windows ? ? ? ? ? ? ?(windows平臺)
|-- windows-x86_64 ? ? ?(64bit windows平臺)
14、system目錄:
system 目錄 ? ? ? ?(底層文件系統庫、應用及組件——C語言)
|-- Bluetooth ? ? ? ? (藍牙相關)
|-- core ? ? ? ?(系統核心工具盒接口)
| |-- adb ? ? ? ? ? ? ? ?(adb調試工具)
| |-- cpio ? ? ? ? ? ? ? ?(cpio工具,創建img)
| |-- debuggerd ? ? ? ?(調試工具)
| |-- fastboot ? ? ? ?(快速啟動相關)
| |-- include ? ? ? ? ? ? ? ?(系統接口頭文件)
| |-- init ? ? ? ? ? ? ? ?(init程序源代碼)
| |-- libacc ? ? ? ? ? ? ? ?(輕量級C編譯器)
| |-- libctest ? ? ? ? ? ? ? ?(libc測試相關)
| |-- libcutils ? ? ? ?(libc工具)
| |-- liblog ? ? ? ? ? ? ? ?(log庫)
| |-- libmincrypt ? ? ? ?(加密庫)
| |-- libnetutils ? ? ? ?(網絡工具庫)
| |-- libpixelflinger ? ? ? ?(圖形處理庫)
| |-- libsysutils ? ? ? ?(系統工具庫)
| |-- libzipfile ? ? ? ?(zip庫)
| |-- logcat ? ? ? ? ? ? ? ?(查看log工具)
| |-- logwrapper ? ? ? ?(log封裝工具)
| |-- mkbootimg ? ? ? ?(制作啟動boot.img的工具盒腳本)
| |-- netcfg ? ? ? ? ? ? ? ?(網絡配置netcfg源碼)
| |-- nexus ? ? ? ? ? ? ? ?(google最新手機的代碼)
| |-- rootdir ? ? ? ? ? ? ? ?(rootfs,包含一些etc下的腳本和配置)
| |-- sh ? ? ? ? ? ? ? ? ? ? ? ?(shell代碼)
| |-- toolbox ? ? ? ? ? ? ? ?(toolbox,類似busybox的工具集)
|-- vold ? ? ? ? ? ? ? ?(SD卡管理器)
|-- extras ? ? ? ? ? ? ? ?(額外工具)
| |-- latencytop a tool for software developers,identifying system latency happen)
| |-- libpagemap ? ? ? ?(pagemap庫)
| |-- librank ? ? ? ? ? ? ? ?(Java Library Ranking System庫)
| |-- procmem ? ? ? ?(pagemap相關)
| |-- procrank ? ? ? ?(Java Library Ranking System相關)
| |-- showmap ? ? ? ?(showmap工具)
| |-- showslab ? ? ? ?(showslab工具)
| |-- sound ? ? ? ? ? ? ? ?(聲音相關)
| |-- su ? ? ? ? ? ? ? ? ? ? ? ?(su命令源碼)
| |-- tests ? ? ? ? ? ? ? ?(一些測試工具)
| |-- timeinfo ? ? ? ?(時區相關)
?