indows上的android開發環境軟件架構5

windows上的android開發環境軟件架構5

(二)實驗要求:

修改按下button 顯示的內容中添加上自己的學號姓名;

 添加一個按鈕,按鈕名稱爲“退出”,並且爲這個按鈕添加事件代碼,使得點擊這個按鈕後退

出程序。事件代碼如下:

FullscreenActivity.this.finish();

 添加完成後編譯,把生成的apk 傳到手機上安裝運行查看結果

(二) android介紹

Android 是一種基於Linux 的自由及開放源代碼的操作系統,主要使用於便攜設備,如智能手機和平板

電腦。中國大陸地區較多人使用“安卓”或“安致”。Android 操作系統最初由Andy Rubin 開發,主要支持手機。

2005 年由Google 收購注資,並組建開放手機聯盟開發改良隨後,逐漸擴展到平板電腦及其他領域上。

Android系統結構

系統內核

Android 是運行於Linux kernel 之上,但並不是GNU/Linux。因爲在一般GNU/Linux 裏支持的功能,

Android 大都沒有支持,包括Cairo(矢量繪圖庫)、X11(窗口系統)、Alsa(高級Linux 聲音架構)、FFmpeg(圖片)、

GTK(圖形界面應用程序開發工具)、Pango(國際化文本處理庫)及Glibc(GNU C 標準庫)等都被移除掉了,就好比

Android 之前的基於J2ME 開發的Java 操作系統手機實際上是一個精簡的Java 虛擬機。Android 又以bionic 取

代Glibc、以Skia 取代Cairo、再以opencore 取代FFmpeg 等等。Android 爲了達到商業應用,必須移除被

GNU GPL 授權證所約束的部份。

硬件抽像層

Android 的HAL(硬件抽像層)是能以封閉源碼形式提供硬件驅動模塊。HAL 的目的是爲了把Android

framework 與Linux kernel 隔開,讓Android 不至過度依賴Linux kernel,以達成kernel independent 的概

念,也讓Android framework 的開發能在不考量驅動程序實現的前提下進行發展。

中介軟件

Android 採用OpenCORE 作爲基礎多媒體框架;使用skia 爲核心圖形引擎,搭配OpenGL/ES;多媒體數據

庫採用SQLite 數據庫系統;它的中間層多以Java 實現,並且採用特殊的Dalvik 虛擬機(Dalvik Virtual

Machine),Dalvik 虛擬機可以有多個實例(instance), 每個Android 應用程序都用一個自屬的Dalvik 虛擬機

來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機並非運行Java 字節碼(Bytecode),而是運行一

種稱爲.dex 格式的文件。

Android 應用程序開發

Android 應用程序使用Java 做爲開發語言。aapt 工具把編譯後的Java 代碼連同其它應用程序需要的數

據和資源文件一起打包到一個Android 包文件中,這個文件使用.apk 做爲擴展名,它是分發應用程序並安

裝到移動設備的媒介,用戶只需下載並安裝此文件到他們的設備。單一.apk 文件中的所有代碼被認爲是一

個應用程序。

從很多方面來看,每個Android 應用程序都存在於它自己的世界之中:

a. 默認情況下,每個應用程序均運行於它自己的Linux 進程中。當應用程序中的任意代碼開始執行

時,Android 啓動一個進程,而當不再需要此進程而其它應用程序又需要系統資源時,則關閉這

個進程。

b. 每個進程都運行於自己的Java 虛擬機(VM)中。所以應用程序代碼實際上與其它應用程序的代

碼是隔絕的。

c. 默認情況下,每個應用程序均被賦予一個唯一的Linux 用戶ID,並加以權限設置,使得應用程序

的文件僅對這個用戶、這個應用程序可見。當然,也有其它的方法使得這些文件同樣能爲別的

應用程序所訪問。

使兩個應用程序共有同一個用戶ID 是可行的,這種情況下他們可以看到彼此的文件。

Android 五大組件及相關類

活動—Activity

Activity 是爲用戶操作而展示的可視化用戶界面。比如說,一個activity 可以展示一個菜單項列表供用

戶選擇,或者顯示一些包含說明的照片。一個短消息應用程序可以包括一個用於顯示做爲發送對象的聯繫

