- Android Studio開發實戰:從零基礎到App上線(第2版)
- 歐陽燊
- 1775字
- 2019-12-06 12:07:13
1.4 App的工程結構
上一節在模擬器上成功地運行了第一個App(Hello World),接下來好好研究一下它的工程結構。每個App的工程結構都差不多,只要掌握了基本結構,后面開發起來就會得心應手。
1.4.1 工程目錄說明
Android Studio的工程創建分兩個層級:第一個層級通過菜單File→New→New Project創建,這里的新項目是指新的工作空間,對應Eclipse的workspace;第二個層級通過菜單File→New→New Module創建,這里的新模塊是指一個單獨的App工程,對應Eclipse的project。第一次運行Android Studio都是選擇New Project,表示先創建一個工作空間;后面還想創建新的App工程時,只需選擇New Module,表示在當前工作空間下新建一個App工程。
例如,圖1-26是之前HelloWorld工程的目錄結構圖。

圖1-26 Hello World工程的目錄結構圖
從結構圖中可以看到,該工程下面有兩個目錄:一個是app,另一個是Gradle Scripts。其中,app下面又有3個子目錄,功能說明如下:
(1)manifests子目錄,下面只有一個xml文件,即AndroidManifest.xml,是App的運行配置文件。
(2)java子目錄,下面有3個com.example.hellorworld包,其中第一個包存放的是App工程的java源代碼,后面兩個包存放的是測試用的Java代碼。
(3)res子目錄,存放的是App工程的資源文件。res子目錄下又有4個子目錄:
- drawable目錄存放的是圖形描述文件與用戶圖片。
- layout目錄存放的是App頁面的布局文件。
- mipmap目錄存放的是啟動圖標。
- values目錄存放的是一些常量定義文件,比如字符串常量strings.xml、像素常量dimens.xml、顏色常量colors.xml、樣式風格定義styles.xml等。
Gradle Scripts下面主要是工程的編譯配置文件,主要有:
(1)build.gradle,該文件分為項目級與模塊級兩種,用于描述App工程的編譯規則。
(2)proguard-rules.pro,該文件用于描述java文件的代碼混淆規則。
(3)gradle.properties,該文件用于配置編譯工程的命令行參數,一般無須改動。
(4)settings.gradle,配置哪些模塊在一起編譯。初始內容為include ':app',表示只編譯App模塊。
(5)local.properties,項目的本地配置,一般無須改動。該文件是在工程編譯時自動生成的,用于描述開發者本機的環境配置,比如SDK的本地路徑、NDK的本地路徑等。
1.4.2 編譯配置文件build.gradle
項目級別的build.gradle一般無須改動,讀者只需關注模塊級別的build.gradle。下面在初始的build.gradle文件中補充文字注釋,方便讀者更好地理解每個參數的用途。

1.4.3 App運行配置AndroidManifest.xml
AndroidManifest.xml用于指定App內部的運行配置,是一個XML描述文件,根節點為manifest,根節點的package指定了該App的包名。manifest下面又有若干子節點,分別說明如下:
(1)uses-sdk,該節點有兩個屬性:android:minSdkVersion和android:targetSdkVersion。這兩個屬性是早期Eclipse開發App時使用的,現在這兩個字段改成放到build.gradle文件中,故而Android Studio不配置uses-sdk也沒有關系。
(2)uses-permission,該節點用于聲明App運行過程中需要的權限名稱。例如,訪問網絡需要上網權限,拍照需要攝像頭權限,定位需要定位權限等。
(3)application,該節點用于指定App的自身屬性,默認的屬性說明如下:
- android:allowBackup,用于指定是否允許備份,開發階段設置為true,上線時設置為false。
- android:icon,用于指定該App在手機屏幕上顯示的圖標。
- android:label,用于指定該App在手機屏幕上顯示的名稱。
- android:supportsRtl,設置為true表示支持阿拉伯語/波斯語這種從右往左的文字排列順序。
- android:theme,用于指定該App的顯示風格。
application節點下還有幾個子節點,比如活動activity、服務service、廣播接收器receiver、內容提供器provider等,這些子節點的詳細屬性會在后續章節詳細說明。
1.4.4 在代碼中操縱控件
在一開始創建Hello World工程時,Android Studio默認打開了兩個文件,分別是布局文件activity_main.xml和代碼文件MainActivity.java。下面先看布局文件activity_main.xml的內容:

這里可以看到xml文件中只有兩個節點,分別是RelativeLayout和TextView。再仔細看看,有沒有發現熟悉的“Hello World”?沒錯,模擬器App界面顯示的Hello World就來自于這里,也就是TextView控件的android:text屬性值。可以把這里的Hello World改為其他文字,比如“你好、世界”或I Love Android,改完保存文件后再依次選擇菜單Run→Run 'app',看看App界面上的文字是不是變成新的了?
當然,我們的目標并不僅限于在布局文件中修改文字,還要能夠在代碼中修改文字的內容。再次打開代碼文件MainActivity.java,看看里面有什么內容。該java文件中MainActivity類的內容如下:

這里可以看出,MainActivity.java的代碼內容很簡單,只有一個MainActivity類,該類下面只有一個函數onCreate。注意onCreate內部的setContentView方法直接引用了布局文件的名字activity_main,該方法的意思是往App界面填充activity_main.xml的布局內容。現在我們要在這里改動改動,加點“綠葉紅花”讓它好看一些。首先打開activity_main.xml,在TextView節點下方補充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面補充幾行代碼,具體如下:


圖1-27 修改文字后的HelloWorld界面
保存文件后依次選擇菜單Run→Run 'app',模擬器上的App界面就變成了如圖1-27所示的樣子。
現在不但文字內容改變了,文字顏色和字體大小也發生了變化。怎么樣,是不是很有成就感呢?好的開始是成功的一半,現在大家初步學會了在代碼中操作控件,下一章進一步學習在App界面上人機交互。