天天看點

android源碼結構解析Android源代碼結構分析

           部落格裡找到一篇很詳細的源碼架構解析,作為初期對照看源碼還是有很大幫助的,暫且轉來留着用了。感謝部落格原作者niyufeng。

Android源代碼結構分析

Google提供的Android包含了:Android源代碼,工具鍊,基礎C庫,仿真環境,開發環境等,完整的一套。

第一級别的目錄和檔案如下所示:

[cpp]  view plain copy

  1. ----------------  
  2. ├── Makefile            全局的Makefile  
  3. ├── build               系統編譯規則和配置所需要的腳本和工具  
  4. ----------------  
  5. ├── prebuilt        各種平台編譯工具鍊  
  6. ├── bionic              基礎C庫源代碼  
  7. ----------------  
  8. ├── frameworks *        Android應用程式的核心架構層(java及C++語言)  
  9. ├── system     *        底層檔案系統/庫/應用及元件(C語言)  
  10. ├── dalvik              JAVA虛拟機  
  11. ├── external            android使用的一些額外開源庫  
  12. ├── libcore             與媒體播放架構代碼相關  
  13. ----------------  
  14. ├── packages            各種應用程式執行個體  
  15. ├── development         程式開發所需要的執行個體/模闆/工具  
  16. ----------------  
  17. ├── ndk  
  18. ├── sdk  
  19. ├── cts                 Android CTS相容性規範測試用例  
  20. ----------------  
  21. ├── vendor     *        廠商定制代碼  
  22. ├── device     *        廠商定制代碼  
  23. ├── hardware   *        一些與硬體相關的庫,部分廠家開源的硬解适配層HAL代碼  
  24. ├── kernel     *        Linux源代碼  
  25. ├── bootable            引導加載器  
  26. ├── recovery            與目标的恢複功能相關  
  27. ----------------  

android的移植按如下流程:

(1)android linux 核心的普通驅動移植,讓核心可以在目标平台上運作起來。

(2)正确挂載檔案系統,確定核心啟動參數和 android 源代碼 system/core/rootdir 目錄下的 init.rc 中的檔案系統挂載正确。

(3)調試控制台,讓核心啟動參數中的 console 參數以及 android 源代碼 system/core/init/init.c 中的console_name 設定和硬體保持一緻

(4)打開 android 相關的驅動(logger,binder 等),序列槽輸入 logcat 看 logger 驅動起來,沒有的話調試logger 驅動。

解決底層問題方法:解除Android系統的耦合l

1 将Dalvik于bionic以及硬體驅動剝離開

2 修改Dalvik以支援标準glibc和GNU/Linux

3 把Dalvik當作普通應用程式

4 Dalvik可被單獨優化和改進

build目錄

[cpp]  view plain copy

  1. .  
  2. |-- envsetup.sh    是一個在使用仿真器運作的時候,用于設定環境的腳本  
  3. |-- core          (核心編譯規則,以mk為結尾的文Makefile件,被頂層目錄的Makefile引用)  
  4. |-- history       (曆史記錄)  
  5. |-- libs                                  
  6. |   `-- host       (主機端庫,有android “cp”功能替換)  
  7. |-- target            (目标機編譯對象,包含board和product兩個目錄,為目标所需要檔案)  
  8. |   |-- board          (開發平台)  
  9. |   |   |-- emulator        (模拟器)  
  10. |   |   |-- generic         (通用)  
  11. |   |   |-- idea6410        (自己添加的)  
  12. |   |   `-- sim              (最簡單)  
  13. |   `-- product        (開發平台對應的編譯規則)  
  14. |       `-- security        (密鑰相關)  
  15. `-- tools             (編譯中主機使用的工具及腳本)  
  16.     |-- acp             (Android "acp" Command)  
  17.     |-- apicheck         (api檢查工具)  
  18.     |-- applypatch       (更新檔工具)  
  19.     |-- apriori           (預連結工具)  
  20.     |-- atree            (tree工具)  
  21.     |-- bin2asm            (bin轉換為asm工具)  
  22.     |-- check_prereq     (檢查編譯時間戳工具)  
  23.     |-- dexpreopt         (模拟器相關工具,具體功能不明)  
  24.     |-- droiddoc          (?作用不明,java語言,網上有人說和JDK5有關)  
  25.     |-- fs_config         (This program takes a list of files and directories)  
  26.     |-- fs_get_stats    (擷取檔案系統狀态)  
  27.     |-- iself            (判斷是否ELF格式)  
  28.     |-- isprelinked     (判斷是否prelinked)  
  29.     |-- kcm             (按鍵相關)  
  30.     |-- lsd            (List symbol dependencies)  
  31.     |-- releasetools   (生成鏡像的工具及腳本)  
  32.     |-- rgb2565        (rgb轉換為565)  
  33.     |-- signapk        (apk簽名工具)  
  34.     |-- soslim         (strip工具)  
  35.     `-- zipalign           (zip archive alignment tool)  

