(轉)android系統架構及源碼目錄結構

轉自:http://blog.csdn.net/finewind/article/details/46324507html

 

1. Android系統架構:java

  android系統架構採用了分層架構的思想,以下圖所示,從上到下共4層,分別爲:應用程序層、應用程序框架層、系統庫和android運行時層、linux內核層。linux

 

每層功能簡要介紹以下:android

應用程序層(JAVA應用程序):c++

  該層提供一些核心應用程序包,例如電子郵件、短信、日曆、地圖、瀏覽器和聯繫人管理等。同時,開發者能夠利用Java語言設計和編寫屬於本身的應用程序,而這些程序與那些核心應用程序彼此平等、友好共處。apache

 

應用程序框架層(JAVA框架):瀏覽器

  該層是Android應用開發的基礎,開發人員大部分狀況是在和她打交道。應用程序框架層包括活動管理器、窗口管理器、內容提供者、視圖系統、包管理器、電話管理器、資源管理器、位置管理器、通知管理器和XMPP服務十個部分。在Android平臺上,開發人員能夠徹底訪問核心應用程序所使用的API框架。而且,任何一個應用程序均可以發佈自身的功能模塊,而其餘應用程序則能夠使用這些已發佈的功能模塊。基於這樣的重用機制,用戶就能夠方便地替換平臺自己的各類應用程序組件。安全

 

系統庫和android運行時層(本地框架和JAVA運行環境):服務器

  系統庫包括九個子系統,分別是圖層管理、媒體庫、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。網絡

  Android運行時包括核心庫和Dalvik虛擬機,前者既兼容了大多數Java語言所須要調用的功能函數,又包括了Android的核心庫,好比android.os、android.net、android.media等等。後者是一種基於寄存器的java虛擬機,Dalvik虛擬機主要是完成對生命週期的管理、堆棧的管理、線程的管理、安全和異常的管理以及垃圾回收等重要功能。

 

LINUX內核層:

  Android核心系統服務依賴於Linux內核,如安全性、內存管理、進程管理、網絡協議棧和驅動模型。Linux內核也是做爲硬件與軟件棧的抽象層。

  驅動:顯示驅動、攝像頭驅動、鍵盤驅動、WiFi驅動、Audio驅動、flash內存驅動、Binder(IPC)驅動、電源管理等。

 

2. android源碼目錄結構:

 