人的列表的activity,一個給選定的聯繫人寫短信的activity 以及翻閱以前的短信和改變設置的activity。盡

管它們一起組成了一個內聚的用戶界面,但其中每個activity 都與其它的保持獨立。每個都是以Activity 類

爲基類的子類實現。

服務—Service

服務沒有可視化的用戶界面,而是在一段時間內在後臺運行。比如說,一個服務可以在用戶做其它事

情的時候在後臺播放背景音樂、從網絡上獲取一些數據或者計算一些東西並提供給需要這個運算結果的

activity 使用。每個服務都繼承自Service 基類。

廣播接收器—Broadcast

廣播接收器是一個專注於接收廣播通知信息,並做出對應處理的組件。很多廣播是源自於系統代碼的

──比如,通知時區改變、電池電量低、拍攝了一張照片或者用戶改變了語言選項。應用程序也可以進行

廣播──比如說,通知其它應用程序一些數據下載完成並處於可用狀態。

內容提供—ContentProvider

內容提供者將一些特定的應用程序數據供給其它應用程序使用。數據可以存儲於文件系統、SQLite 數

據庫或其它方式。內容提供者繼承於ContentProvider 基類,爲其它應用程序取用和存儲它管理的數據實現

了一套標準方法。然而,應用程序並不直接調用這些方法,而是使用一個ContentResolver 對象,調用它

的方法作爲替代。ContentResolver 可以與任意內容提供者進行會話,與其合作來對所有相關交互通訊進行

管理。

意圖—Intent

當接收到ContentResolver 發出的請求後,內容提供者被激活。而其它三種組件──activity、服務和廣

播接收器被一種叫做intent 的異步消息所激活。intent 是一個保存着消息內容的Intent 對象。對於activity

和服務來說,它指明瞭請求的操作名稱以及作爲操作對象的數據的URI 和其它一些信息。比如說,它可以

承載對一個activity 的請求,讓它爲用戶顯示一張圖片,或者讓用戶編輯一些文本。而對於廣播接收器而言,

Intent 對象指明瞭聲明的行爲。比如,它可以對所有感興趣的對象聲明照相按鈕被按下。

Android 程序結構

/src 目錄下存放的是Android 程序核心代碼。

/gen 目錄下存放的是資源配置類BuildConfig.java 和R.java,提供給/src 中代碼與/res 中資源連接的一個

橋樑。比較老的ADT 可能沒有改目錄,對應的類都一起放在/src 中,在此Eclipse 的ADT 中,可以所見所得

的設計界面,並自動更新R.java 文件。

/bin 目錄下存放編譯完成後的一些文件,包括*.apk。

/libs 目錄下存放該項目要用的的Android 開發庫。

/res 和/assets 目錄下存放資源和資產以及一些說明文件,只是編譯時有所不同。

AndroidManifest.xml 是組件配置文件以及一些項目屬性文件。

當Android 啓動一個應用程序組件之前,它必須知道那個組件是存在的。所以,應用程序會在一個

manifest 文件中聲明它的組件,這個文件會被打包到Android 包中。這個.apk 文件還將涵括應用程序的代碼、

文件以及其它資源。這個manifest 文件以XML 作爲結構格式, 而且對於所有應用程序, 都叫做

AndroidManifest.xml,例如:

一個android 程序不像我們之前認識的c 和java 等程序是從main 函數作爲入口開始執行的。它是從在

AndroidManifest.xml 中標註了‘android.intent.action.MAIN’和’android.intent.category.LAUNCHER’的activity

組件開始執行的,標明瞭這個activity 將在應用程序加載器中顯示,就是用戶在設備上看到的可供加載的應

用程序列表。換句話說,這個activity 是應用程序的入口,是用戶選擇運行這個應用程序後所見到的第一個

activity。而activity,service 組件如何執行又得看它們的生命週期:

Activity 組件類的主要函數:

void onCreate(Bundle savedInstanceState)

void onStart()

void onRestart()

void onResume()

void onPause()

void onStop()

void onDestroy()

上面幾個函數控制Activity 的這三種狀態之間的切換:

e. 當在屏幕前臺時(位於當前任務堆棧的頂部),它是活躍或運行的狀態。它就是相應用戶操作

的activity。