prebuilt 目錄

x86和ARM架構下工具鍊/預編譯的一些資源

[cpp]  view plain copy

  1. .  
  2. |-- android-arm   (arm-android相關)  
  3. |   |-- gdbserver   (gdb調試器)  
  4. |   `-- kernel    (模拟的arm核心)  
  5. |-- android-x86   (x86-android相關)  
  6. |   `-- kernel    (空的)  
  7. |-- common    (通用編譯好的代碼,應該是java的)  
  8. |-- darwin-x86    (drawin x86平台)  
  9. |   `-- toolchain   (工具鍊)  
  10. |       |-- arm-eabi-4.2.1  
  11. |       |-- arm-eabi-4.3.1  
  12. |       `-- arm-eabi-4.4.0  
  13. |-- darwin-x86_64   (drawin x86 64bit平台)  
  14. |-- linux-x86    (linux x86平台)  
  15. |   `-- toolchain   (工具鍊,我們應該主要用這個)  
  16. |       |-- arm-eabi-4.2.1  
  17. |       |-- arm-eabi-4.3.1  
  18. |       |-- arm-eabi-4.4.0  
  19. |       `-- i686-unknown-linux-gnu-4.2.1 (x86版編譯器)  
  20. |-- linux-x86_64   (linux x86 64bit平台)  
  21. |-- windows    (windows平台)  
  22. `-- windows-x86_64 (64bit windows平台)  

bionic 目錄

基礎C庫源代碼 [cpp]  view plain copy

  1. .  
  2. |-- Android.mk  
  3. |-- libc      (C庫)  
  4. |-- libdl     (libdl實作,dl是動态連結,提供通路動态連結庫的功能)  
  5. |-- libm      (libm數學庫的實作)  
  6. |-- libstdc++ (C++實作庫libstdc++)  
  7. |-- libthread_db  (多線程程式的調試器庫)  
  8. `-- linker     (動态連結器)  

frameworks 目錄

