2010年9月7日

[Android 教學] Android 的系統架構

Android 系統架構


新版 Android SDK 下載安裝中文教學課程講義,歡迎延伸點閱!


我們的《Android 手機應用程式開發教學課程免費講義》網路讀者俱樂部會員(請點選此連結),歡迎您的加入,謝謝!


本講義目前網路連載發表有:Android手機程式開發教學講義懶人包Android 教學講義第一講Android 教學講義第二講Android 教學講義第三講Android 教學講義第四講Android 教學講義第五講Android 教學講義第六講Android 教學講義第七講上篇Android 教學講義第七講下篇Android 2.3補充教材1Android 2.3補充教材2Android 3.0平板電腦完整功能搶先看(From T-Mobile)Android 3.0 平板電腦應用程式開發:第一講Android 3.0 SDK 正式版登場Android 嵌入式系統最新開發應用 - SAAB IQon 車用電腦Android 2.3 補充教材3Android 3.0 平板電腦應用程式開發:第二講Android 教學講義第八講上篇Android 教學講義第八講中篇(1)Android 4.0 SDK 開發功能介紹與下載網址Android 4.0 SDK 下載安裝完整教學Android 4.0 模擬器安裝設定教學課程講義Android 4.0 的 Holo theme 佈景主題介紹與設定教學課程講義Android 4.2 升級功能簡介Android 4.2 SDK & ADT Bundle 下載安裝教學2013年第1講: Android Application Project 之建立2013年最新 Android Studio 開發工具下載安裝教學最新 Android App 網路連線程式設計範例 (第一講) - Volley HTTP Library 入門教學Android App 與 Android Application Project 是什麼?Android 4.4 KitKat 與 Android 4.4 SDK 開發功能介紹Android SDK 下載安裝中文教學課程講義 ( 2013年11月新版,ADT Bundle )


以下為本篇 Android 教學講義的開始。


此篇為 Android 手機程式開發教學課程免費講義的第二講。這篇課程講義主要希望讓 Android 手機程式開發新手能夠暸解 Android 在手機應用程式開發上的一些系統概念與特色。

【孫傳雄研究室 編著】先前,Android Developers官方網頁早已用英文詳列了九項的系統特色。不過,本講義為了讓比較不熟悉 Android 的朋友可以更簡明地暸解這些 Android 的系統概念與特色,因此我們試圖重新用較淺顯易懂的文字描述,將Android的九項系統特色轉換成以下九項問題,做一詳盡之說明。
  • 什麼是 Android 的應用程式框架 (Application framework)?
  • 什麼是 Dalvik 虛擬機器 (Dalvik virtual machine)?
  • 什麼是 Webkit 網頁引擎 (Web browser engine) ?
  • 什麼是 OpenGL ES?
  • 什麼是 SQLite 資料庫?
  • Android 支援那些媒體格式檔案?
  • 什麼是 GSM 手機電話功能 (GSM Telephony)?
  • Android 支援那些感應器(Sensor)?
  • 什麼是 Android SDK?
此外,本講義為求讀者學習的完整性。倘若您尚未閱讀過Android 手機程式開發教學課程免費講義的第一講,煩請您先連結閱讀第一講後,再來閱讀第二講。


什麼是 Android 應用程式框架 (Application framework)?



Android 為了節省開發者撰寫應用程式的時間、加速應用程式開發的速度。所以在應用程式與內部系統環境之間設置了一個讓程式更簡易溝通的界面,它稱之為應用程式框架(Application framework)。

對於應用程式的開發者來說,他得以透過Java程式呼叫應用程式框架所提供的應用程式界面(Application Programming Interface, API),來實作更底層的函式庫(Libraries)功能。

在這個應用程式框架之中,包含了活動管理者(Activity Manager)、視窗管理者(Window Manager)、內容提供者(Content Providers)、外觀元件系統(View System)、程式管理者(Package Manager)、電話功能管理者(Telephony Manager)、資源管理者(Resource Manager)、地理位置管理者(Location Manager)以及訊息管理者(Notification Manager)等服務或者系統。

總體來說,開發者通常只需要理解應用程式與應用程式框架之間的運作關係、以及如何透過Java程式語言實作的方法即可,並不太需要探究更內部的系統環境。

