一、Android移植分爲兩部分:應用移植和系統移植;架構
二、應用移植:指將第四層的應用程序一直到某一特定硬件平臺上。操作系統
(1)爲保證應用程序能在新的平臺上正常運行,須要對源代碼就行一些修改,由於硬件平臺之間以及Android SDk API以前均可能存在差別。若是沒法獲取應用程序的源代碼,只能從新在新的硬件平臺上實現;開放源代碼
(2)Android應用移植不涉及驅動和HAL程序庫(注:HAL程序庫是Android新增長的硬件抽象層);設計
三、系統移植:指讓Android操做系統在某一特定硬件平臺上運行。io
(1)使操做系統在特定硬件平臺上運行的條件:編譯
①操做系統支持硬件平臺上的CPU架構。Linux內核自己支持不少經常使用的CPU架構,如ARM,X86,PowerPC,所以不須要作過多的改動,但不表明不作改動;基礎
②識別硬件平臺上的各類硬件。這些工做主要也是由Linux內核完成的,主角是Linux驅動。硬件
(2)HAL(Hardware Abstraction Layer,硬件抽象層)程序
①位於第二層,也是普通的Linux程序庫(.so文件),Android SDK經過HAL之間訪問Linux驅動(通常的Linux系統都是由應用程序直接訪問驅動)。技術
②Google公司這樣設計的目的:Linux內核基於GPL開源協議,可是許多驅動廠商不想開放源代碼,因此增長了HAL層,能夠將Linux驅動的業務邏輯放在HAL層,這樣處理Linux驅動開源技術只是一個空架子。
四、總結:
(1)Android移植的主要工做:移植Linux驅動和移植HAL;
(2)Android移植的基本原則是儘量找到驅動和HAL的源代碼,在源代碼的基礎上改比從頭開始編寫容易得多,實在沒法獲取源代碼,就只能從頭開始作起了;
(3)Android移植很大程度上是Linux內核移植,Linux內核移植主要是移植驅動程序。不一樣Linux版本的驅動程序不能通用,須要修改源代碼,並在新的Linux內核下從新編譯才能夠運行在新的Linux內核版本下。