——不積跬步,無以至千里;不積小流,無以成江海
開發(fā)環(huán)境搭建完了,那么讓我們建個(gè)簡單的項(xiàng)目,來了解下Android項(xiàng)目到底是怎么樣的一個(gè)結(jié)構(gòu)~
1、建立一個(gè)簡單的Hello World程序
步驟1:啟動(dòng)Eclipse,選擇 New—>Other,如下圖所示
步驟2:在出現(xiàn)的窗口中選擇Android Project,如下圖所示:
步驟3:此時(shí)會(huì)出現(xiàn)如下的對話框,填入相應(yīng)的項(xiàng)目屬性,對應(yīng)如下:
名 稱 | 屬 性 含 義 |
Project Name | 工程名字,物理上就是最外層文件夾的名字 |
Build Target | 應(yīng)用程序針對的目標(biāo)設(shè)備 |
Application Name | 應(yīng)用程序的名稱,將顯示在應(yīng)用程序的標(biāo)題欄 |
Package Name | 包名稱 |
Create Activity | 是否讓ADT自動(dòng)創(chuàng)建一個(gè)默認(rèn)的繼承自Activity的類,該類是一個(gè)啟動(dòng)和控制程序的類 |
Min SDK Version | 應(yīng)用程序所要求的API版本 |
創(chuàng)建新的Android項(xiàng)目
步驟4:點(diǎn)擊Finish按鈕完成項(xiàng)目的創(chuàng)建,在包管理器中展開項(xiàng)目后如下圖所示:
2、運(yùn)行創(chuàng)建的Hello World,看下效果圖
步驟1:Eclipse菜單欄,選擇Run->Run Configurations..,如下圖
步驟2:此時(shí)會(huì)在出現(xiàn)的以下窗口中,找到Android選項(xiàng)右鍵New,如圖
步驟3:輸入新建的配置名稱,下圖中設(shè)為Android15
步驟4:點(diǎn)擊Browse按鈕選中項(xiàng)目,如下圖所示
步驟5:切換到Target選項(xiàng)卡,選擇上篇文章中建立的名為and15的AVD
步驟6:在對話框中選擇Run選項(xiàng),運(yùn)行如下圖
(按Ctrl+F12可以切換屏幕方向)
3、項(xiàng)目結(jié)構(gòu)的剖析
首先看下剛才建立的Android項(xiàng)目的結(jié)構(gòu),如下圖所示:
從上圖中可以看出,新創(chuàng)建的Android項(xiàng)目包含了src、gen、asset、res等目錄,下面就這些目錄分別介紹:
² Src目錄
從目錄名就可猜測出這個(gè)目錄是用來存放程序源碼的,基本上一個(gè)Android應(yīng)用程序的程序邏輯以及功能代碼都是寫在該目錄下的,不同功能的類可以通過Java 包的機(jī)制來進(jìn)行區(qū)分。而我們創(chuàng)建的Hello World工程由于勾選了Create Activity選項(xiàng),所以在該目錄下生成了繼承自Activity的啟動(dòng)與控制程序的類HelloWorld, 打開自動(dòng)生成的HelloWorld.java源文件,內(nèi)容如下:
從上述代碼中,大致可以猜測出當(dāng)該類初次被創(chuàng)建的時(shí)候,會(huì)將當(dāng)前的View設(shè)置為R.layout.main,即當(dāng)前的界面是R.layout.main(這兒只是進(jìn)行猜測)。那 么我們很容易產(chǎn)生疑問,Gen目錄下生成的R類究竟有什么用?R.layout.main又究竟是什么?在接下來的內(nèi)容中會(huì)給出解答~
² Gen目錄
Gen目錄是ADT插件幫我們生成的,并在該目錄與主程序在同一級目錄下生成R.Java文件(本程序在cnblogs.com包下),打開文件查看R類內(nèi)容:
這時(shí)候可以知道R.layout.main原來是一個(gè)16進(jìn)制數(shù),而從HelloWorld.java源文件來看,R.layout.main理應(yīng)指向的是一個(gè)界面組件類,此處反而更像是個(gè)id, 卻又是作何解釋?
其實(shí),在Android應(yīng)用程序中,ADT生成的R類是一個(gè)指向資源的類,更像是一個(gè)字典。在該字典中,包含了用戶界面、圖片、字串等各種資源對應(yīng)的編號, 即以16進(jìn)制表示的編號。所以由此可知,R.layout.main其實(shí)指向的是res/layout目錄下的main.xml界面描述性文件,該文件會(huì)在下面進(jìn)行具體介紹。之所有用 R類,一個(gè)好處是在于程序在編譯的時(shí)候會(huì)對該類進(jìn)行查閱,對于該類中不存在即應(yīng)用程序中沒有使用到的資源則不會(huì)打包編譯進(jìn)去,從而對程序進(jìn)行瘦身。
² Assets目錄
該目錄目前是空的,因?yàn)槲覀儧]有放任何東西進(jìn)去(貌似是廢話)!那么該目錄干啥用的呢?其實(shí)呢,在這個(gè)目錄可以放很多東西,諸如應(yīng)用程序中使用到的多媒 體文件(音頻或者視頻文件)、圖片或者文本文件等。其同后面即將介紹的res目錄相似,也是存放資源文件的目錄,但與res目錄的不同之處在于res會(huì)被編譯器 所編譯,而assets則不會(huì)。也就是說應(yīng)用程序運(yùn)行的時(shí)候,res中的內(nèi)容會(huì)在啟動(dòng)的時(shí)候載入內(nèi)存,asset只有在被用到的時(shí)候才會(huì)載入內(nèi)存,所以一般將一些不經(jīng) 常使用到的大資源文件存放在該目錄下。
² res目錄
在該目錄下主要是存放整個(gè)應(yīng)用程序的資源文件,該目錄按照資源的種類默認(rèn)分為三個(gè)子目錄,分別為drawable、layout和values目錄:
Ø drawable子目錄
在該子目錄下主要存放的是一些圖片格式文件,支持的格式有.Png、.9.png和.jpg等位圖文件。
Ø layout子目錄
在該子目錄下主要存放的是界面布局的XML文件,在Android的應(yīng)用程序中有兩種方式生成用戶界面。一種是通過靜態(tài)的界面描述文件,另外一種就是通過Java
代碼動(dòng)態(tài)生成用戶界面。這時(shí)候讓我們看下上述R.layout.main指向的main.xml文件的內(nèi)容:
上述內(nèi)容中第一行指出了xml文檔的版本以及編碼方式,第二行中的LinearLayout指出了界面的布局方式為線性布局,xmlns:android屬性指出了使用的 android架構(gòu),這個(gè)屬性是必須的,每個(gè)界面描述性文件中必須有一個(gè)架構(gòu)申明。第三行則指出了界面的布局是垂直布局,第四行與第五行指出寬和高將撐滿整個(gè)父 容器。在該界面中只定義了一個(gè)TextView組件,并且該組件寬度撐滿父容器,高度則剛好適合,顯示的文本引用的是values目錄下string.xml中hello字符串變量 (值為Hello World,HelloWorld!,即運(yùn)行時(shí)候顯示的那幾個(gè)字),其中@符號表示引用。
Ø values子目錄
該目錄中包含了所有的XML格式的參數(shù)描述文件,如string.xml字符串描述文件、color.xml顏色描述文件、style.xml樣式描述文件和array.xml數(shù)組描述文件等。
² AndroidManifest.xml文件
應(yīng)用程序描述文件,有Java開發(fā)經(jīng)驗(yàn)的對這個(gè)應(yīng)該有種似曾相識的感覺吧~其內(nèi)容如下所示:
上述內(nèi)容中第一行指出xml文檔版本以及編碼方式,第二行指出了主程序所在的包名,這樣在activity的android:name就直接設(shè)置成 .HelloWorld。如果我們 又添加一個(gè)activity類,但是該類處于包c(diǎn)nblogs.com.cn下,那么該activity添加到上述xml文件中時(shí)候android:name需要設(shè)置成 .cn.HelloWorld2。四到五行 則指出了版本信息,第六行的application節(jié)點(diǎn)有且僅有一個(gè),其icon屬性指出了應(yīng)用程序安裝完后的桌面圖標(biāo),這兒通過@符號引用res/drawable目錄下的 icon.png圖片。在application節(jié)點(diǎn)之間,是我們程序中activity類,所有的添加的activity類可以通過寫在該描述性文件中進(jìn)行注冊。從上圖中看出,該activity的i intent-filter屬性指出該activity類是默認(rèn)程序啟動(dòng)時(shí)候第一個(gè)啟動(dòng)的窗口。
² default.properties文件
該文件打開后,你會(huì)發(fā)現(xiàn)沒有注釋的文字只有一行,即指定了應(yīng)用程序針對的目標(biāo)設(shè)備以及相應(yīng)的API Level。
好了,從對一個(gè)簡單的Hello World項(xiàng)目的分析中,我們基本上就可以對Android項(xiàng)目結(jié)構(gòu)有個(gè)系統(tǒng)的認(rèn)識了。