然而,假若是要移植Android至嵌入式系統(例如洗衣機的控制界面)的產品開發者,仍有必要理解Android系統內部的函式庫、Android執行環境與Linux核心的細節。

image

Android的系統架構圖
(本講義修改重繪自
Android Developers官網)


什麼是 Dalvik 虛擬機器 (Dalvik virtual machine)?



早期應用程式的原始程式碼,多半被組譯器或編譯器轉換成執行檔之後,便可以立即在作業系統當中執行。

不過,這種方式常常會受限於作業系統環境的不同,而無法相容執行。

比如副檔名為.exe或.com的應用程式執行檔就只能在Microsoft Windows或者DOS作業系統當中執行。倘若,它要在Mac OS當中執行者,還需要將程式碼重新改寫並變成Mac OS可執行的檔案夾格式 .app,才得以在Mac OS作業系統當中執行。

隨後,Java的誕生為此帶來了觀念上的革新。當應用程式開發者在編寫Java原始程式碼後,會先透過Java程式語言的編譯器(Compiler)編譯成二進位碼形式(bytecode)的.class類別檔。這個類別檔並非是在作業系統當中”直接”執行,而是會在具有Java虛擬機器(Java virtual machine, JVM)的作業系統環境當中被”轉換””執行。

所以,無論是那種款式的作業系統,只要安裝含有Java虛擬機器(Java virtual machine, JVM)的Java平台(Java Platform),就可以執行以Java程式語言所開發的應用程式。

因為,Android也是採行Java程式語言進行應用程式的開發,所以,它在觀念與架構上皆與Java平台相去不遠。

然而,Android並非使用Java虛擬機器(Java virtual machine, JVM),而是自行發展的Dalvik虛擬機器(Dalvik virtual machine, Dalvik VM),所以它的檔案產生過程仍與Java應用程式檔案有所不同。為讓大家更暸解這方面的內容,本講義做以下之說明:

Andorid應用程式開發者在運用Java程式語言編寫完原始程式碼後,其儲存的檔案副檔名為 .java,.java檔案接著會被Java程式語言編譯器(Compiler)編譯成副檔名為 .class的檔案(其為二進位碼形式(bytecode))。

如果是一般的Java應用程式,大概到這一步就可以直接透過Java虛擬機器(Java virtual machine, JVM)在作業系統之中執行。只不過,因為在Android系統之中並不是使用JVM,而是Dalvik虛擬機器(Dalvik virtual machine, Dalvik VM)。所以,副檔名.class的檔案還要再被Android SDK(軟體開發工具包)當中的dx工具再轉換成為Dalvik VM可以執行的檔案(副檔名為 .dex, Dalvik Executable,同為二進位碼形式)。

最後,Android SDK會將所有檔案壓縮包裏成單一的Android封裝檔(副檔名為 .apk,Android application package),以供手機用戶直接下載執行。關於更詳盡Android應用程式檔案產生過說明,您可以延伸閱讀Understanding the Android Build Process一文。 

image 
Android應用程式檔案的產生過程簡圖 

另一方面,當Android手機的使用者下載一個應用程式時,安裝下載的是.apk封裝檔。該應用程式被執行時,Android系統最底層的Linux 核心則會為每一個應用程式產生一個Linux處理程序(Linux Process),並在單一的Dalvik VM當中執行。

特別的是,在Andorid當中的每一個應用程式都會對應”一個”專屬它的Dalvik VM。如此的設計,可以確保每一個應用程式之間都是相互獨立而彼此不影響。若對Dalvik VM的內部運作有興趣者,您可以延伸觀賞Android: Dalvik VM Internals影片。
 


什麼是 Webkit 網頁引擎 (Web browser engine)?



在Andorid當中,如同於個人電腦般也內建網頁瀏覽器(Web Browser)。此瀏覽器的名稱叫做Google Chrome Lite。它與iOS當中內建的Safari網頁瀏覽器一樣是採用Webkit網頁引擎(Web browser engine)。如果您有在個人電腦中使用過它的孿生兄弟Google 瀏覽器(Google Chrome)的話,就可體驗Webkit網頁引擎在載入網頁的良好效能。

看到這裡,您一定會有個疑問:『網頁瀏覽器跟網頁引擎究竟是什麼關係呢?』