核心架構--java及C++語言 [cpp]  view plain copy

  1. .  
  2. |-- base    (基本内容)  
  3. |   |-- api   (?都是xml檔案,定義了java的api?)  
  4. |   |-- awt   (AWT庫)  
  5. |   |-- build   (空的)  
  6. |   |-- camera   (攝像頭服務程式庫)  
  7. |   |-- cmds   (重要指令:am、app_proce等)  
  8. |   |-- core   (核心庫)  
  9. |   |-- data   (字型和聲音等資料檔案)  
  10. |   |-- docs   (文檔)  
  11. |   |-- graphics (圖形相關)  
  12. |   |-- include   (頭檔案)  
  13. |   |-- keystore (和資料簽名證書相關)  
  14. |   |-- libs   (庫)  
  15. |   |-- location (地區庫)  
  16. |   |-- media   (媒體相關庫)  
  17. |   |-- obex   (藍牙傳輸庫)  
  18. |   |-- opengl   (2D-3D加速庫)  
  19. |   |-- packages (設定、TTS、VPN程式)  
  20. |   |-- sax   (XML解析器)  
  21. |   |-- services (各種服務程式)  
  22. |   |-- telephony (電話通訊管理)  
  23. |   |-- test-runner (測試工具相關)  
  24. |   |-- tests   (各種測試)  
  25. |   |-- tools   (一些叫不上名的工具)  
  26. |   |-- vpn   (VPN)  
  27. |   `-- wifi   (無線網絡)  
  28. |-- opt    (可選部分)  
  29. |   |-- com.google.android     (有個framework.jar)  
  30. |   |-- com.google.android.googlelogin   (有個client.jar)  
  31. |   `-- emoji   (standard message elements)  
  32. `-- policies   (Product policies are operating system directions aimed at specific uses)  
  33.     `-- base    
  34.         |-- mid (MID裝置)  
  35.         `-- phone (手機類裝置,一般用這個)  

system 目錄

底層檔案系統/庫/應用及元件--C語言 [cpp]  view plain copy

  1. .  
  2. |-- Bluetooth   (藍牙相關)  
  3. |-- core    (系統核心工具盒接口)  
  4. |   |-- adb   (adb調試工具)  
  5. |   |-- cpio   (cpio工具,建立img)  
  6. |   |-- debuggerd (調試工具)  
  7. |   |-- fastboot (快速啟動相關)  
  8. |   |-- include   (系統接口頭檔案)  
  9. |   |-- init   (init程式源代碼)  
  10. |   |-- libacc   (輕量級C編譯器)  
  11. |   |-- libctest   (libc測試相關)  
  12. |   |-- libcutils (libc工具)  
  13. |   |-- liblog   (log庫)  
  14. |   |-- libmincrypt (加密庫)  
  15. |   |-- libnetutils (網絡工具庫)  
  16. |   |-- libpixelflinger (圖形處理庫)  
  17. |   |-- libsysutils (系統工具庫)  
  18. |   |-- libzipfile (zip庫)  
  19. |   |-- logcat   (檢視log工具)  
  20. |   |-- logwrapper (log封裝工具)  
  21. |   |-- mkbootimg (制作啟動boot.img的工具盒腳本)  
  22. |   |-- netcfg   (網絡配置netcfg源碼)  
  23. |   |-- nexus   (google最新手機的代碼)  
  24. |   |-- rootdir   (rootfs,包含一些etc下的腳本和配置)  
  25. |   |-- sh    (shell代碼)  
  26. |   |-- toolbox   (toolbox,類似busybox的工具集)  
  27. |   `-- vold   (SD卡管理器)  
  28. |-- extras    (額外工具)  
  29. |   |-- latencytop (a tool for software developers ,identifying system latency happen)  
  30. |   |-- libpagemap (pagemap庫)  
  31. |   |-- librank   (Java Library Ranking System庫)  
  32. |   |-- procmem (pagemap相關)  
  33. |   |-- procrank (Java Library Ranking System相關)  
  34. |   |-- showmap (showmap工具)  
  35. |   |-- showslab (showslab工具)  
  36. |   |-- sound   (聲音相關)  
  37. |   |-- su    (su指令源碼)  
  38. |   |-- tests   (一些測試工具)  
  39. |   `-- timeinfo (時區相關)  
  40. `-- wlan    (無線相關)  
  41.     `-- ti    (ti網卡相關工具及庫)  

dalvik 目錄

提供Android JAVA應用程式運作的基礎--JAVA虛拟機

[cpp]  view plain copy

  1. .  
  2. |-- dalvikvm                  (main.c的目錄)  
  3. |-- dexdump                  (dex反彙編)  
  4. |-- dexlist                      (List all methods in all concrete classes in a DEX file.)  
  5. |-- dexopt                            (預驗證與優化)  
  6. |-- docs                        (文檔)  
  7. |-- dvz                          (和zygote相關的一個指令)  
  8. |-- dx                           (dx工具,将多個java轉換為dex)  
  9. |-- hit                           (?java語言寫成)  
  10. |-- libcore                            (核心庫)  
  11. |-- libcore-disabled         (?禁用的庫)  
  12. |-- libdex                       (dex的庫)  
  13. |-- libnativehelper           (Support functions for Android's class libraries)  
  14. |-- tests                        (測試代碼)  
  15. |-- tools                        (工具)  
  16. `-- vm                          (虛拟機實作)  

external 目錄

android使用的一些額外開源庫