[plain]  view plain  copy
 
 在CODE上查看代碼片派生到個人代碼片
  1. Android 5.1  
  2. |-- Makefile  
  3. |-- abi  
  4. |-- art  
  5. |-- bionic (bionic C庫)  
  6. |-- bootable (啓動引導相關代碼)  
  7. |-- build (存放系統編譯規則及generic等基礎開發包配置)  
  8. |-- cts (Android兼容性測試套件標準)  
  9. |-- dalvik (dalvik JAVA虛擬機)  
  10. |-- developers  
  11. |-- development (應用程序開發相關)  
  12. |-- device  
  13. |-- docs  
  14. |-- external (android使用的一些開源的模組)  
  15. |-- frameworks (核心框架——java及C++語言)  
  16. |-- hardware (部分廠家開源的硬解適配層HAL代碼)  
  17. |-- kernel  
  18. |-- libcore  
  19. |-- libnativehelper  
  20. |-- ndk  
  21. |-- out (編譯完成後的代碼輸出與此目錄)  
  22. |-- packages (應用程序包)  
  23. |-- pdk  
  24. |-- prebuilts (x86和arm架構下預編譯的一些資源)  
  25. |-- sdk (sdk及模擬器)  
  26. |-- system (底層文件系統庫、應用及組件——C語言)  
  27. |-- tools  
  28. `-- vendor (廠商定製代碼)  
  29.   
  30. bionic 目錄  
  31. |-- benchmarks  
  32. |-- libc (C庫)  
  33. | |-- arch-arm (ARM架構,包含系統調用匯編實現)  
  34. | |-- ...  
  35. | |-- bionic (由C實現的功能,架構無關)  
  36. | |-- dns  
  37. | |-- include (頭文件)  
  38. | |-- kernel (Linux內核中的一些頭文件)  
  39. | |-- private (?一些私有的頭文件)  
  40. | |-- stdio (stdio實現)  
  41. | |-- tools (幾個工具)  
  42. | |-- tzcode (時區相關代碼)  
  43. | |-- upstream-dlmalloc  
  44. | |-- upstream-freebsd  
  45. | |-- upstream-netbsd  
  46. | |-- upstream-openbsd  
  47. | `-- zoneinfo (時區信息)  
  48. |-- libdl (libdl實現,dl是動態連接,提供訪問動態連接庫的功能)  
  49. |-- libm (libm數學庫的實現,)  
  50. |-- libstdc++ (libstdc++ C++實現庫)  
  51. |-- linker (動態連接器)  
  52. `-- test  
  53.   
  54. bootable 目錄  
  55. |-- bootloader (適合各類bootloader的通用代碼)  
  56. | |-- legacy (估計不能直接使用,能夠參考)  
  57. | `-- lk  
  58. `-- recovery (系統恢復相關)  
  59. | |-- edify (升級腳本使用的edify腳本語言)  
  60. | |-- etc (init.rc恢復腳本)  
  61. | |-- minui (一個簡單的UI)  
  62. | |-- minzip (一個簡單的壓縮工具)  
  63. | |-- mtdutils (mtd工具)  
  64. | |-- res (資源)  
  65. | |-- tools (工具)  
  66. | | `-- ota (OTA Over The Air Updates升級工具)  
  67. | `-- updater (升級器)  
  68.   
  69. build目錄  
  70. |-- core (核心編譯規則)  
  71. |-- libs   
  72. | `-- host (主機端庫,有android 「cp」功能替換)  
  73. |-- target (目標機編譯對象)  
  74. | |-- board (開發平臺)  
  75. | |-- product (開發平臺對應的編譯規則)  
  76. `-- tools (編譯中主機使用的工具及腳本)  
  77.   
  78.   
  79. dalvik目錄 dalvik虛擬機  
  80. |-- dexdump (dex反彙編)  
  81. |-- dexgen  
  82. |-- dexlist (List all methods in all concrete classes in a DEX file.)  
  83. |-- docs (文檔)  
  84. |-- dx (dx工具,將多個java轉換爲dex)  
  85. |-- hit (?java語言寫成)  
  86. |-- opcode-gen  
  87. |-- tools (工具)  
  88. `-- vm (虛擬機實現)  
  89.   
  90. development 目錄 (開發者須要的一些例程及工具)  
  91. |-- apps (一些核心應用程序)  
  92. | |-- BluetoothDebug (藍牙調試程序)  
  93. | |-- CustomLocale (自定義區域設置)  
  94. | |-- Development (開發)  
  95. | |-- Fallback (和語言相關的一個程序)  
  96. | |-- FontLab (字庫)  
  97. | |-- GestureBuilder (手勢動做)  
  98. | |-- NinePatchLab (?)  
  99. | |-- OBJViewer (OBJ查看器)  
  100. | |-- SdkSetup (SDK安裝器)  
  101. | |-- SpareParts (高級設置)  
  102. | |-- Term (遠程登陸)  
  103. | `-- launchperf (?)  
  104. |-- build (編譯腳本模板)  
  105. |-- cmds (有個monkey工具)  
  106. |-- docs (文檔)  
  107. |-- host (主機端USB驅動等)  
  108. |-- ide (集成開發環境)  
  109. |-- libraries  
  110. |-- ndk (本地開發套件——c語言開發套件)  
  111. |-- samples (例程)  
  112. | |-- AliasActivity (?)  
  113. | |-- ApiDemos (API演示程序)  
  114. | |-- BluetoothChat (藍牙聊天)  
  115. | |-- BrowserPlugin (瀏覽器插件)  
  116. | |-- BusinessCard (商業卡)  
  117. | |-- Compass (指南針)  
  118. | |-- ContactManager (聯繫人管理器)  
  119. | |-- CubeLiveWallpaper (動態壁紙的一個簡單例程)  
  120. | |-- FixedGridLayout (像是佈局)  
  121. | |-- GlobalTime (全球時間)  
  122. | |-- HelloActivity (Hello)  
  123. | |-- Home (Home)  
  124. | |-- JetBoy (jetBoy遊戲)  
  125. | |-- LunarLander (貌似又是一個遊戲)  
  126. | |-- MailSync (郵件同步)  
  127. | |-- MultiResolution (多分辨率)  
  128. | |-- MySampleRss (RSS)  
  129. | |-- NotePad (記事本)  
  130. | |-- RSSReader (RSS閱讀器)  
  131. | |-- SearchableDictionary (目錄搜索)  
  132. | |-- SimpleJNI (JNI例程)  
  133. | |-- SkeletonApp (空殼APP)  
  134. | |-- Snake (snake程序)  
  135. | |-- SoftKeyboard (軟鍵盤)  
  136. | |-- Wiktionary (?維基)  
  137. | `-- WiktionarySimple(?維基例程)  
  138. |-- scripts (腳本)  
  139. |-- sdk (sdk配置)  
  140. |-- sdk_overlay  
  141. |-- sys-img  
  142. |-- testrunner (?測試用)  
  143. |-- tools (一些工具)  
  144. `-- tutorials  
  145.   
  146. external 目錄  
  147. |-- apache-http (網頁服務器)  
  148. |-- bison (自動生成語法分析器,將無關文法轉換成C、C++)  
  149. |-- blktrace (blktrace is a block layer IO tracing mechanism)  
  150. |-- bluetooth (藍牙相關、協議棧)  
  151. |-- bsdiff (diff工具)  
  152. |-- bzip2 (壓縮工具)  
  153. |-- dhcpcd (DHCP服務)  
  154. |-- e2fsprogs (EXT2文件系統工具)  
  155. |-- elfcopy (複製ELF的工具)  
  156. |-- elfutils (ELF工具)  
  157. |-- embunit (Embedded Unit Project)  
  158. |-- emma (java代碼覆蓋率統計工具)  
  159. |-- esd (Enlightened Sound Daemon,將多種音頻流混合在一個設備上播放)  
  160. |-- expat (Expat is a stream-oriented XML parser.)  
  161. |-- fdlibm (FDLIBM (Freely Distributable LIBM))  



 

 

參考資料:

  android系統架構: http://blog.csdn.net/wangloveall/article/details/8033725

  android源碼結構: http://www.cnblogs.com/shaweng/p/4043573.html

相關文章
相關標籤/搜索