2008年8月15日 星期五

Android Architecture


舊版(M5-rc14)架構
What is Android?
Android的來源:
Google 併購 Android 公司後所推出的手機平台,採用 Linux 為作業系統。所以系統程式包含了 C 語言的標準函式庫,但應用程式主要以Java語言在Dalvik VM虛擬機器執行,應用程式開發環境以Eclipse為主,加上 Android Development Tools (ADT) Plugin。

Android的目的:
Android平台的主旨是提供一個應用程式架構(application framework),好讓各家OEM業者可不須從頭進行軟體開發,就能推出一系列的Android平台手機。

Android本身是一套軟體堆疊(Software Stack),或稱為「軟體疊層架構」,疊層主要分成三層:作業系統、中介軟體(Middleware,大陸方面稱為:中間件)、應用程式。想開發可在Android平台執行的應用程式,必須用Java程式語言撰寫才行。
中介軟體,凡是介於作業系統與應用程式間的,多概稱為中介軟體,Android的中介軟體可再細分出兩層,底層為函式庫(Library)及虛擬機器(Virtual Machine;VM),上層為應用程式框架(Application Framework)。

Android Presentation

Android 雖然用Java程式語言來開發、撰寫應用程式,但卻不使用一般大家目前在用的Java Runtime(J2ME)版本來執行Java程式,而是用Android自有的Android Runtime來執行。
    Android Runtime包含下面兩個核心。
  1. Core Libraries

  2. 核心函式庫裡頭已經包含了絕大多數Java程式語言所需要呼用的功效函式,接著每一個Android應用程式都會以自屬的process而且Android不是用一個Dalvik虛擬機器來同時執行多個Android應用程式,而是每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行。
  3. Dalvik Virtual Machine

    • Dalvik虛擬機器是一種暫存器型態的虛擬機器。在撰寫開發時就已經設想用最少的記憶體資源來執行,以及前述的「同時可執行多個VM個體」。

    • Dalvik虛擬機器有許多地方是參考Java虛擬機器設計,Dalvik虛擬機器所執行的中介碼並非是Java虛擬機器所執行的Java Bytecode,同時也不直接執行Java的類別檔(Java Class File),而是依靠轉換工具將Java bytecode轉為Dalvik VM執行時特有的dex(Dalvik EXcutable)格式,稱為.dex。Dalvik VM相較於Java VM最大的不同在於Java VM為Stack-based,而Dalvik是register-based。 以技術層面考量Register-based VM的特性有個很大的好處,那就是對於現有主流的硬體架構,如此很容易與現有系統整合且最好化,而所需要的資源也相對較少。 甚至在硬體實作VM上會比較容易實現。 最重要的是Dalvik 並非是Java ME的實作,因此沒有Java ME授權相關的議題。

Android在應用程式框架中的軟體元件主要有10個,如Activity Manager(活動管理員)、Window Manager(視窗管理員)、Resource Manager(資源管理員)等,在此無法詳述每個元件的功效,因此以下挑數個重點元件來說明。

舉例來說,Content Providers(內容管理員)負責應用程式與應用程式間的資料存取傳遞,例如某一個應用程式可以去存取通訊錄應用程式內的聯絡人資料。或者呼用Resource Manager可存取的非程式碼資源,例如:當地性設定(該地貨幣、語言、時間格式)、圖像...等。

再者,應用程式若呼用Notification Manager(通知管理員),則可以在狀態列(Status Bar)的地方設計出應用程式自有的警示(Alert)訊息。至於Activity Manager則提供應用程式的生命週期管理。

更多詳細內容請看:Google Android裡頭有什麼?

Androidology - Part 1 of 3 - Architecture Overview
Androidology - Part 2 of 3 - Application Lifecycle

Androidology - Part 3 of 3 - APIs

A first hand look at building an Android application

Android Demo

    Android Linux Kernel:
     based on version 2.6.23 kernel
     ARCH_GOLDFISH configuration for ARM architecture
     Using EABI (Embedded ABI) Feature
     YAFFS2 File System
     OpenBinder IPC
    Kernel Patches
     ARM Architecture : ARMv5TE or later
    • For EABI Support
    • ex) ARM926EJ-S, XScale(PXA900), ARM1176JZ(F)-S
     YAFFS2 File System :
    • For NAND memory support
     OpenBinder
    • For IPCs among the equal applications on mobile devices
    • ex) Intent Broadcasting

參考資料:
Android 手機開發平台
研發觀點 開放手機革命:市場觀察與Android SDK
大廠在前 Android何時出頭?
真實平台移植過程
源始程式下載
Android on OMAP Kernel Patch
HTC TyTN II Vogue Linux
Android OS 現身 HTC TyTN II
Android - An Open Handset Alliance Project Documentation
Google Android裡頭有什麼?

這個網頁給大家參考一下吧!Google手機程式設計寫得蠻不錯的唷!
http://ccc.kmit.edu.tw/mybook/GooglePhoneProgramming/GooglePhoneProgramming.htm
[2008] 陳鍾誠, Google手機程式設計 (未出版草稿) -- 下載
http://ccc.kmit.edu.tw/mybook/GooglePhoneProgramming/GooglePhoneProgramming.doc

1 則留言:

ozzy 提到...

Android平台的主旨是提供一個應用程式架構(application framework),好讓各家OEM業者可不須從頭進行軟體開發

>> 這就是google的目的,之前feature phones 是晶片廠商各自競爭, 不同的UI,app+chipsets , 現在只有一家
且開放 所以更是一種開放之後台廠的被奴化

一個小故事讓我們明白資金流通的意義

“又是炎熱小鎮慵懶的一天。太陽高掛,街道無人,每個人都債台高築,靠信用度日。這時,從外地來了一位有錢的旅客,他進了一家旅館,拿出一張1000 元鈔票放在櫃檯,說想先看看房間,挑一間合適的過夜,就在此人上樓的時候---- 店主抓了這張1000 元鈔,跑到隔壁屠戶那裡支付了他欠的肉錢...