[cpp]  view plain copy

  1. .  
  2. |-- aes    (AES加密)  
  3. |-- apache-http   (網頁伺服器)  
  4. |-- astl    (ASTL (Android STL) is a slimmed-down version of the regular C++ STL.)  
  5. |-- bison    (自動生成文法分析器,将無關文法轉換成C、C++)  
  6. |-- blktrace   (blktrace is a block layer IO tracing mechanism)  
  7. |-- bluetooth   (藍牙相關、協定棧)  
  8. |-- bsdiff    (diff工具)  
  9. |-- bzip2    (壓縮工具)  
  10. |-- clearsilver   (html模闆系統)  
  11. |-- dbus    (低延時、低開銷、高可用性的IPC機制)  
  12. |-- dhcpcd   (DHCP服務)  
  13. |-- dosfstools   (DOS檔案系統工具)  
  14. |-- dropbear   (SSH2的server)  
  15. |-- e2fsprogs   (EXT2檔案系統工具)  
  16. |-- elfcopy   (複制ELF的工具)  
  17. |-- elfutils    (ELF工具)  
  18. |-- embunit   (Embedded Unit Project)  
  19. |-- emma    (java代碼覆寫率統計工具)  
  20. |-- esd    (Enlightened Sound Daemon,将多種音頻流混合在一個裝置上播放)  
  21. |-- expat    (Expat is a stream-oriented XML parser.)  
  22. |-- fdlibm    (FDLIBM (Freely Distributable LIBM))  
  23. |-- freetype   (字型)  
  24. |-- fsck_msdos   (dos檔案系統檢查工具)  
  25. |-- gdata    (google的無線資料相關)  
  26. |-- genext2fs   (genext2fs generates an ext2 filesystem as a normal (non-root) user)  
  27. |-- giflib    (gif庫)  
  28. |-- googleclient (google使用者庫)  
  29. |-- grub    (This is GNU GRUB, the GRand Unified Bootloader.)  
  30. |-- gtest    (Google C++ Testing Framework)  
  31. |-- icu4c    (ICU(International Component for Unicode)在C/C++下的版本)  
  32. |-- ipsec-tools   (This package provides a way to use the native IPsec functionality )  
  33. |-- iptables   (防火牆)  
  34. |-- jdiff    (generate a report describing the difference between two public Java APIs.)  
  35. |-- jhead    (jpeg頭部資訊工具)  
  36. |-- jpeg    (jpeg庫)  
  37. |-- junit    (JUnit是一個Java語言的單元測試架構)  
  38. |-- kernel-headers (核心的一些頭檔案)  
  39. |-- libffi    (libffi is a foreign function interface library.)  
  40. |-- libpcap   (網絡資料包捕獲函數)  
  41. |-- libpng    (png庫)  
  42. |-- libxml2   (xml解析庫)  
  43. |-- mtpd    (一個指令)  
  44. |-- netcat    (simple Unix utility which reads and writes dataacross network connections)  
  45. |-- netperf    (網絡性能測量工具)  
  46. |-- neven    (看代碼和JNI相關)  
  47. |-- opencore   (多媒體架構)  
  48. |-- openssl   (SSL加密相關)  
  49. |-- openvpn   (VPN開源庫)  
  50. |-- oprofile   (OProfile是Linux核心支援的一種性能分析機制。)  
  51. |-- ping    (ping指令)  
  52. |-- ppp    (pppd撥号指令,好像還沒有chat)  
  53. |-- proguard   (Java class file shrinker, optimizer, obfuscator, and preverifier)  
  54. |-- protobuf   (a flexible, efficient, automated mechanism for serializing structured data)  
  55. |-- qemu    (arm模拟器)  
  56. |-- safe-iop   (functions for performing safe integer operations )  
  57. |-- skia    (skia圖形引擎)  
  58. |-- sonivox   (sole MIDI solution for Google Android Mobile Phone Platform)  
  59. |-- speex    (Speex編/解碼API的使用(libspeex))  
  60. |-- sqlite    (資料庫)  
  61. |-- srec    (Nuance 公司提供的開源連續非特定人語音識别)  
  62. |-- strace    (trace工具)  
  63. |-- svox    (Embedded Text-to-Speech)  
  64. |-- tagsoup   (TagSoup是一個Java開發符合SAX的HTML解析器)  
  65. |-- tcpdump   (抓TCP包的軟體)  
  66. |-- tesseract   (Tesseract Open Source OCR Engine.)  
  67. |-- tinyxml   (TinyXml is a simple, small, C++ XML parser)  
  68. |-- tremor    (I stream and file decoder provides an embeddable,integer-only library)  
  69. |-- webkit    (浏覽器核心)  
  70. |-- wpa_supplicant (無線網卡管理)  
  71. |-- xmlwriter   (XML 編輯工具)  
  72. |-- yaffs2    (yaffs檔案系統)  
  73. `-- zlib    (a general purpose data compression library)  

在external中,每個目錄表示Android目标系統中的一個子產品,可能有一個或者若幹個庫構成。其中:

  opencore為PV(PacketVideo),它是Android多媒體架構的核心。

  webkit是Android網絡浏覽器的核心。

  sqlite是Android資料庫系統的核心。

  openssl是Secure Socket Layer,一個網絡協定層,用于為資料通訊提供安全支援。

packages 目錄

各種應用程式執行個體

[cpp]  view plain copy

  1. .  
  2. |-- apps     (應用程式庫)  
  3. |   |-- AlarmClock   (鬧鐘)  
  4. |   |-- Bluetooth   (藍牙)  
  5. |   |-- Browser   (浏覽器)  
  6. |   |-- Calculator   (電腦)  
  7. |   |-- Calendar   (月曆)  
  8. |   |-- Camera    (相機)  
  9. |   |-- CertInstaller   (在Android中安裝數字簽名,被調用)  
  10. |   |-- Contacts   (撥号(調用)、聯系人、通話記錄)  
  11. |   |-- DeskClock   (桌面時鐘)  
  12. |   |-- Email    (Email)  
  13. |   |-- Gallery    (相冊,和Camera類似,多了清單)  
  14. |   |-- Gallery3D   (?3D相冊)  
  15. |   |-- GlobalSearch (為google搜尋服務,提供底層應用)  
  16. |   |-- GoogleSearch (google搜尋)  
  17. |   |-- HTMLViewer (浏覽器附屬界面,被浏覽器應用調用,同時提供存儲記錄功能)  
  18. |   |-- IM    (即時通訊,為手機提供信号發送、接收、通信的服務)  
  19. |   |-- Launcher   (登陸啟動項,顯示圖檔架構等等圖形界面)  
  20. |   |-- Launcher2   (登陸啟動項,負責應用的調用)  
  21. |   |-- Mms    (?彩信業務)  
  22. |   |-- Music    (音樂播放器)  
  23. |   |-- PackageInstaller (安裝、解除安裝程式的響應)  
  24. |   |-- Phone    (電話撥号程式)  
  25. |   |-- Provision   (預設應用的狀态,使能應用)  
  26. |   |-- Settings   (開機設定,包括電量、藍牙、裝置資訊、界面、wifi等)  
  27. |   |-- SoundRecorder (錄音機,可計算存儲所需空間和時間)  
  28. |   |-- Stk     (接收和發送短信)  
  29. |   |-- Sync    (空)   -------○1  
  30. |   |-- Updater   (空)  
  31. |   `-- VoiceDialer   (語音識别通話)  
  32. |-- inputmethods   (輸入法)  
  33. |   |-- LatinIME   (拉丁文輸入法)  
  34. |   |-- OpenWnn   (OpenWnn輸入法)  
  35. |   `-- PinyinIME   (拼音輸入法)  
  36. |-- providers    (提供器,提供應用程式、界面所需的資料)  
  37. |   |-- ApplicationsProvider   (應用程式提供器,提供應用程式啟動項、更新等)  
  38. |   |-- CalendarProvider    (月曆提供器)  
  39. |   |-- ContactsProvider    (聯系人提供器)  
  40. |   |-- DownloadProvider   (下載下傳管理提供器)  
  41. |   |-- DrmProvider    (建立和更新資料庫時調用)  
  42. |   |-- GoogleContactsProvider (聯系人提供器的子類,用以同步聯系人)  
  43. |   |-- GoogleSubscribedFeedsProvider(設定資訊提供器)  
  44. |   |-- ImProvider     (空)  
  45. |   |-- ManagementProvider   (空)  
  46. |   |-- MediaProvider    (媒體提供器,提供存儲資料)  
  47. |   |-- TelephonyProvider   (彩信提供器)  
  48. |   |-- UserDictionaryProvider (使用者字典提供器,提供使用者常用字字典)  
  49. |   `-- WebSearchProvider   (空)  
  50. |-- services       
  51. |   |-- EasService     (空)  
  52. |   `-- LockAndWipe    (空)  
  53. `-- wallpapers      (牆紙)  
  54.     |-- Basic      (基本牆紙,系統内置牆紙)  
  55.     |-- LivePicker     (選擇動态桌面)  
  56.     |-- MagicSmoke    (桌面特殊效果)  
  57.     `-- MusicVisualization   (音樂可視化,圖形随音樂而變化)  

packages中包含兩個目錄,其中apps中是Android中的各種應用程式,providers是一些内容提供者(是内部自帶的資料庫源程式)。

packages中兩個目錄的内容大都是使用JAVA編寫的程式,各個檔案夾的層次結構是類似的。

作為基于SDK的開發者一般看的都是packages/apps目錄下的程式執行個體,其中setting是我的最愛。

development 目錄

開發者需要的一些例程及工具

[cpp]  view plain copy

  1. .  
  2. |-- apps   (一些核心應用程式)  
  3. |   |-- BluetoothDebug (藍牙調試程式)  
  4. |   |-- CustomLocale   (自定義區域設定)  
  5. |   |-- Development    (開發)  
  6. |   |-- Fallback       (和語言相關的一個程式)  
  7. |   |-- FontLab        (字庫)  
  8. |   |-- GestureBuilder (手勢動作)  
  9. |   |-- NinePatchLab   (?)  
  10. |   |-- OBJViewer      (OBJ檢視器)  
  11. |   |-- SdkSetup       (SDK安裝器)  
  12. |   |-- SpareParts     (進階設定)  
  13. |   |-- Term           (遠端登入)  
  14. |   `-- launchperf     (?)  
  15. |-- build        (編譯腳本模闆)  
  16. |-- cmds         (有個monkey工具)  
  17. |-- data         (配置資料)  
  18. |-- docs         (文檔)  
  19. |-- emulator     (仿真相關)  
  20. |-- host         (主機端USB驅動等)  
  21. |-- ide          (內建開發環境)  
  22. |-- ndk          (本地開發套件——c語言開發套件)  
  23. |-- pdk          (Plug Development Kit)  
  24. |-- samples          (一些示例程式)  
  25. |   |-- AliasActivity       (?)  
  26. |   |-- ApiDemos            (API示範程式)  
  27. |   |-- BluetoothChat       (藍牙聊天)  
  28. |   |-- BrowserPlugin       (浏覽器插件)  
  29. |   |-- BusinessCard        (商業卡)  
  30. |   |-- Compass             (指南針)  
  31. |   |-- ContactManager      (聯系人管理器)  
  32. |   |-- CubeLiveWallpaper   (動态桌面的一個簡單例程)  
  33. |   |-- FixedGridLayout     (像是布局)  
  34. |   |-- GlobalTime          (全球時間)  
  35. |   |-- HelloActivity       (Hello)  
  36. |   |-- Home                (Home)  
  37. |   |-- JetBoy              (jetBoy遊戲)  
  38. |   |-- LunarLander         (貌似又是一個遊戲)  
  39. |   |-- MailSync            (郵件同步)  
  40. |   |-- MultiResolution     (多分辨率)  
  41. |   |-- MySampleRss         (RSS)  
  42. |   |-- NotePad             (記事本)  
  43. |   |-- RSSReader           (RSS閱讀器)  
  44. |   |-- SearchableDictionary  (目錄搜尋)  
  45. |   |-- SimpleJNI           (JNI例程)  
  46. |   |-- SkeletonApp         (空殼APP)  
  47. |   |-- Snake               (snake程式)  
  48. |   |-- SoftKeyboard        (軟鍵盤)  
  49. |   |-- Wiktionary          (?維基)  
  50. |   `-- WiktionarySimple    (?維基例程)  
  51. |-- scripts           (腳本)  
  52. |-- sdk               (sdk配置)  
  53. |-- simulator         (?模拟器,大多是目标機器的一些工具)  
  54. |-- testrunner        (?測試用)  
  55. `-- tools             (一些工具)  

