3.2.1 Android

 Lab4: Android


此次Lab主要介紹Mobile platform,並利用Android實做範例,分成  Part I. Android介紹、Part I. 實做二個部份來做簡介,此Lab假設對於XMLJava都已有大略的概念,若已經對於Mobile platform有相當的概念,請直接跳至Part III實做的部分了解相關實做跟Lab相關注意事項。


Part I. Android 介紹

Android:


Android本來是一間手機軟體公司,在2005年被Google收購,並且預計做為一個以Linux為核心的手機作業系統,並且和Open Handset Alliance(一個由 33 間手機製造商、軟體商和電信業者組成的 Android 推廣聯合會)合作,藉由開放原始碼的方式,整合許多服務的一個手機作業系統。

目前已經有許多的Android開發文件以及規格,而這些都可以在Google Android的網站中找到。(http://code.google.com/android/index.html)

Android Developer Challenge:


Android 釋出SDK開發套件之後,Google更是推出了Android Developer Challenge的比賽,提供了一千萬美金的獎賞,吸引更多的人加入開發Android應用的部分,比賽共分成兩次,第一次預計是在2008年三月到四月,第二次則是2008年的下半年舉辦。

Android Architecture:



圖三
. Android Architecture
(來源: http://code.google.com/android/index.html)

圖三為Android Architecture,共分成五個部分

Applications

Application Framework

Libraries

Android Runtime

Linux Kernel

詳細的部分可以至Android官方網頁有較詳細的說明。

(http://code.google.com/android/what-is-android.html)

Part II. 實做

實做部分,開發時需要的環境以及軟體為

Windows XP

Java Development Kit

Eclipse

ADT

Android SDK

藉由以上環境,便可以開始建構我們自己的Android應用程式,以下會分成(1)環境建置、(2)撰寫程式、(3)模擬執行三小節來解說。

(1)   環境建置

‧Java Development Kit

    目前 Android 應用程式只支援以「Java」程式語言來編寫 Android 應用程式,所以在安裝Eclipse之前我們必須先針對我們的系統安裝需要的JDK,可至Sun的網站下載(http://java.sun.com)我們需要的JDK

‧下載Eclipse

Eclipse可至(http://www.eclipse.org/downloads/)下載安裝,下載 Eclipse 時請選「Eclipse IDE for Java Developers」或「Eclipse IDE for Java EE Developers」這兩種版本(圖四),只有這兩種版本才會預裝 Eclipse JDT 插件。



圖四
. 下載Eclipse時,請選擇「Eclipse IDE for Java Developers」或「Eclipse IDE for Java EE Developers

下載完畢後,選擇目錄解壓即可,不必安裝,不過第一次啟動時會被要求設定一些細節,這邊就不多做解說。

‧ADT

安裝Eclipse後,是還沒有辦法撰寫Android應用程式的,必須接著安裝Android 開發工具(ADT)才行,開啟Eclipse後,找到選單列選擇 "Help->Software Updates->Find and Install" 選項,點選後會出現設定視窗。

選擇 "Search for new features to install"選項,按下 "Next" 。接著出現設定畫面,接著選擇右上角的 "New Remote Site",會彈出一個 "New Update Site"輸入框,在名稱(Name)跟網址(URL)輸入 https://dl-ssl.google.com/android/eclipse/"(圖五) 按下 "OK" 按鈕離開。

按下 "Finish" 按紐繼續下一步。


圖五
. 設定ADT

接著會要求重新啟動Eclipse,重開完後就完成ADT的安裝了。

Android SDK

安裝好ADT後,接著我們必須安裝Android SDK,可以在Android的官方網站中找到並且下載。(http://code.google.com/android/download.html)

下載完畢後選擇解壓縮的地方,解壓完後接著打開Eclopse偏好設定頁面(Preference),選擇 Android 標籤,在 SDK Location 欄位按下 " Browse..."鍵,選擇剛剛解壓縮完檔案夾所在地,然後按下視窗右下角的套用(Apply) 按鈕。

到這邊已經完成Android SDK的設定,整個的環境也算建置完成,再來就可以開始設計Android應用程式了。

(2)   撰寫程式

Hello! There~

Lab實做的目標是簡單撰寫出一個可以讓使用者輸入自己的名字,接著按下確定按鈕,再來就會顯示Hello! <name> 的簡單範例。

‧分析

在實做之前,我們分析必須用到的需求,首先必須有一個部分顯示 ” please input your name ” 的文字,再來必須有個輸入欄位使用者打打字,接著一個按鈕送出,當然最後一個部分顯示出 ” Hello~ <name> ” 字樣。

‧開新專案

在分析完所需要的部分後,接著就可以開始開新專案,撰寫我們的程式碼了,首先在Eclipse的選單列中選擇 ”File->New->Project” 選項,會出現對話框,點選 Android 資料夾下的「Android Project」,會開啟「New Android Project」視窗(圖六),點選Next


圖六
. 選擇「New Android Project

接著會出現設定專案的一些對話框,再來選擇(Create new project in workspace)這個選項,接著下方會要求填入一些欄位資訊,我們照著填入如表一。

表一. 專案設定


接著點選Finish就可以了,接著Eclipse會在左側的欄位幫HELLO建立一個專案,點選HELLO選項後,就可以看到許多目錄,這些目錄就是Android應用程式執行必須用到的目錄。

可以看到專案架構分別為 “src/ 原始碼(source)資料夾”res/ 資源(Resource)資料夾”Android Library/資料夾以及一些檔案,這些部份負責模組,部分負責介面,部分負責程式邏輯的部分,這邊我們暫時只需要注意到src這個資料夾的部分即可。

點開 ”scr->com.demo.android.hello” 之後,可以看到分別有HELLO.javaR.java這兩個檔案,其中HELLO.java就是主要負責邏輯的程式,R.java主要負責一些常數的部分,這些都是可以點開另外編輯的,這邊只需要點開HEELO.java這一部分編輯即可。

‧編寫程式

HELLO.java檔案上點右鍵選擇 ”Open With->Java Editor” 就可以在右側視窗看到這個檔案的內容如下:


這些就是我們一開始必須有的基本架構,其中onCreate就是這個程式起始的狀態,編寫這部分就可以設定程式一開始該做哪些事情。

再來設定使用者介面,前面有提到專案架構有分成模組、邏輯、介面等部分,回想一開始分析的需求,我們需要兩個顯示元件,一個輸入元件,一個按鈕,在這邊就可以開始設定所需要的使用者介面。

設定使用者介面的部分必須選擇左側選單的 ”res->layout” 裡面的main.xml

Android裡面設定使用者介面的部分使用XML格式的檔案(main.xml)來做顯示,透過XML的方式可以更有彈性的在不同的平台中顯現。

點開main.xml的檔案後可以發現這些內容:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    >

<TextView 

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="Hello World, HELLO"

    />

</LinearLayout>

Main.xml預設這些內容,這邊可以注意到root元素(LinearLayout)內的一個元素,TextView,這就是一個顯示元件,顯示的內容為”Hello World, HELLO”,當然這個字串我們也可以修改成我們要的字串讓它顯示,這些都是原本預設的介面,我們可以透過更改main.xml的內容來設定我們想要顯示什麼元件以及呈現的方式,可以在http://code.google.com/android/devel/implementing-ui.htm

找到更多相關的設定方式。

再來針對我們所要的元件,分別寫出需要的語法,加入到main.xml檔案裡面。

*顯示一段文字內容為”Please input your name”

*顯示輸入框,讓使用者輸入name,其中@+id/指的是輸入元件的位置

*顯示按鈕,按鈕上顯示送出

這些就我們的使用者介面,將這些語法依照我們的需求設定到main.xml檔案裡面即可。

最後的main.xml檔案

<?xml version="1.0" encoding="utf-8"?>

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

        android:orientation="vertical"

        android:layout_width="fill_parent"

        android:layout_height="fill_parent"

        >

    <TextView

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="Please input your name"

            />

    <EditText android:id="@+id/name"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:numeric="true"

            android:text=""

            />

    <Button android:id="@+id/submit"

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text="送出"

            />

    <TextView

            android:layout_width="fill_parent"

            android:layout_height="wrap_content"

            android:text=" "

            />

																		</LinearLayout>												
			


在設定好顯示介面後,再來我們只要設定把使用者輸入的文字,前面加上Hello的字樣在顯示出來即可,這部分屬於邏輯控制的部分,所以再次回到之前提到的HELLO.java的部分,在這部分設定我們的邏輯控制部分。

除了先前預設好的設定之外,編輯加入設定當按下按鈕後的動作就可以完成我們的Android程式了,以下為最後的程式架構。

HELLO.java

package com.demo.android.hello;

import java.text.DecimalFormat;   

import android.app.Activity;   

import android.os.Bundle;   

import android.view.View;   

import android.view.View.OnClickListener;   

import android.widget.Button;   

import android.widget.EditText;   

import android.widget.TextView;   

public class HELLO extends Activity {      

 /** Called when the activity is first created. */

        @Override

        public void onCreate(Bundle icicle) {

            super.onCreate(icicle);

            setContentView(R.layout.main);

                       //Listen for button clicks

            Button button = (Button)findViewById(R.id.submit);

            button.setOnClickListener(hellothere);

        }

        private OnClickListener hellothere = new OnClickListener()

        {

            public void onClick(View v)

            {

                EditText name = (EditText)findViewById(R.id.name);

                TextView result = (TextView)findViewById(R.id.result);

                result.setText("Hello!"+name);

            }

        };

    }


藉由這樣的方式,就可以完成我們的第一個Android應用程式,再來就設設定如何利用模擬器來產生我們撰寫好的結果。

(3)   模擬執行

撰寫好程式後,點選上方選單的 “Run->Open Run Dialog” 接著出現對話框。

Project的地方點選Browse 點取先前開好的專案”HELLO”

Activity的地方,點開選取先前設定好的”com.demo.android.hello”

如圖六所視。


接著點Run就可以執行剛寫好的應用程式了。

‧執行結果


這樣就完成了Android的實做。

Lab4 要求

1.      利用Android SDK寫出一個可在模擬環境執行的應用。

Reference

http://www.slideshare.net/swamicrm/mobile-marketing/

http://www.slideshare.net/rudydw/mobile-20-plugg/

http://code.google.com/android/index.html


 

main.xml的地方

最後面的

*    <TextView**           
android:layout_width="fill_parent"**           
android:layout_height="wrap_content"**           
android:text=" "**            />*

請改成

<TextView android:id="@+id/result"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text=" "
/> 

這樣才能正常的跑,


還有設定輸入的地方

*android:numeric="true" <=

這樣只能輸入數字*
*
改成false就能輸入其他字元了!*

參考答案


    在這次的Lab4的實作部份,主要是Google主打的Android,這幾天花了點時間研究了一下Android的程式開發,Android目前主要是Java來做為開發的語言,不過Java是屬於高階的語言,用來開發一般的AP是一套不錯的工具,但若是要開發韌體或是Driver,應該還是要用C吧,不過anyway,就像老師說的,工具不是問題,只要觀念對,用啥工具都可以寫的!或許之後,Java也可以用來寫Driver~

緊接著,便是要開始著手來寫我的第一支Android的程式啦,當然囉~開始當然是先寫支簡單的Android程式!首先,依Lab4DocumentSetup Android的開發環境,一切都很順利,這應該是要說Lab4Document寫的很仔細,真是太感激了!再來接著就是開始建立一個新的專案,開始寫第一支Android程式!

首先,最先遇到的問題,便是介面的開發設計了,說真的,真的不大方便,由於目前的 ADT 版本還沒提供方便地視覺化拖拉介面元件的介面開發方式,所以無法直接用拖拉介面元件的方式來建立Form,都要以文字的方式來做,的確是較為麻煩,且無法在設計初期就看到所做的介面為何樣,這對習慣寫BCB or VS2005的我,的確有點不習慣!我想,我已經被GUI程式設計給寵壞了吧!

而接著遇到的第二個較為麻煩的部份,就是Event也要自己寫,這點也真的是有點不便利,不像BCB or VS2005,在元件上點個兩下就自動幫你Create好,不過除了這兩點外,之後的操作就挺順的,可以說所有的開發工具跟語言都差不多一個樣啦,就這樣,也終於寫出第一支Android的程式囉~

我想,目前Android的開發工具也剛在起步,日後一定會有很多的進步空間的,而且,也很有希望可以朝向跨平台的方向來前進,這樣子的話,餅才有機會可以做大!

1. Setup Android的開發環境

Setup Android的開發環境,只要依著Lab4DocumentStep by Step的操作下基本上是不會有啥問題的只是剛開始在下載Java Development Kit的時候,必須要先判斷是要下載哪個版本,其餘都OK

2. 第一個Android程式(簡單版)

剛開始對於Android的開發並不熟悉,所以就先以Lab4Document中的範例來做,就簡單做個InputOutput的練習,同時,藉由此次的學習過程中,來了解Android所提供的各個元件的特性,以及如何使用。<Fig1.>為實際做出來的成果。


<Fig1.>
Android的第一支小程式


3. 第二個Android程式(進階版)

在第一個小程式的練習後,便來嘗試點較複雜一點點的,簡易計算機,這其實應該也算是很簡單的一個小程式啦,不過在剛開始時,GUI的設計上就讓我撞了壁,由於不清楚元件的設定,所以在初期的開發時,Button的排列上就只會排成一直線,完全無法按自己的想法來排列,搞了好久,也看了很多網頁資料,終於也慢慢弄懂這些元件有哪些屬性,也慢慢的弄清楚該怎樣的去設定這些元件,以達到自己的設計要求!<Fig2.>為實際做出來的簡易計算機


<Fig2.>
簡易的計算機小程式,特別放入了一個數字小時鐘



<Fig3.>
程式開發畫面

4. 結論

平時在工作上接觸的都是微軟的Windows Mobile,所以在這次的Android的程式開發中,覺得有蠻有趣的,雖然有GUI設計上的麻煩,但後來有找到Droiddraw這個輔助工具,就覺得方便多了,同時也推薦給同學一起來用。Android在某些地方比起微軟的Windows Mobile,其實都還蠻有競爭性的,特別是Base on Linux,這就省了不少成本,所以未來性是可以蠻看好的,而在Android的開發上,其實只要有程式的底子,要開發哪種工具都不是問題,我想當自己有這一技之能時,或許哪天有機會,工作上真的要用到了,也不擔心了,或許這樣也是給自己多一個機會吧。

5. 參考資料

1.  http://www.slideshare.net/swamicrm/mobile-marketing/

2.  http://code.google.com/android/index.html

3.  http://droiddraw.org/

-------------------------------------------------------------------------------------------------------

Android是基於Linux內核[2]軟體平台作業系統,是Google2007年11月5日公佈的手提電話系統平台,早期由Google開發,後由開放手機聯盟(Open Handset Alliance)開發。它採用了軟體堆層(software stack,又名以軟體疊層)的架構,主要分為三部分。低層以Linux核心工作為基礎,只提供基本功能;其他的應用軟體則由各公司自行開發,以Java作為編寫程式的一部分。另外,為了推廣此技術,Google和其他幾十個手機公司建立了開放手機聯盟。Android在未公開之前常被傳聞為Google電話gPhone。大多傳聞認為Google開發的是自己的手機電話產品,而不是一套軟體平台。到了2010年1月,Google始發表自家品牌手機電話的Nexus OneAndroid是基於Linux內核[2]軟體平台作業系統,是Google2007年11月5日公佈的手提電話系統平台,早期由Google開發,後由開放手機聯盟(Open Handset Alliance)開發。它採用了軟體堆層(software stack,又名以軟體疊層)的架構,主要分為三部分。低層以Linux核心工作為基礎,只提供基本功能;其他的應用軟體則由各公司自行開發,以Java作為編寫程式的一部分。另外,為了推廣此技術,Google和其他幾十個手機公司建立了開放手機聯盟。Android在未公開之前常被傳聞為Google電話gPhone。大多傳聞認為Google開發的是自己的手機電話產品,而不是一套軟體平台。到了2010年1月,Google始發表自家品牌手機電話的Nexus One

歷史

Google於2005年並購了成立僅22個月的高科技企業Android,展開了簡訊、手機檢索、定位等業務,同時基於Linux的通用平台也進入了開發。

2008 Patrick Brady於Google I/O 演講「Anatomy & Physiology of an Android」,並提出的 Android HAL 架構圖。HAL 以 *.so 檔的形式存在,可以把 Android framework 與 Linux kernel 隔開。

2010年2月3日,Linux內核開發者Greg Kroah-Hartman將Android的驅動程式從Linux內核「狀態樹」(「staging tree」)上除去,從此,Android與Linux開發主流將分道揚鑣。[3]

 公佈前的傳聞

Google的東南亞銷售與營運常務董事Richard Kimber曾說:"At this point in time, we are very focused on the software, not the phone.(目前我們完全專注於軟體而非電話)"。可是Google並未正式否認正在製作電話的傳聞,Google可能與一家硬體生產商合作創作Google Phone。

傳言指出Google Phone將提供完全免費的服務,Google會透過廣告獲取收益。Google Phone的發佈日期預期為2009年

LG宣佈將於2007年第二季開始在其手提電話產品中安裝Google的軟體。[4]

 升級

Android系統今後將繼續每半年一次的升級步伐,分別定在每年的夏天和年終。每代Android系統都將以食物命名,比如1.5版叫做Cupcake(紙杯蛋糕),1.6版為Donut(甜甜圈),然後是Eclair(法式奶油夾心甜點)和Froyo(冷凍乳酪)。Donut將把社交網路功能作為升級重點,在「手機的各種體驗中」都增加社交網路元素[5]

 對手機行業的影響

已經與Sony EricssonHTCNTT DoCoMoKDDIMotorola等世界移動領域34家公司於免費提供達成一致。今後對於行動通訊的影響勢必會進一步體現出來。但是如此廣泛公司的同盟是否能夠有效運作及以持久值得拭目以待。

 發佈

Android and cupcake.jpg

1.5
(Cupcake)
基於Linux Kernel 2.6.27
2009年4月30日,官方1.5版本(Cupcake)的Android發佈。[6][7]主要的更新如下:
  • 拍攝/回放視訊,並支援上傳到youtube
  • 支援立體聲藍牙耳機,同時改善自動配對性能
  • 最新的採用WebKit技術的瀏覽器,支援拷貝/粘帖和頁面中搜尋
  • GPS性能大大提高
  • 螢幕虛擬鍵盤
  • 主螢幕增加音樂播放器和相框widgets
  • 應用程式自動隨著手機旋轉
  • 簡訊,Gmail,日歷,瀏覽器的用戶介面大幅改善,比如說Gmail現在可以批量刪除郵件了
  • 相機啟動速度加快,拍攝圖片可以直接上傳到picasa
  • 來電照片顯示[8]
1.6
(Donut)
基於Linux Kernel 2.6.29
2009年9月15日, 1.6(Donut)版本SDK發佈。[9][10]主要的更新如下:
  • 完全重新設計的Android Market
  • 手勢支援
  • 支援CDMA網路
  • 文字轉語音系統(TXT-2-speech)
  • 快速搜尋框
  • 全新的拍照介面
  • 應用程式耗電檢視
  • 支援VPN
  • 支援更多的螢幕解析度
  • 支援OpenCore2媒體引擎
  • 新增面向視覺或聽覺困難人群的易用性外掛程式[11]
2.0/2.0.1/2.1
(Eclair)
基於Linux Kernel 2.6.29
2009年10月26日, 2.0(Eclair)版本SDK發佈。[12]主要的更新如下:[13]
  • 優化硬體速度
  • "Car Home"程式
  • 支援更多的螢幕解析度
  • 重整介面
  • 新的瀏覽器的用戶介面和支援HTML5
  • 新的聯繫人名單
  • 更好的白色/黑色背景比率
  • 改進Google Maps 3.1.2
  • 支援Microsoft Exchange
  • 支援內置相機閃光燈
  • 數位變焦
  • 改進的虛擬鍵盤
  • 藍牙2.1
2.2
(Froyo)
基於Linux Kernel 2.6.32
2010年5月20日, 2.2(Froyo)版本SDK發佈。[14]

已確定新功能:

  • 支援安裝軟體來擴展內存 [15]
  • 整合Adobe Flash 10.1支援 [16]
  • 加強軟體即時編譯的速度 [17]
  • 新增軟體啟動"快速"至電話和瀏覽器 [18]
  • USB分享器和WiFi熱點功能 [19]
  • 支援在瀏覽器上傳檔案 [20]
  • 更新Market中的"batch"和自動更新 [21]
  • 增加對Microsoft Exchange的支援 (安全政策, auto-discovery, GAL look-up)
  • 整合ChromeV8 JavaScript引擎應用到瀏覽器
  • 加強快速搜尋小工具

未確定新功能:

  • 更多軟體能透過Market更新, 類似2.0/2.1中的Map更新
  • 速度和性能優化 [21]
 ???
(Gingerbread)
基於Linux Kernel 2.6.33
已確定新功能:

Java為編程語言,使Android從介面到功能,都有層出不窮的變化,其中Activity等同於J2ME的MIDlet,一個 Activity 類別(class)負責建立視窗(window),一個活動中的Activity就是在 foreground(前景)模式,背景執行的程式叫做Service。兩者之間透過由ServiceConnection和AIDL連結,達到複數程式同時執行的效果。如果執行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(stopped),甚至被系統清除(kill)。

View等同於J2ME的Displayable,程式人員可以透過 View 類別與「XML layout」檔將UI放置在視窗上,Android 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的Android Hero手機即含有大量的widget。至於ViewGroup 是各種layout 的基礎抽象類別(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,Android的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間透過Listener 結合在一起,每一個View都可以註冊一個event listener,例如:當View要處理使用者觸碰(touch)的事件時,就要向Android框架註冊View.OnClickListener。另外還有Image等同於J2ME的BitMap。

 中間件

作業系統與應用程式的溝通橋樑,並用分為兩層:函式層(Library)和虛擬機器(Virtual Machine)。

Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到螢幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。

Android採用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當,但相較於Linux Cairo, skia 功能還只是陽春型的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,目前Skia 也是Google Chrome 的圖形引擎。

Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。使用者可透過ContentResolver類別(Column)取得共用資料庫。

Android的中間層多以Java 實作,並且採用特殊的Dalvik 虛擬機器(Dalvik Virtual Machine)。Dalvik虛擬機器是一種「暫存器型態」(Register Based)的Java虛擬機器,變數皆存放於暫存器中,虛擬機器的指令相對減少。

Dalvik虛擬機器可以有多個instance, 每個Android應用程式都用一個自屬的Dalvik虛擬機器來執行,讓系統在執行程式時可達到最佳化。Dalvik 虛擬機器並非執行Java Bytecode,而是執行一種稱為.dex格式的檔案。

 硬體抽像層

Android HAL 是為了將 Android framework 與 Linux kernel 隔開,降低對 Linux kernel 的依賴,以達成kernel independent。Android HAL 目前以 HAL stub 的形式存在,本身是.so 檔,是一種 proxy 的概念。Android runtime 向 HAL 取得 stub 的 operations,再以 callback 的方式操作函數。

 作業系統

Android 是執行於 Linux kernel之上,但並不是GNU Linux。因為在一般GNU/Linux 裏的功能,Android 大都沒有支援,包括Cairo, X11, Alsa, FFmpeg, GTK, Pango, Glibc等都移除掉了。Android又以bionic 取代Glibc, 以Skia 取代Cairo, 再以opencore 取代FFmpeg 等等。Android 為了達到商業應用,必須移除關於GNU Copyleft 的限制,例如Android將驅動程式移到 userspace,使得Linux driver 與 Linux kernel徹底分開。bionic/libc/kernel/ 並非標準的kernel header files. Android 的 kernel header 是利用工具由 Linux kernel header 所產生的,這樣做是為了保留常數、資料結構與巨集。

目前Android 的 Linux kernel控制包括安全(Security),記憶體管理(Memory Managemeat),程式管理(Process Management),網路堆疊(Network Stack),驅動程式模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。

 搭載Android系統的裝置產品

Android裝置列表

參考資料: http://zh.wikipedia.org/zh-tw/Android