簡單地說,如同汽車需要引擎來產生動力一般,網頁瀏覽器裡頭有一個肩負網頁載入、HTML相關程式碼解釋、畫面排版與呈現的重要軟體元件,那個軟體元件就是網頁引擎。

早期的瀏覽器並不太強調它是使用什麼樣的網頁引擎,不過,隨著使用者對於網頁載入效能與呈現美感要求日增,越來越多的瀏覽器業者便開始強調它們所使用的網頁引擎是那一款式。

其中,Webkit是目前最多知名智慧型手機作業系統採用的網頁引擎。這些作業系統包括了Symbian OS、iOS、Android與Palm webOS等…。

對於大多只有3吋左右螢幕的智慧型手機來說,Webkit網頁引擎有一個相當大的優勢,那就是它可以讓正常網頁(非手機版本)如同在個人電腦般,自動調整成頁寬(auto fit page)的方式完整縮小呈現在手機的小螢幕中,如此可以方便使用者立即在手機上看到正常網頁的全觀(如下圖所示),如果要近看某區塊之內容時,只要將該區塊放大即可。這是其它舊式網頁引擎不容易做到的事,但應用Webkit網頁引擎卻可輕易達成。

android模擬器_1

Webkit的網頁自動調整成全頁寬(auto fit page)功能

由於,Android API 已內含Webkit相關的函式庫。因此,開發者得以透過呼叫API的方式將Webkit相關功能整合至應用程式之中。你可能會問:『什麼狀況之下,應用程式需要用到Webkit的相關功能呢?』比如,應用程式需要內嵌顯示網頁內容或者需要執行Java Script客戶端網頁程式碼等狀況時,皆可運用Webkit函式庫來進行整合的動作。


什麼是 OpenGL ES?



Android的圖形處理分成兩個部份,一為2D圖形處理,這部份是採Android自行規範定義的2D圖形處理函式庫(2D graphics library)。二為3D圖形處理,此部份則採行OpenGL ES 3D圖形處理函式庫。

關於2D圖形處理方面,Android應用程式開發者得以透過呼叫API的方式進行2D圖形處理函式庫相關的圖形繪製以及動畫處理。

更簡單地說,比如你想在手機上開發一個類似大頭貼機器的應用程式,亦即當使用者透過手機上的相機拍下照片後,得以在照片上加上一些相框圖案。此時該應用程式就可以使用2D圖形繪製的功能。又比如這個大頭貼機器的應用程式想為照片加點淡出淡入的動畫效果時,則會使用到動畫處理的功能。

至於3D圖形處理方面,Android並非使用自行發展的函式庫,而是採用OpenGL ES 3D圖形處理函式庫。因為,這個函式庫在3D圖形處理上有相當優異的表現,因此,像是SONY PlayStation 3(PS3)電視遊戲主機也是採用OpenGL ES做為它們在3D遊戲的圖形處理函式庫。

另外,由於OpenGL ES是由OpenGL輕量化而來,所以,特別適合硬體規格不如個人電腦高的智慧型手機應用。目前,除了Android之外,還有Symbian OS、BlackBerry OS、Palm webOS、iOS亦採用OpenGL ES做為3D圖形處理的函式庫。

對於Android應用程式開發者來說,能夠運用OpenGL ES 3D圖形處理函式庫來處理相關3D立體圖形相關的應用程式或遊戲開發工作。若有興趣暸解OpenGL ES在Android上的3D表現實況,您可以進一步觀賞Android 3D Live Wallpaper: Particle Storm短片。 

android模擬器_5  

在Android手機上畫面逼真的3D 撞球遊戲
(畫面擷取自
Android Market)


什麼是 SQLite 資料庫?



開發者在開發應用程式的過程之中,難免會有資料儲存的需求,比如需要儲存應用程式的設定資料或者上一次遊戲關卡的資料等…。因此,Android內建了一個名為SQLite的關聯式資料庫引擎(Relational database engine)。

因為,應用程式當中使用了SQLite,所以,手機用戶得以將相關資料儲存在手機的儲存設備當中,而無需再以網路連線的方式存取遠端的資料庫。

如果你有過大型關聯式資料庫的開發經驗(如Microsoft SQL Server或者Oracel Database等…),應該可以很快地適應SQLite的程式編寫。因為它仍延襲SQL-92標準,亦即你可以使用SQL(Structured Query Language,結構化查詢語言)來存取SQLite資料庫當中的資料。