在emulator目錄中qemud是使用QEMU仿真時目标機器運作的背景程式,skins是仿真時手機的界面。

samples中包含了很多Android簡單工程,這些工程為開發者學習開發Android程式提供了很大便利,可以作為模闆使用。

vendor 目錄

廠家定制内容

[cpp]  view plain copy

  1. .  
  2. |-- aosp     (android open source project)  
  3. |   `-- products   (一些闆級規則)  
  4. |-- htc     (HTC公司)  
  5. |   |-- common-open (通用部分)  
  6. |   |   `-- akmd   (解壓img用的工具)  
  7. |   |-- dream-open   (G1開放部分)  
  8. |   |-- prebuilt-open (預編譯開放部分)  
  9. |   `-- sapphire-open (sapphire這款型号開放内容)  
  10. |-- pv-open    (沒東西)  
  11. |-- qcom     (裡面基本是空的)  
  12. `-- sample    (google提供的樣例)  
  13.     |-- apps    (應用)  
  14.     |   |-- client   (使用者)  
  15.     |   `-- upgrade (更新)  
  16.     |-- frameworks   (架構)  
  17.     |   `-- PlatformLibrary (平台庫)  
  18.     |-- products   (産品)  
  19.     |-- sdk_addon   (sdk添加部分)  
  20.     `-- skins    (皮膚)  
  21.         `-- WVGAMedDpi (WVGA适用的圖檔)  