f. 當它失去焦點但仍然對用戶可見時,它處於暫停狀態。即是:在它之上有另外一個activity。這

個activity 也許是透明的,或者未能完全遮蔽全屏,所以被暫停的activity 仍對用戶可見。暫停的

activity 仍然是存活狀態(它保留着所有的狀態和成員信息並連接至窗口管理器),但當系統處

於極低內存的情況下,仍然可以殺死這個activity。

g. 如果它完全被另一個activity 覆蓋是,它處於停止狀態。它仍然保留所有的狀態和成員信息。然

而它不在爲用戶可見,所以它的窗口將被隱藏,如果其它地方需要內存,則系統經常會殺死這

個activity。

R.java 文件:

其中的id 屬性對應了res/layout 中各個控件,從中我們知道界面有兩個按鈕button1 和button2 以及一個文

本編輯框editText1 等控件。String 表示一些字符串資源。所以R.java 其實就是一個資源配置索引文件。如

果我們需要在覈心代碼中添加對某些控件的處理比如button1,可以如下操作:

佈局Layout:

在一個Android 應用中,用戶界面是由View 和ViewGroup 對象構建的。View 與ViewGroup 都有很多種類,

而它們都是View 類的子類。定義並展現你的視圖層次的最常用的方法是使用XML 佈局文件,XML 元素的名

稱與它體現的Java 類相對應。所以一個<TextView>元素將在你的UI 中生成一個TextView,而<LinearLayout>

則創建一個LinearLayout 視圖組。當你載入一個佈局資源時,Android 系統會根據你佈局中的元素初始化這

些運行時對象,舉例來說,一個包含文本視圖和一個按鈕的簡單垂直佈局如下:

以上介紹了Android 的一些基本情況,當然還有很多內容沒有覆蓋到,如果對此感興趣,可以網上查找

Android 的相關文檔和源代碼進行學習。

(四)實驗內容:

1、下載adt-bundle-windows-x86 包(該文件可以到android 官網下載),解壓到當前文件夾,打開其中的eclipse

文件夾下的eclipse.exe(該eclipse 已經默認裝好了android sdk)。

2、點擊Android Virtual Device Manager——Device Definitions——選擇適合的設備——Create AVD 來建立一

個android 虛擬設備(也可以使用真機作爲調試設備)。

3、回到主界面,點擊File——New——Android Application Project 來創建一個Android 項目,取名Lab6,一

路Next 到最後選擇FullScreenActivity,再點擊Finish 完成。

4、在Package Explorer 中看到Lab6

5、打開res/layout 目錄下的activity_main.xml 進行編輯。

6、在Palette 的Layouts 中選擇LinearLayout(Vertical)左鍵點擊不放拖到右側的圖形界面上並覆蓋DUMMY

CONTENT 和Dummy Button 區域,如下圖所示:

7、接着在Outline 中右鍵點擊LinearLayout——Assign ID——輸入名字如lab6layout——OK.

8、用同樣的方法添加一個TextView 和Button 控件,它們可從Form Widgets 中選擇。

9、添加完成後在Outline 中的textView1 和button1 的圖標下有兩個感嘆號,只要點擊button1,再點擊下

面的Text 如下紅線中的按鈕——點擊New String——在String 中輸入”hello”——在New R.string 中輸入”bt”

——點擊OK(同樣的辦法對textView1,String 中爲空,R.string 中爲tv),這樣對應的感嘆號就消失了:

10、點擊Save All 保存修改,查看/gen/com.example.lab6 包下面的R.java 如下:

11、打開/src/com.example.lab6 包下的FullscreenActivity.java 文件進行如下編輯:

1)在FullscreenActivity 類中添加三個變量如下:

運行程序總是出現unfortunately stop 後來思考,發現,原來是在界面還沒有初始化前就想獲得界面的一些對象,因此雖然編譯沒有報錯,但是在運行時都是提前stop,修改獲取界面對象的順序後,就可以了。另一個是用其它方法實現進程結束(system.exit(0),等等三種方法),另一個是用真機實現聯機調試,使用豌豆莢連接手機後,在調試的configure配置裏,通過選擇可以直接使用手機作爲調試機子,而不用模擬器。

發佈了208 篇原創文章 · 獲贊 21 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章