另外,過去大型關聯式資料庫多數採取主從架構(Client–server model)的模式,所以,應用程式與資料庫之間具有主從的結構關係。當應用程式用戶端需要存取資料庫時,必需連線至此資料庫的伺服器當中進行資料的新增、刪除或修改之動作。

然而不同的是,Android應用程式的開發者則採呼叫API的方式來與SQLite作溝通。同時,SQLite當中的資料庫是以單一檔案的方式儲存在手機硬體當中。

由於,SQLite具有檔案小、速度快的優點,所以目前也廣泛用於其它智慧型手機的作業系統,比如iOS、Symbian OS或者BlackBerry OS等…。
 

Android 支援那些媒體格式檔案?



Android支援相當多元的媒體檔案格式,本講義整理節錄自Android Developers官網詳細列表如下:

聲音檔:3GPP (.3gp) 、MPEG-4 (.mp4, .m4a)、MP3 (.mp3)、Type 0 and 1 (.mid, .xmf, .mxmf)、RTTTL/RTX (.rtttl, .rtx)、OTA (.ota)、iMelody (.imy)、Ogg (.ogg)、WAVE (.wav)。

圖像檔:JPEG (.jpg)、GIF (.gif)、PNG (.png)、BMP (.bmp)。

影音檔:3GPP (.3gp)、MPEG-4 (.mp4)。

對於應用程式開發者而言,他可以在應用程式之中整合聲音、圖像或影音的播放與錄製功能,提高應用程式的聲光效果,並且強化其在多媒體視聽娛樂之上的趣味性。

android模擬器_6

