引用:https://mp.weixin.qq.com/s?__biz=MzA4MjA0MTc4NQ==&mid=504090090&idx=1&sn=eba182e0b1d4fe373c1d81041d67461d#rd
讀在最前面,工欲善其事,必先利其器。但是在你利其器之前,你需要的知道,“器”的內部結構,了解以后你開發學習利“器”的原理。
Android負責人Dan Morrill說:“ Android并不是傳統的Linux風格的一個規范或分發版本,也不是一些列可重用的組件集成,Android是一個用于連接設備的軟件塊。”
整理筆記的時候 發現以前劃分的Android系統底層架構有點小變動,相比較之前的劃分來說,更加的細致。層次結構更合理。
Android 是一種基于 Linux 的開放源代碼軟件棧,為廣泛的設備和機型而創建。
ps:附贈一個中文版的
(這里是參照安卓開發文檔寫的,另外補充一點以前的筆記,相當于一個筆記總結)
相比較舊的,新的劃分添加了一層 HAL層(硬件抽象層 (HAL)):
硬件抽象層 (HAL):
提供標準界面,向更高級別的 Java API 框架顯示設備硬件功能。HAL 包含多個庫模塊,其中每個模塊都為特定類型的硬件組件實現一個界面,例如相機或藍牙模塊。當框架 API 要求訪問設備硬件時,Android 系統將為該硬件組件加載庫模塊。
Linux內核 設備驅動程序層(Linux Kernel):
Android 平臺的基礎是 Linux 內核。例如,Android Runtime (ART) 依靠 Linux 內核來執行底層功能,例如線程和低層內存管理。使用 Linux 內核可讓 Android 利用主要安全功能,并且允許設備制造商為著名的內核開發硬件驅動程序。
該層主要包括:驅動、內存管理、進程管理、網絡協議等組件。
原生 C/C++ 庫:
許多核心 Android 系統組件和服務(例如 ART 和 HAL)構建自原生代碼,需要以 C 和 C++ 編寫的原生庫。Android 平臺提供 Java 框架 API 以向應用顯示其中部分原生庫的功能。例如,您可以通過 Android 框架的 Java OpenGL API 訪問 OpenGL ES,以支持在應用中繪制和操作 2D 和 3D 圖形。
如果開發的是需要 C 或 C++ 代碼的應用,可以使用 Android NDK 直接從原生代碼訪問某些原生平臺庫。
1. Java不能直接訪問硬件,要訪問硬件,必須使用NDK。NDK是由c/c++語言編寫的庫(.so文件),該層是對應用程序框架層提供支持的層。
2. SSL:Secure Sockets Layer安全套接字層
3. libc:C運行時庫
4. WebKit:負責瀏覽器支持(Chrome和Safari都使用該庫來支持瀏覽器)
5. FreeType:負責字體支持
Android Runtime:
對于運行 Android 5.0(API 級別 21)或更高版本的設備,每個應用都在其自己的進程中運行,并且有其自己的 Android Runtime (ART) 實例。ART 編寫為通過執行 DEX 文件在低內存設備上運行多個虛擬機,DEX 文件是一種專為 Android 設計的字節碼格式,經過優化,使用的內存很少。編譯工具鏈(例如 Jack)將 Java 源代碼編譯為 DEX 字節碼,使其可在 Android 平臺上運行。
ART 的部分主要功能包括:
預先 (AOT) 和即時 (JIT) 編譯
優化的垃圾回收 (GC)
更好的調試支持,包括專用采樣分析器、詳細的診斷異常和崩潰報告,并且能夠設置監視點以監控特定字段
在 Android 版本 5.0(API 級別 21)之前,Dalvik 是 Android Runtime。如果您的應用在 ART 上運行效果很好,那么它應該也可在 Dalvik 上運行,但反過來不一定。
Android 還包含一套核心運行時庫,可提供 Java API 框架使用的 Java 編程語言大部分功能,包括一些 Java 8 語言功能
應用程序框架層(Application FrameWork):
該層一般都是開發人員直接調用的API。該層主要由Java語言編寫。
應用程序層(Applications):
由運行在Dalvik虛擬機上的app組成。(Dalvik是Google公司為Android專門設計的Java虛擬機,運行Java程序的速度比JVM更快,以此來克服手持設備在內存、處理器速度和功率等方面上的限制)。該層由Java語言編寫。
a. Dalvik是冰島一個小鎮的名字。Dalvik VM獲取生成的java類文件,將它們組合為一個或者多個、Dalvik可執行文件(.dex)。Dalvik VM的目標是找到所有可能的方式來優化JVM性能、內存及電池壽命。
b. 采用Dalvik VM的一個結果是,Android中最終的可執行程序代碼不是java字節碼,而是.dex文件。這意味著無法直接執行java字節碼,必須得到java的類文件,然后將它們轉換為.dex文件。
———————————————————————————————————————
Java API 框架:
您可通過以 Java 語言編寫的 API 使用 Android OS 的整個功能集。這些 API 形成創建 Android 應用所需的構建塊,它們可簡化核心模塊化系統組件和服務的重復使用,包括以下組件和服務:
豐富、可擴展的視圖系統,可用以構建應用的 UI,包括列表、網格、文本框、按鈕甚至可嵌入的網絡瀏覽器
資源管理器,用于訪問非代碼資源,例如本地化的字符串、圖形和布局文件
通知管理器,可讓所有應用在狀態欄中顯示自定義提醒
Activity 管理器,用于管理應用的生命周期,提供常見的導航返回棧
內容提供程序,可讓應用訪問其他應用(例如“聯系人”應用)中的數據或者共享其自己的數據
開發者可以完全訪問 Android 系統應用使用的框架 API.。
學習安卓的路線圖
- 學習Android要具備的基礎知識
- JavaSE基本知識:集合、IO操作、線程
- WEB開發知識:HTML、jsp、servelet
- 服務器開發知識:jdbc數據庫操作(Mysql)
談點個人的小想法,很多人在之前學習安卓的時候覺得很多需要學習的東西,但是在實際開發過程中,你需要的不是所有的技能,只是部分,現在的學習過程只是一個基礎的過程。希望能好好理解。