引言
Eclipse+ADT或者是Android Studio可以幫助我們快速建立項目,然而也正是因為如此,造成了自學(xué)者不求甚解的現(xiàn)象。比如,你能詳細(xì)道出安卓項目中每個文件的作用及其相互包含關(guān)系嗎?你知道R.layout.main,R.id.button等等中的R怎么來的嗎?為了知其所以然,我們很有必要通過命令行工具去徒手開發(fā)一個安卓項目。
創(chuàng)建安卓項目
在命令行窗口輸入以下命令:
android create project -n PictureBrowse -t android-21 -p PictureBrowse -k com.golfer.PictureBrowse -a PictureBrowse
按下回車鍵后即可生成一個符合要求的安卓項目
提示:
1.-n(name的縮寫)用于指定項目名稱;-t用于指定安卓系統(tǒng)版本(詳解參考附錄);-p用于指定項目的保存路徑(如果沒有交代父目錄,則會新建文件夾PictureBrowse并保存在當(dāng)前文件夾下);-k指定包名(包名決定了src文件夾內(nèi)嵌的文件夾,比如上面的例子,src文件夾中就會包含com文件夾,com文件夾又包含golfer文件夾,golfer文件夾又包括PictureBrowse文件夾);-a指定Activity的名稱。
2.使用android命令的前提是Sdk目錄下的platform-tools及tools的路徑已經(jīng)添加到path環(huán)境變量中,否則cmd會報錯。
附:關(guān)于安卓系統(tǒng)版本
Sdk的安裝目錄下有一個子目錄:platforms,它里面包含了已配備的安卓系統(tǒng)版本,打開后會發(fā)現(xiàn)里面是命名為android-21、android-24之類的文件夾。如果沒有配備android-19版本,而你把Compile Sdk Version設(shè)置為android-21(命令行中通過-t選項設(shè)置),則編譯項目時會報錯。其實這里的19、21、24表示的是API的版本。
項目文件解析
項目創(chuàng)建完畢后,打開PictureBrowse文件夾,可以看到如下子文件夾:
src文件夾保存負(fù)責(zé)業(yè)務(wù)實現(xiàn)的java源碼
res(resources的縮寫)是資源文件夾,其中的values子夾保存著字符串資源(strings.xml)、顏色資源(colors.xml)等;layout子夾保存布局文件(剛創(chuàng)建時只有一個以Activity的名稱命名的xml布局文件(如例子為PictureBrowse.xml),但其實我們可以增加很多布局文件,比如我們在layout下增加main.xml,然后我們只需在負(fù)責(zé)主線程的java文件(即剛創(chuàng)建時就存在的java文件)中的onCreate函數(shù)中添加如下代碼:setContentView(R.layout.main),就可以把main.xml中的布局顯示出來);drawable-ldpi、drawable-mdpi、drawable-hdpi、drawable-xhdpi分別保存低、中、高、超高分辨率的圖片(圖片名稱需以字母開始,引用方式為:R.drawable-ldpi.圖片名,注意使用android studio創(chuàng)建的項目不區(qū)分ldpi、mdpi、hdpi、xhdpi)。
AndroidMainfest.xml用于控制應(yīng)用名稱、圖標(biāo)、訪問權(quán)限等整體屬性。
項目調(diào)試及運行
寫好代碼后,我們就可以進(jìn)行編譯以及生成apk并安裝了。這時候需要用到ant工具。ant命令有如下選項:
ant debug 生成用于調(diào)試的apk包
ant release 生成用于發(fā)布的apk包
ant install 將apk包安裝到Emulator模擬器(常用的有AVD((Android Virtual Devices)、Genymotion等)上
注意:
1.使用ant命令的條件:
下載了ant工具并且正確設(shè)置了JDK_HOME、ANT_HOME這兩個環(huán)境變量的值(它們的值分別是JDK、Ant的安裝路徑);
ant目錄下的bin的路徑已添加到環(huán)境變量path之中。
2.執(zhí)行ant命令時必須先切換至項目所在的目錄(比如例子中要切換至PictureBrowse目錄),這是因為我們必須指定對哪一個項目進(jìn)行生成,這里涉及到子夾build.xml的作用,此處省略)
R文件究竟是什么?
項目生成后,在項目目錄下會增加如下子目錄:bin、gen
其中g(shù)en文件夾就保存著R.java文件
R.java文件中定義了類R,里面包含很多內(nèi)部類(其實每種資源對應(yīng)一個內(nèi)部類),比如layout內(nèi)部類、strings內(nèi)部類、colors內(nèi)部類、id內(nèi)部類等。所以現(xiàn)在我們應(yīng)該可以理解R.layout.main、R.id.root是什么意思了吧。R文件相當(dāng)于資源字典,我們可以通過它引用各種資源,比如要在ImageView組件中顯示名為ic_launcher的圖片,就可以鍵入如下代碼:imageview.setImageResources(R.drawable-mdpi.ic_launcher)。這里還要指出的是R.id.root、R.drawable.ic_launcher的類型是int,因此面對以下代碼不要覺得很難理解:
int[] picture=new int[]{R.drawable.ic_launcher,R.drawable.image1,R.drawable.image2,}
初學(xué)者使用Android Studio時經(jīng)常遇到的一個問題是R文件缺失,造成缺失的原因往往是代碼復(fù)制時R文件沒有自動生成,解決辦法為:先Clean Project,再Rebuild Project.
這篇文章都是自己閱讀《Android瘋狂講義》前部分內(nèi)容后的體會,難免存在紕漏、不足乃至錯誤,期待與諸位共同交流!----陳光科(2016.09.13)