Android 開發 及 編譯系統

1、Android 的開發分爲三個類型

移植開發移動設備系統;android 系統級開發;應用程序  java

能夠把android 分爲四個層次,從底層往上依次爲:linux 內核、C/C++ 
庫、java 框架和java 應用程序 
linux

一、 移植開發移動設備:涉及到linux 內核(包括其驅動) 
二、 Android 系統級開發涉及到C/C++庫的開發及給上層java 框架;指的是擴展android 的框架或者是修改bug,這方面比較少,除非有些開發移動設備的廠商,好比作gps,能夠往裏面加入一些本身的特定系統東西,這可能致使一些不兼容。固然也多是簡單的修復bug。 
三、 A ndroid 應用程序開發就是調用java 的框架寫應用程序,這應該是比較主流的開發,也就是給android 系統寫應用程序。

簡單的從上到下,android 應用程序須要有java 框架支持,好比它要發送短信,就須要java框架,java 框架其實就是將C/C++庫包裝成爲了一個JNI,而實現具體的功能是C/C++庫最後驅動硬件完成功能,這也就是linux 內核部分。 android

2、開發工做入門 
根據上面所述,android 開發就分爲基於sdk 開發和源代碼開發。 
一、SDK 開發,主要是應用程序開發。 
二、源代碼的開發,涉及到的知識有linux 操做系統基礎知識、android 底層庫等知識。 程序員

3、android 系統級開發概述 
所謂framework,也就是系統級開發,雖然android 的framework 開發比較少,可是對其瞭解後更有利於總體開發的進行,固然不少設備廠商仍是很是須要這些的。  web

一、android 系統架構 
Linux 內核及驅動、C/C++框架、java 框架、java 應用程序。 
1)Linux 內核及驅動 
其中linux 內核及驅動是內核層的,系統老是須要操做系統的支持的,好比內存管理、進程管理、網絡協議棧等。 
2)android 的C/C++框架 
系統C 庫:用的是libc,沒什麼好說的,C 程序員都知道。 
多媒體庫: 
SurFace Manager:顯示子系統的管理器 
LibWebCore:web 瀏覽器引擎,支持android 瀏覽器 
SGL:skia 圖形庫,底層的2D 圖形引擎 
3D 庫:OpenGL 
FreeType:字體顯示 
Android 的運行環境,這個也應該屬於這個框架裏面的,android 的虛擬機叫作 
Dalvik,運行環境就是由這個虛擬機和基礎的java 類庫組成。 
3)android 應用框架 
提供一系列的服務和系統,包括視圖、內容提供器、資源管理器、通知管理器、活 
動管理器。 
視圖很是豐富:list、grid、text box、button 等。 
內容提供器是使得應用程序能夠訪問另外一個程序的數據。 
資源管理器是提供訪問非代碼的資源訪問,如佈局文件。 
通知管理器,使得程序能夠在狀態欄中顯示自定義的提示信息。 
活動管理器,用來管理程序生命週期。 
4)android 應用程序 
Android 全部的應用程序都是用java 寫的,固然如今好像也支持一些腳本語言,如 
ruby,可是不支持C 開發,所謂支持C 開發是指jni 的形式。 瀏覽器

2、Android Build 系統

Android Build 系統用來編譯 Android 系統,Android SDK 以及相關文檔。該系統主要由 Make 文件,Shell 腳本以及 Python 腳本組成。Build 系統中最主要的處理邏輯都在 Make 文件中,而其餘的腳本文件只是起到一些輔助做用。 ruby

整個 Build 系統中的 Make 文件能夠分爲三類: 第一類是 Build 系統核心文件,此類文件定義了整個 Build 系統的框架,而其餘全部 Make 文件都是在這個框架的基礎上編寫出來的。Build 系統核心文件所有位於 /build/core目錄下。 第二類是針對某個產品(一個產品多是某個型號的手機或者平板電腦)的 Make 文件,這些文件一般位於 device 目錄下,該目錄下又以公司名以及產品名分爲兩級目錄。對於一個產品的定義一般須要一組文件,這些文件共同構成了對於這個產品的定義。 第三類是針對某個模塊的 Make 文件。整個系統中,包含了大量的模塊,每一個模塊都有一個專門的 Make 文件,這類文件的名稱統一爲「Android.mk」,該文件中定義瞭如何編譯當前模塊。Build 系統會在整個源碼樹中掃描名稱爲「Android.mk」的文件並根據其中的內容執行模塊的編譯。 android編譯步驟以下: 1. source build/envsetup.sh: 將envsetup.sh裏的全部用到的命令加載到環境變量 2. lunch:選擇平臺編譯選項 3. make:執行編譯。make 的參數「-j」指定了同時編譯的 Job 數量,該值一般是編譯主機 CPU 支持的併發線程總數的 1 倍或 2 倍,如:make –j8 整個 Build 系統的入口文件是源碼樹根目錄下名稱爲「Makefile」的文件,當在源代碼根目錄上調用 make 命令時,make 命令首先將讀取該文件。Makefile 文件的內容只有一行:「include build/core/main.mk」。該行代碼的做用很明顯:包含 build/core/main.mk 文件。在 main.mk 文件中又會包含其餘的文件,其餘文件中又會包含更多的文件,這樣就引入了整個 Build 系統。 Build 結果的目錄結構 全部的編譯產物都將位於 /out 目錄下,該目錄下主要有如下幾個子目錄: /out/host/:該目錄下包含了針對主機的 Android 開發工具的產物。即 SDK 中的各類工具,例如:emulator,adb,aapt 等。 /out/target/common/:該目錄下包含了針對設備的共通的編譯產物,主要是 Java 應用代碼和 Java 庫。 /out/target/product/<product_name>/:包含了針對特定設備的編譯結果以及平臺相關的 C/C++ 庫和二進制文件。其中,<product_name>是具體目標設備的名稱。 /out/dist/:包含了爲多種分發而準備的包,經過「make disttarget」將文件拷貝到該目錄,默認的編譯目標不會產生該目錄。 Build 生成的鏡像文件 Build 的產物中最重要的是三個鏡像文件,它們都位於 /out/target/product/<product_name>/ 目錄下。這三個文件是: system.img:包含了 Android OS 的系統文件,庫,可執行文件以及預置的應用程序,將被掛載爲根分區。 ramdisk.img:在啓動時將被 Linux 內核掛載爲只讀分區,它包含了 /init 文件和一些配置文件。它用來掛載其餘系統鏡像並啓動 init 進程。 userdata.img:將被掛載爲 /data,包含了應用程序相關的數據以及和用戶相關的數據。
相關文章
相關標籤/搜索