朱 生 牟星亮 單康康
(浙江大學 浙江 310027)
Android操作系統(tǒng)最初由Andy Rubin開發(fā),主要是支持智能手機,在2005年由Google收購,然后組建開放手機聯(lián)盟對其進行研發(fā),慢慢的擴展到平板電腦和其他領域。Android一詞最早出現(xiàn)于法國作家利爾亞當在1886年發(fā)表的科幻小說《未來夏娃》中,他將外表像人的機器起名為Android,Android的Logo是由Ascender公司設計的一個全身綠色的機器人。
Android是一個開放、自由的移動終端平臺,底層是以Linux kernel為核心,包括操作系統(tǒng)、中間件、應用軟件。平臺開放性保證該平臺不存在任何阻礙移動產業(yè)創(chuàng)新的專用權障礙,在平臺上開發(fā)的應用程序,主要是應用java語言編寫,運行在Dalvik虛擬機上。
android平臺由以下幾個部分組成:Linux kernel、Android運行時庫和一些其他的庫、應用框架和應用程序。
Android系統(tǒng)的Linux內核是作為硬件和軟件棧直接的抽象層。它是基于Linux kernel開發(fā)的,但這個系統(tǒng)并非是類GNU/Linux,它沒有采用Linux系統(tǒng)的虛擬內存文件系統(tǒng),而是采用了YAFFS2文件系統(tǒng)(一種開源的文件系統(tǒng),專為NAND Flash所設計,具有很好的移植性,能在多種系統(tǒng)上運行),多種內GNU/Linux所支持的功能,android Linux kernel都沒有給予支持。另外,還添加了一個名為Goldfish的虛擬CPU和Android運行所需的特定驅動代碼。目前,Linux kernel控制包括安全,存儲器管理,程序管理,網絡堆棧,驅動程序模型等。
Android的運行時庫主要包含了一組核心庫和Dalvik虛擬機[3],另外還提供了大量的庫類支持,且大部分是開源代碼。在這些代碼中,提供了諸如對SQlite(android系統(tǒng)采用的嵌入式數據庫)、Webkit的支持。
Dalvik 可以同時運行多個虛擬系統(tǒng),對沒一個Android應用程序,它都在自己的進程中運行,擁有一個獨立的Dalvik虛擬機實例。該虛擬機執(zhí)行(.dex)文件,這種格式的文件對小內存使用做了優(yōu)化。
Android的應用框架的架構設計簡化了組件的重用。開發(fā)人員可以訪問核心應用程序所使用的所有API框架。任何一個應用程序都可以發(fā)布它的功能模塊,而且在框架的安全限制內,其他任何的應用程序也可以使用該功能模塊。
對于這一要求,即當某一部分功能塊被請求時,系統(tǒng)要能夠及時啟動一個應用程序的進程,并實例化其Java對象。所以,Android應用不像其他應用一樣,它并沒有如main()函數這樣的單一入口點。而是由系統(tǒng)提供的四種類型的組件來提供的。四種組件包括:
(1)Activity 在Android中,Activity是所有應用程序的根本,程序的運行流程都是在Activity中,它是Android中最基本的模塊之一。
(2)service Service是和Activity級別差不多的一種組件,但它不能自己運行,只能在后臺運行,和其他組件進行交互。
(3)Broadcast 在Android中,Broadcast是一種廣泛運用在各種應用程序之間進行信息傳輸的機制。
(4)Content Provider Content Provider是Android提供的第三方應用數據的訪問方案。它使一個應用程序的指定數據集提供給其他應用程序。
Android會同一系列核心應用程序包一起發(fā)布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯(lián)系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。一個Android App包含一個稱為APK的壓縮文件中,如圖一所示,一個SDK APP的構成。
圖1中需要注意的是 Android manifest文件,它是一個介于App和Android System的接口。它在app中位于整個項目的根目錄,描述package中暴露的組件(各種activity、service等),以及他們各自的實現(xiàn)類,能被處理的各種數據和啟動位置,另外還指定了permissions和instrumentation。
本文的開發(fā)實例是一個獲取wifi信息,并把掃描到的wifi信號寫入一個sdcard中的文件的程序。Android平臺提供了很多接口,供開發(fā)者使用,開發(fā)者通過這些接口可以方便的對移動終端上的各種設備進行讀寫等操作。
圖1 SDK APP構成
搭建android的開發(fā)環(huán)境,要依次安裝 JAVA 的JDK平臺,Eclipse開發(fā)平臺,SDK平臺,在eclipse中安裝ADT插件,之后,在eclipse中設置SDK路徑。開發(fā)環(huán)境搭建完成后,可以創(chuàng)建運行android軟件的虛擬機avd了,一種是通過eclipse中的Android SDK 安定 AVD Manager創(chuàng)建,一種是利用SDK提供的android 命令來創(chuàng)建。
通過eclipse創(chuàng)建AVD 過程如下:
1、在Eclipse中。選擇Windows > Android SDK and AVD Manager
2、點擊左側面板的Virtual Devices,再右側點擊New
3、填入Name,選擇Target的API,SD Card大小任意,Skin隨便選,Hardware目前保持默認值,點擊create avd 即可完成。
另外一種方法是在cmd中運用命令創(chuàng)建,在cmd命令行中輸入以下命令:
其中avd-name是創(chuàng)建的avd的名字,target后面是所使用的sdk的版本號。這個命令可以創(chuàng)建一個名為avd-name的avd。在在命令行中輸入命令:
通過這個命令在c盤目錄下創(chuàng)建了一個512m大小的名為sdcard的sdcard文件。然后通過下面這個命令,可以帶sdcard文件啟動avd。
啟動后,就可以把各種android dex文件安裝到該虛擬機中進行運行。
Wi-fi是一種可以將一些移動終端以無線方式互聯(lián)的技術。在android的應用框架[10]中,提供了一些訪問操作wifi設備的包,包含在android.net.wifi下面,主要包含四個類:
ScanResult:通過移動終端的wifi設備掃描獲取到的周邊的wifi信號的信息。
wifiConfiguration:主要包含一些接入一個wifi接入點的時候,需要獲取到的一些信息。
wifiInfo:在接入wifi接入點后,通過這個類,可以獲得當前連接的一些信息。
wifiManager:這個類就是用來管理wifi設備的,獲得一定權限后,通過它可以對wifi設備進行各種操作。
在本文的這個開發(fā)實例中,將實現(xiàn)一個很小的程序,它首先對移動終端周邊的wifi接入點進行掃描,獲取這些接入點的信息,然后把這些信息寫入一個sdcard中的一個文本文件中,程序首先要獲取到操作wifi設備和sdcard設備的權限,android中的權限設置都是在AndroidMenifest.xml中定義的。權限設置如下:
因為開發(fā)使用的sdk是最新的版本,而目前很多移動終端的android系統(tǒng)還沒有更新,所以還要在這個文件中設置android:minSdkVersion,它表示可運行此程序的最低sdk的版本。
設定好這些之后,就可以開始程序的設計與開發(fā)了。這個程序中,需要一個用戶界面,包含一個啟動掃描的按鈕,和一個文本框,告知一個簡單的掃描結果給用戶。在Android中,UI的定義需要通過layout來進行,一般view可以直接在layout里面進行聲明。我們需要在Layout的main.xml中定義一個textview和兩個button。
圖2 UI設計
部分代碼如下:
然后根據這兩個文件,android會自動生成一個R.java的文件。里面用java代碼定義了這幾個UI組件及其屬性。
然后我們先來定義一個類,來封裝一些對wifi的操作。在這個類中,我們取得一個WifiManager對象,然后通過它掃描wifi接入點,得到周邊的wifi信號的信息。主要代碼如下:
然后創(chuàng)建一個繼承Activity的主類ScanActivity,這個主類將創(chuàng)建一個UI界面,使用在layout文件當中定義好的textview和button,然后獲取一個的封裝了wifi操作的類的對象,之后就可以掃描所需要的信息了,在寫入sdcard之前,需要檢查該設備的狀態(tài),如果不可寫的話,就在內存里面創(chuàng)建一個文件進行寫入操作,一般在內存中,寫入的位置上/data/data/app下的項目文件夾里面。如圖3,是程序掃描的結果。
圖3 掃描結果
圖4 虛擬機界面
Android平臺是一個高度開放和兼容的平臺,在這個平臺上進行開發(fā)不受任何限制,其應用框架提供了豐富的接口,還有很多成熟的功能塊可調用。另外Android系統(tǒng)還能無縫的結合Google的如地圖、郵件、搜索等服務。對于android的發(fā)展而言,良好的開放性,有利于積累人氣,包括軟件開發(fā)商和硬件提供商。對于廣大的消費,最大的受益是在這個平臺上越來越豐富的軟件資源。而由于其開放和兼容性,將帶來更大的競爭,促使android的快速向前發(fā)展。
[1]Rogers R,Meike B,Mednieks Z.Android應用開發(fā)[M].北京:人民郵電出版社,2010.
[2]Android Developers[EB/OL].http://developer.android.com.
[3]Reto Meier.Android 高級編程[M].北京:清華大學出版社,2010.
[4]開放手機聯(lián)盟.Android[DB/OL].http://code.google.com/android.
[5]Android實驗室.Android[DB/OL].http://androidlab.cn.
[6]Android開發(fā)網.Android[DB/OL].http://www.android123.com.cn.
[7]張燁. 基于Android平臺WIFI的實現(xiàn)及應用[D]. 北京郵電大學.2012
[8]朱婷婷,李惠. 基于Android的應用軟件的綜述[J].電腦與電信.2011.
[9]姚昱旻,劉衛(wèi)國. Android的架構與應用開發(fā)研究[J].計算機系統(tǒng)應用.2008
[10 ]公磊,周聰. 基于Android的移動終端應用程序開發(fā)與研究[J].計算機與現(xiàn)代化2008