用Android手機也能播放與錄製Ustream串流影音
( (畫面擷取自
Android Market) 


什麼是 GSM 手機電話功能 (GSM Telephony)?



2G的行動通訊系統之中,多半區分為GSMCDMA

過去,美國的行動通訊系統大多是採CDMA規格,但像在歐洲或者台灣則以GSM規格為主。

因為,GSM在功能上有些異於CDMA之處(例如傳送手機簡訊的PDU格式),所以,Android為了能廣為各種行動通訊系統所使用,特別在系統上也同時支援GSM手機電話的特殊規格。(註:Android手機不只能支援目前常使用的3G行動通訊系統,也能被2G2.5G3.5G或者4G行動通訊系統所使用。這些規格取決於手機製造業者與電信門號業者)

就總體的手機電話功能(Telephony)來說,Android的應用程式開發者可以發揮創意與巧思,發展與通話、來電顯示、來電鈴聲、來電圖示以及手機簡訊等相關的應用程式。 

android模擬器_3 

Android手機電話功能畫面


Android 支援那些感應器(Sensor)?



Andorid應用程式開發者所能發揮的空間,除了取決於作業系統的版本之外,也指涉了手機硬體上的週邊設備。亦即,開發者能夠應用智慧型手機上的數位相機鏡頭(手機照相機)、衛星定位裝置、電子羅盤(方向感應器)與重力感應器等週邊設備,去創造更多深具創新價值的應用程式。

比如永慶房屋手機宅速配 For Android應用程式,它即應用了Android手機當中的衛星定位裝置與電子羅盤(方向感應器)進行房屋仲介方面的相關功能開發。

關於手機感應器的部份,除了重力感應器、電子羅盤(方向感應器)之外,Android還支援磁場感應器、溫度感應器、光線感應器、壓力感應器、陀螺儀與距離感應器等…。雖然,Andorid支援那麼多種感應器,但並非每台手機都具有這些設備。因此開發者在開發應用程式時,仍應考量感應器的普及程度。就目前來說,市面上的Andorid手機具備重力感應器、電子羅盤(方向感應器)為大宗。 

android模擬器_7 

把Android手機當水平尺來用
(重力感應器的應用,畫面擷取自
Android Market)  


什麼是 Android SDK?



Google為了讓更多開發者參與Android應用程式的開發行列,因此,它開放給大眾免費下載安裝Android 軟體開發工具包(software development kit, SDK)。而且,這個工具包可以安裝在Windows、Linux以及Mac等不同的作業系統環境當中。

Android SDK除了提供了完整的Android API之外,更包括了Android應用程式除錯工具(Android Debug Bridge, ADB)以及Android 手機模擬器(Android Emulator,此為在個人電腦上模擬Android手機的環境)。如此免費與開放是Android之所以在近來深受手機應用程式開發者喜愛的主因之一。

除了Android SDK之外,其它配合它的軟體也是免費性質。這些軟體包括了Eclipse整合開發環境(Integrated Development Environment, IDE)以及Eclipse專用之Android開發工具外掛(ADT Plugin for Eclipse)。再加上原本就免費開放下載的Java開發工具包(Java Development Kit, JDK)

開發者幾乎不用花費到一毛錢,便可以自己建構一個很完整且便利的Android應用程式開發環境,並專心構思與發展屬於自己的應用程式。不過,如果開發者要上傳應用程式到Android Market網站供大家免費下載或收費販售時,則需要再付25美元的帳號註冊費。

android模擬器_2 

Android應用程式的開發環境

至於,Google在近日所推出的 App Inventor 線上開發工具,則為Android應用程式開發者創造出了更方便、更直覺與無程式碼的圖形化開發環境。

我們在試用過App Inventor 後,發現它相當適合Android應用程式的雛型發想階段,開發者可以先運用它來構思一些應用程式的功能。但是,由於它在操作上力求簡單化,由此也可能產生缺乏開發彈性的問題,加上目前它並不支援中文字元,所以開發者若要發展Android應用程式,本講義仍建議大家以上述的開發環境為主,App Inventor 則可做為Android應用程式開發之前的雛型(prototyping)系統設計工具。

最後,Android官方建構了一個專門提供給Android應用程式開發者閱讀的網站-Android Developers,它提供了相當詳盡且時常更新的Android應用程式開發之英文資料。想要自修Android應用程式開發的朋友,本講義非常建議大家常去閱讀這個網站。

第二講完畢!歡迎繼續閱讀第三講”Android 手機程式開發教學課程《免費講義 3》 : Android的商業魅力”。

如果您對於Andorid手機應用程式開發有興趣,歡迎閱讀我們在網路上發表的Android手機應用程式開發教學系列講義。

本講義目前網路連載發表有:Android手機程式開發教學講義懶人包Android 教學講義第一講Android 教學講義第二講Android 教學講義第三講Android 教學講義第四講Android 教學講義第五講Android 教學講義第六講Android 教學講義第七講上篇Android 教學講義第七講下篇Android 2.3補充教材1Android 2.3補充教材2Android 3.0平板電腦完整功能搶先看(From T-Mobile)Android 3.0 平板電腦應用程式開發:第一講Android 3.0 SDK 正式版登場Android 嵌入式系統最新開發應用 - SAAB IQon 車用電腦Android 2.3 補充教材3Android 3.0 平板電腦應用程式開發:第二講Android 教學講義第八講上篇Android 教學講義第八講中篇(1)Android 4.0 SDK 開發功能介紹與下載網址Android 4.0 SDK 下載安裝完整教學Android 4.0 模擬器安裝設定教學課程講義Android 4.0 的 Holo theme 佈景主題介紹與設定教學課程講義Android 4.2 升級功能簡介Android 4.2 SDK & ADT Bundle 下載安裝教學2013年第1講: Android Application Project 之建立2013年最新 Android Studio 開發工具下載安裝教學最新 Android App 網路連線程式設計範例 (第一講) - Volley HTTP Library 入門教學Android App 與 Android Application Project 是什麼?Android 4.4 KitKat 與 Android 4.4 SDK 開發功能介紹Android SDK 下載安裝中文教學課程講義 ( 2013年11月新版,ADT Bundle )


喜歡閱讀我們的講義嗎?歡迎加入我們所成立的《Android 手機程式開發教學課程免費講義》網路讀者俱樂部會員(請點選此連結),謝謝!


著作權聲明



Android 手機程式開發教學課程《免費講義 2》 :Android的開發魅力 第一版本完成日:2010年8月31日

本講義之內文、排版等著作權或其他智慧財產權歸屬 孫傳雄 與 孫傳雄研究室 所有,非經書面同意禁止任何形式之翻印、全文轉貼或者授課使用行為。但例外允許在網際網路上引用此講義之網址連結。

本講義之內文所提及或者引用的公司名稱、產品名稱以及所引用的文字、商標、Youtube短片、產品相片或者網站頁面,均為其所屬公司所擁有,特以聲明。

版權所有 翻印必究