hardware 目錄

一些與硬體相關的庫,部分廠家開源的硬解适配層HAL代碼

[cpp]  view plain copy

  1. .  
  2. |-- broadcom    (博通公司)  
  3. |   `-- wlan    (無線網卡)  
  4. |-- libhardware    (硬體庫)  
  5. |   |-- include    (頭檔案)  
  6. |   `-- modules   (Default (and possibly architecture dependents) HAL modules)  
  7. |       |-- gralloc   (gralloc顯示相關)  
  8. |       `-- overlay   (Skeleton for the "overlay" HAL module.)  
  9. |-- libhardware_legacy (舊的硬體庫)  
  10. |   |-- flashlight   (背光)  
  11. |   |-- gps    (GPS)  
  12. |   |-- include    (頭檔案)  
  13. |   |-- mount    (舊的挂載器)  
  14. |   |-- power    (電源)  
  15. |   |-- qemu    (模拟器)  
  16. |   |-- qemu_tracing (模拟器跟蹤)  
  17. |   |-- tests    (測試)  
  18. |   |-- uevent    (uevent)  
  19. |   |-- vibrator    (震動)  
  20. |   `-- wifi    (無線)  
  21. |-- msm7k    (高通7k處理器開源抽象層)  
  22. |   |-- boot    (啟動)  
  23. |   |-- libaudio   (聲音庫)  
  24. |   |-- libaudio-qsd8k (qsd8k的聲音相關庫)  
  25. |   |-- libcamera   (攝像頭庫)  
  26. |   |-- libcopybit   (copybit庫)  
  27. |   |-- libgralloc   (gralloc庫)  
  28. |   |-- libgralloc-qsd8k (qsd8k的gralloc庫)  
  29. |   |-- liblights   (背光庫)  
  30. |   `-- librpc    (RPC庫)  
  31. |-- ril     (無線電抽象層)  
  32. |   |-- include    (頭檔案)  
  33. |   |-- libril    (庫)  
  34. |   |-- reference-cdma-sms (cdma短信參考)  
  35. |   |-- reference-ril    (ril參考)  
  36. |   `-- rild     (ril背景服務程式)  
  37. `-- ti       (ti公司開源HAL)  
  38.     |-- omap3     (omap3處理器)  
  39.     |   |-- dspbridge   (DSP橋)  
  40.     |   |-- libopencorehw (opencore硬體庫)  
  41.     |   |-- liboverlay   (overlay硬體庫)  
  42.     |   |-- libstagefrighthw (stagefright硬體庫)  
  43.     |   `-- omx    (omx元件)  
  44.     `-- wlan     (無線網卡)  

bootable 目錄

引導加載器

[cpp]  view plain copy

  1. .  
  2. |-- bootloader     (适合各種bootloader的通用代碼)  
  3. |   `-- legacy        (估計不能直接使用,可以參考)  
  4. |       |-- arch_armv6   (V6架構,幾個簡單的彙編檔案)  
  5. |       |-- arch_msm7k   (高通7k處理器架構的幾個基本驅動)  
  6. |       |-- include      (通用頭檔案和高通7k架構頭檔案)  
  7. |       |-- libboot      (啟動庫,都寫得很簡單)  
  8. |       |-- libc         (一些常用的c函數)  
  9. |       |-- nandwrite    (nandwirte函數實作)  
  10. |       `-- usbloader    (usbloader實作)  
  11. |-- diskinstaller     (android鏡像打包器,x86可生産iso)  
  12. `-- recovery         (系統恢複相關)  
  13.     |-- edify        (更新腳本使用的edify腳本語言)  
  14.     |-- etc       (init.rc恢複腳本)  
  15.     |-- minui        (一個簡單的UI)  
  16.     |-- minzip        (一個簡單的壓縮工具)  
  17.     |-- mtdutils      (mtd工具)  
  18.     |-- res         (資源)  
  19.     |   `-- images    (一些圖檔)  
  20.     |-- tools          (工具)  
  21.     |   `-- ota    (OTA Over The Air Updates更新工具)  
  22.     `-- updater       (更新器)  

out 目錄

Android編譯完成後,将在根目錄中生成一個out檔案夾,所有生成的内容均放置在這個檔案夾中

[cpp]  view plain copy

  1. .  
  2. |-- CaseCheck.txt  
  3. |-- casecheck.txt  
  4. |-- host          (在主機PC host上使用的工具,包括二進制程式以及JAVA的程式)  
  5. |    |-- common  
  6. |    |  `-- obj          (JAVA 庫)  
  7. |    `-- linux-x86  
  8. |         |-- bin        (二進制程式)  
  9. |         |-- framework  (JAVA 庫,*.jar 檔案)  
  10. |         |-- lib        (共享庫*.so)  
  11. |         `-- obj        (中間生成的目标檔案)  
  12. `-- target        (在目标機(如ARMv5)上運作的内容)  
  13.     |-- common       (common表示通用的内容)  
  14.     |    |-- R            (資源檔案)  
  15.     |    |-- docs  
  16.     |    `-- obj          (目标檔案,1 APPS中包含了打成APK包的JAVA應用程式,2 JAVA_LIBRARIES中包含了JAVA的庫)  
  17.     `-- product      (product 中則是針對産品的内容)  
  18.         `-- generic  
  19.             |-- android-info.txt  
  20.             |-- clean_steps.mk  
  21.             |-- symbols  
  22.             |-- obj       (obj/APPS目錄中包含了各種打成了APK包的JAVA應用,obj/SHARED_LIBRARIES中存放所有動态庫,obj/STATIC_LIBRARIES中存放所有靜态庫)  
  23.             |-- root/  
  24.             |-- ramdisk.img    (對應于root/目錄,挂載在/,)  
  25.             |-- system/  
  26.             |-- system.img    (挂載在system/目錄,包括了主要系統apps)  
  27.             |-- data/  
  28.             |-- userdata.img    (挂載在data/目錄,使用者資料)  
  29.             `-- userdata-qemu.img  

SDK和NDK目錄沒有列出。

作為基于SDK的開發者一般看的都是packages/apps目錄下的程式執行個體,其中setting是我的最愛。

而packages/providers是内部自帶的資料庫源程式。

development/是一些開發的例子,我現在正在看ndk的開發。