- Android Studio開發實戰:從零基礎到App上線 (移動開發叢書)
- 歐陽燊
- 2183字
- 2020-11-28 17:31:36
1.4 App的工程結構
上一節我們在模擬器上成功地運行了第一個App(HelloWolrd),接下來好好研究一下它的工程結構。每個App的工程結構都差不多,只要掌握了基本結構,后面開發起來就會得心應手。
1.4.1 工程目錄說明
AndroidStudio的工程創建分兩個層級:第一個層級通過菜單File→New→NewProject創建,這里的新項目是指新的工作空間,對應Eclipse的workspace;第二個層級通過菜單File→New→NewModule創建,這里的新模塊是指一個單獨的App工程,對應Eclipse的project。第一次運行AndroidStudio都是選擇NewProject,表示先創建一個工作空間;后面還想創建新的App工程時,只需選擇NewModule,表示在當前工作空間下新建一個App工程。
例如,圖1-27是之前HelloWorld工程的目錄結構圖。

圖1-27 HelloWorld工程的目錄結構圖
從結構圖中可以看到,該工程下面有兩個目錄:一個是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文件中補充文字注釋,方便讀者更好地理解每個參數的用途。
apply plugin:'com.android.application' android { // 指定編譯用的SDK版本號,如25表示使用Android 7.1編譯 compileSdkVersion 25 // 指定編譯工具的版本號。這里的頭兩位數字必須與compileSdkVersion保持一致,具體的版本號 可在sdk安裝目錄的sdk\build-tools下找到 buildToolsVersion "25.0.2" defaultConfig { // 指定該模塊的應用編號,即App的包名。該參數為自動生成,無須修改 applicationId "com.example.helloworld" // 指定App適合運行的最小SDK版本號,如15表示至少要在Android 4.0.3上運行 minSdkVersion 15 // 指定目標設備的SDK版本號,即該App最希望在哪個版本的Android上運行 targetSdkVersion 25 // 指定App的應用版本號 versionCode 1 // 指定App的應用版本名稱 versionName "1.0" } buildTypes { release { // 指定是否開啟代碼混淆功能。true表示開啟混淆,false表示無須混淆。 minifyEnabled false // 指定代碼混淆規則文件的文件名 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } // 指定App編譯的依賴信息 dependencies { // 指定引用jar包的路徑 compile fileTree(dir:'libs', include:['*.jar']) // 指定單元測試編譯用的junit版本號 testCompile 'junit:junit:4.12' // 指定編譯Android的高版本支持庫,如AppCompatActivity必須指定編譯appcompat-v7庫 compile 'com.android.support:appcompat-v7:25.1.0' }
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.xml和代碼文件MainActivity.java。下面先看布局文件activity.xml的內容:
<? xml version="1.0" encoding="utf-8"? > <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.helloworld.MainActivity"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World! " /> </RelativeLayout>
這里可以看到xml文件中只有兩個節點,分別是RelativeLayout和TextView。再仔細看看,有沒有發現我們熟悉的Hello World?沒錯,模擬器App界面顯示的Hello World就來自于這里,也就是TextView控件的android:text屬性值。可以把這里的Hello World改為其他文字,比如“你好、世界”或I Love Android,改完保存文件后再依次選擇菜單Run→Run 'app',看看App界面上的文字是不是變成新的了?
當然,我們的目標并不僅限于在布局文件中修改文字,還要能夠在代碼中修改文字的內容。再次打開代碼文件MainActivity.java,看看里面有什么內容。該java文件中MainActivity類的內容如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
這里可以看出,MainActivity.java的代碼內容很簡單,只有一個MainActivity類,該類下面只有一個函數onCreate。注意onCreate內部的setContentView方法直接引用了布局文件的名字activity_main,該方法的意思是往App界面填充activity.xml的布局內容。現在我們要在這里改動改動,加點“綠葉紅花”讓它好看一些。首先打開activity.xml,在TextView節點下方補充一行android:id="@+id/tv_hello";然后回到MainActivity.java,在setContentView方法下面補充如下幾行代碼:
//獲取名字為tv_hello的TextView控件 TextView tv_hello = (TextView) findViewById(R.id.tv_hello); //給TextView控件設置文字內容 tv_hello.setText("今天天氣真熱啊,火辣辣的"); //給TextView控件設置文字顏色 tv_hello.setTextColor(Color.RED); //給TextView控件設置文字大小 tv_hello.setTextSize(30);
保存文件后依次選擇菜單Run→Run 'app',模擬器上的App界面就變成了如圖1-28所示的樣子。

圖1-28 修改文字后的HelloWorld界面
現在不但文字內容改變了,文字顏色和字體大小也發生了變化。怎么樣,是不是很有成就感呢?好的開始是成功的一半,現在我們初步學會了在代碼中操作控件,下一章進一步學習在App界面上人機交互。
- Mastering OpenCV Android Application Programming
- Learning Chef
- Offer來了:Java面試核心知識點精講(原理篇)
- C語言程序設計
- Java Web開發技術教程
- The DevOps 2.4 Toolkit
- Python機器學習經典實例
- PhpStorm Cookbook
- Mastering Apache Spark 2.x(Second Edition)
- Learning PHP 7
- Orchestrating Docker
- .NET 4.0面向對象編程漫談:應用篇
- Mastering JavaScript
- Mastering Bootstrap 4
- Python高性能編程(第2版)