8/12/2009

Google Android

今天為什麼要提到android呢?原因在於hychen可能會把android BT丟給我處理,所以趁還未開始動之前,只好先加班看文件稍微瞭解一下android的面目了...(不知道會不會又把WIFI丟給我...真是畜生!!)

Linux Kernel提供了一個與硬體溝通的平台,但是在Linux Kernel上面執行的程式就不一定跟它有關係了,加上一些自由軟體...像是基本函式庫、工具、圖形界面、應用程式等等,把這些拉歷拉雜的東西整合起來,就統稱為「Linux」。

但為何又有人叫「Linux」為「GNU/Linux」?原因在於kernel跟硬體溝通所用到的系統元件幾乎來自於GUN,也就是自由軟體基本會。

所以這邊要注意的是,Android雖號稱是用Linux kernel運作的,但它跟「GNU/Linux」是不一樣的,因為許多「GUN/Linux」有的東西,在android是看不到的(看的到就不會有那麼多大廠為它背書了...)

而常看到的GPL,它的全名是GNU General Public Licens,它主要目的就是為了確保智慧財產權能夠公開流傳,而基於此創作的延伸,也都必須要採用這個版權宣告。

而重點來了,Android採用Linux kernel,想當然爾也要照規矩來,但是!Android是商業應用,如果這麼做還商業個屁呀!

所以,某人非常的聰明,他在Linux kernel後面開了一個「後門」!

什麼意思呢?kernel要跟硬體溝通,要如何溝通呢?當然就是靠廠商提供的驅動程式啦,所以驅動程式是位於「kernel space」,一般的理解是這樣沒錯。

可是Android卻把驅動程式移到「user space」!完完全全避開了GPL版權的問題!

接著就利用Kernel的「後門」,讓本來不能控制硬體的「user space」也可以去控制了,所以某人就勉為其難依照GPL的規則也公佈了這段「後門程式」

android的application layer是用Java寫的,根本原本的Java寫法並沒什麼不同,因為我不瞭解Java...所以我只好再去偷別人的文章來瞭解一下了...

Java分為三部份:

第一個是「Java語言」,這我就不提了。

第二個是「Java虛擬機器」又稱JVM(Java virtual machine),這是幹什麼的勒?主要是針對 不同的平台架構然後透過JVM的指令能轉換成其它指令,因為不同的CPU其指令一定不同。所以這樣我們只要把程式編譯成JVM看的懂就可以囉!

第三個是「Java函式庫」,Java的library裡頭提供的工具,是有一定的標準,所以不管是在Windows還是Linux,寫法是完全一樣的。

用Java語言寫,呼叫Java函式庫,用編譯器編成指令集,再交給JVM就大功告成了!

所以編譯好的程式,只要使用者有裝JVM跟Java library就可以在各個不同的平台上RUN了!從這裡看的出來,為什麼Java那麼適合商業應用,因為它完全不用公開程式碼!

而Android也有虛擬機,只是它跟JVM不一樣,它叫作Dalvik,而它認識的指令集則是dex。

其中dalvik提供了一個工具叫dx,它是可以把JVM的指令翻成dex,這樣dalvik就知道要如何執行了。

而dalvik是需要linux kernel幫它處理一些事,所以它是綁在Linux上的。


好,我上述所講的大部份都參照下面,我只是為了加深印像及挑部份重點:

android(1)

andorid(2)

2 comments: