1. 程式人生 > 實用技巧 >Android開發--建立第一個Android專案

Android開發--建立第一個Android專案

------------恢復內容開始------------

1.3 建立你的第一個Android專案

  任何一個程式語言寫出的第一個程式毫無疑問都會是Hello World,這已經是自20世紀70年代一直流傳下來的傳統,在程式設計界已成為永恆的經典,那我們當然也不會搞例外了。

1.3.1 建立HelloWorld專案

  在Android Studio 的歡迎介面點選Start a new Android Studio project,會開啟一個建立新專案的介面。

  

  其中Application name表示應用名稱,此應用安裝到手機之後會在手機上顯示該名稱,這裡我們填入HelloWorld。Company Domain 表示公司域名,如果是個人開發者,沒有公司域名的話,那麼就像我一樣填example.com就可以了。Package name表示專案的包名,Android系統就是通過包名來區分不同應用程式的,因此包名一定要具有唯一性。Android Studio會根據應用名稱和公司域名來自動幫我們生成合適的包名,如果你不想使用預設生成的包名,也可以點選右側的Edit按鈕自行修改。最後,Project location 表示專案程式碼存放的位置,如果沒有特殊要求的話,這裡保持預設就可以了。

  Android Auto是Google推出的專為汽車所設計之Android功能,其需要連線手機使用。Android Auto旨在取代汽車製造商之原生車載系統來執行Android應用與服務並訪問與存取Android手機內容。

  google glass一般指Project Glass。谷歌眼鏡(Google Project Glass)是由谷歌公司於2012年4月釋出的一款“拓展現實”眼鏡,它具有和智慧手機一樣的功能,可以通過聲音控制拍照、視訊通話和辨明方向,以及上網衝浪、處理文字資訊和電子郵件等。

  接下來點選Next可以對專案的最低相容版本進行設定。

  

  可以看到,Android Studio 提供了很多種內建模板,不過由於我們才剛剛開始學習,用不著這麼多複雜的模板,這裡直接選擇Empty Activity來建立一個空的活動就可以了。

  繼續點選Next,可以給建立的活動和佈局命名。

其中,Activity Name表示活動的名字,這裡填入HelloWorldActivity,Layout Name表示佈局的命名,這裡填入hello_world_layout。然後點選Finish按鈕,並耐心等待一會兒,專案就會建立成功了

Generate Layout File生成佈局檔案

Backwards Compatibility(AppCompat)向後相容性(AppCompat)

1.3.2 啟動模擬器

  由於Android Studio 自動為我們生成了很多東西,你現在不需要編寫任何程式碼,HelloWorld專案就已經可以運行了。但是在此之前還必須要一個執行的載體,可以是一部Android手機,也可以是Android模擬器。這裡我們暫時先使用模擬器來執行程式。

那麼我們現在就來建立一個Android模擬器,觀察Android Studio頂部工具欄中的圖示。

其中,最左邊的按鈕就是用於建立和啟動模擬器的,點選該按鈕。

Hardware Profiles硬體配置檔案

可以看到,目前我們的模擬器列表中還是空的,點選Create Virtual Device按鈕就可以立刻開始建立了。

這裡有很多種裝置可供我們選擇,不僅能建立手機模擬器,還可以建立平板、手錶、電視等模擬器。

那麼我就選擇建立Nexus 5X這臺裝置的模擬器了,點選Next。

這裡可以選擇模擬器所使用的作業系統版本,毫無疑問,我們肯定要選擇最新的Android7.0系統。

(These images are recommended because they run the fastest and include support for Google APIs.

推薦使用這些圖片是因為它們執行速度最快,並且包含對googleapi的支援。)

這裡可以選擇模擬器所使用的作業系統版本,毫無疑問,我們肯定要選擇最新的Android7.0系統。

在這裡我們可以對模擬器的一些配置進行確認,比如說指定模擬器的名字、解析度、橫豎屏等資訊,如果沒有特殊需求的話,全部保持預設就可以了。點選Finish完成模擬器的建立。

show Advanced Settings顯示高階設定

可以看到,現在模擬器列表中已經存在一個建立好的模擬器裝置了,點選Actions欄目中最左邊的三角形按鈕即可啟動模擬器。模擬器會像手機一樣,有一個開機過程,啟動完成之後的介面。

1.3.3 執行HelloWorld

現在模擬器已經啟動起來了,那麼下面我們就開始講HelloWorld專案執行到模擬器上。觀察Android Studio頂部工具欄中的圖示。其中左邊的錘子按鈕是用來編譯專案的,中間的下拉列表是用來選擇執行哪一個專案的,通常app就是當前的主專案,右邊的三角形按鈕是用來執行專案的。

現在點選右邊的執行按鈕,會彈出一個選擇執行裝置的對話方塊。

可以看到,我們剛剛建立的模擬器現在是線上的,點選OK按鈕,稍微等待一會兒,HelloWorld專案就會執行到模擬器上了。

Hello World專案執行成功!並且你會發現,模擬器上已經安裝上HelloWorld這個應用了。開啟啟動器列表。

這個時候你可能會說我坑你了,說好的第一行程式碼呢?怎麼一行還沒寫,專案就已經執行起來了?這個只能說是因為Android Studio太智慧了,已經幫我們把一些簡答內容都自動生成了。

1.3.4 分析你的第一個Android程式

回到Android Studio當中,首先展開HelloWorld專案。任何一個新建的專案都會預設使用Android模式的專案結構,但這並不是專案真實的目錄結構,而是被Android Studio轉換過的。這種專案結構簡潔明瞭,適合進行快速開發,但是對於新手來說可能並不易於理解。

這裡我們將專案結構模式切換成Project,這就是專案真實的目錄結構了。

一開始看到這麼多陌生的東西,你一定會感到有點頭暈吧。

1. .gradle和.idea

這兩個目錄下放置的都是Android Studio自動生成的一些檔案,我們無須關心,也不要去手動編輯。

2. app

專案中的程式碼、資源等內容幾乎都是放置在這個目錄下的,我們後面的開發工作也基本都是在這個目錄下進行的,待會兒還會對這個目錄單獨展開進行講解。

3. build

這個目錄你也不需要過多關心,它主要包含了一些在編譯時自動生成的檔案。

4.gradle

這個目錄下包含了gradle wrapper的配置檔案,使用gradle wrapper的方式不需要提前將gradle下載好,而是會自動根據本地的快取情況決定是否需要聯網下載gradle。Android Studio預設沒有啟用gradle wrapper的方式,如果需要開啟,可以點選Android Studio導航欄→File→Settings→Build,Execution,Deployment→Gradle,進行配置更改。

5. .gitignore

這個檔案是用來將指定的目錄或檔案排除在版本控制之外的。

6. build.gradle

這是專案全域性的gradle構建指令碼,通常這個檔案中的內容是不需要修改的。

7. gradle.properties

這個檔案是全域性的gradle配置檔案,在這裡配置的屬性將會影響到專案中所有的gradle編譯指令碼。

8. gradlew和gradlew.bat

這兩個檔案是用來在命令列介面中執行gradle命令的,其中gradlew是在Linux或Mac系統中使用的,gradlew.bat是在Windows系統中使用的。

9.HelloWorld.iml

iml檔案是所有IntelliJ IDEA專案都會自動生成的一個檔案,用於標識這個一個IntelliJ IDEA專案,我們不需要修改這個檔案中的任何內容。

10.local.properties

這個檔案用於指定本機中的Android SDK路徑,通常內容都是自動生成的,我們並不需要修改。除非你本機中的Android SDK位置發生了變化,那麼就將這個檔案中的路徑改成新的位置即可。

11. settings.gradle

這個檔案用於指定專案中所有引入的模組。由於HelloWorld專案中就只有一個app模組,因此該檔案中也就只引入了app這一個模組。通常情況下模組的引入都是自動完成的,需要我們手動去修改這個檔案的場景可能比較少。

那麼下面我們就來對app目錄下的內容進行更為詳細的分析。

1.build

這個目錄的和外層的build目錄類似,主要也是包含了一些在編譯時自動生成的檔案,不過它裡面的內容會更多更雜,我們不需要過多關心。

2.libs

如果你的專案中使用到了第三方jar包,就需要把這些jar包都放在libs目錄下,放在這個目錄下的jar包都會被自動新增到構建路徑裡去。

3. androidTest

此處是用來編寫AndroidTest測試用例的,可以對專案進行一些自動化測試。

4.java

毫無疑問,java目錄是放置我們所有Java程式碼的地方,展開該目錄,你將看到我們剛才建立的HelloWorldActivity檔案就在裡面。

5.res

這個目錄下的內容就有點多了。簡單點說,就是你在專案中使用到的所有圖片、佈局、字串等資源都要存放在這個目錄下。當然這個目錄下還有很多子目錄,圖片放在drawable目錄下,佈局放在layout目錄下,字串放在values目錄下,所以你不用擔心會把整個res目錄弄得亂糟糟的。

6.AndroidManifest.xml

這是你整個Android專案的配置檔案,你在程式中定義的所有四大元件都需要在這個檔案裡註冊,另外還可以在這個檔案中給應用程式新增許可權宣告。

7.test

此處是用來編寫Unit Test測試用例的,是對專案進行自動加測試的另一種方式。

8. .gitignore

這個檔案用於將app模組內的指定的目錄或檔案排除在版本控制之外,作用和外層的.gitignore檔案類似。

9. app.iml

IntelliJ IDEA專案自動生成的檔案,我們不需要關心或修改這個檔案中的內容。

10. build.gradle

這是app模組的gradle構建指令碼,這個檔案中會指定很多專案構建相關的配置,我們稍後將會詳細分析gradle構建指令碼中的具體內容。

11. proguard-rules.pro

這個檔案用於指定專案程式碼的混淆規則,當代碼開發完成後開啟安裝包檔案,如果不希望程式碼被別人破解,通常會將程式碼進行混淆,從而讓破解者難以閱讀。

這樣整個專案的目錄結構就都介紹完了,如果你還不能完全理解的話也很正常,畢竟裡面有太多的東西你都還沒接觸過。

接下來我們一起分析一下HelloWorld專案究竟是怎麼執行起來的吧。首先開啟AndroidManifest.xml檔案,從中可以找到如下程式碼:

 <activity android:name=".HelloWorldActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>

這段程式碼表示對HelloWorldActivity這個活動進行註冊,沒有在AndroidManifest.xml裡註冊的活動是不能使用的。其中intent-filter裡的兩行程式碼非常重要,<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />表示HelloWorldActivity是這個專案的主活動,在手機上點選應用圖示,首先啟動的就是這個活動。

那HelloWorldActivity具體又有什麼作用呢?我在介紹Android四大元件的時候說過,活動是Android應用程式的門面,凡是在應用中你看得到的東西,都是放在活動中的。看一下HelloWorldActivity這個活動它的程式碼,開啟HelloWorldActivity。

public class HelloWorldActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_hello_world);
        
    }
}

首先我們可以看到,HelloWorldActivity是繼承自AppCompatActivity的,這是一種向下相容的Activity,可以將Activity在各個系統版本中增加的特性和功能最低相容Android2.1系統。Activity是Android系統提供的一個活動基類,我們專案中所有的活動都必須繼承它或者它的子類才能擁有活動的特性(AppCompatActivity是Activity的子類)。然後可以看到HelloWorldActivity中有一個onCreate()方法,這個方法是一個活動被建立時必定要執行的方法,其中只有兩行程式碼,並且沒有HelloWorld!的字樣。那麼app中的顯示的Hello World!是在哪裡定義的呢?

其實Android程式的設計講究邏輯和檢視分離,因此是不推薦在活動中直接編寫介面的,更加通用的一種做法是,在佈局檔案中編寫介面,然後在活動中引入進來。可以看到,在onCreate()方法的第二行呼叫了setContentView()方法,就是這個方法給當前的活動引入了一個hello_world_layout佈局,那Hello World!一定就是在這裡定義的了!我們快開啟這個檔案看一看。

佈局檔案都是定義在res/layout目錄下的,當你展開layout目錄,你會看到hello_world_layout.xml這個檔案。開啟該檔案並切換到Text檢視,程式碼如下

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_hello_world"
    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.HelloWorldActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

現在還看不懂?沒關係,後面我會對佈局進行詳細講解的,你現在只需要看到上面程式碼中有一個TextView,這是Android系統提供的一個控制元件,用於在佈局中顯示文字的。然後你終於在TextView中看到了Hello World!的字樣!哈哈!終於找到了,原來就是通過android:text="Hello World!"這句程式碼定義的。

這樣我們就將HelloWorld專案的目錄結構以及基本的執行過程都分析完了,相信你對Android專案已經有一個初步的認識,下一小節中我們就來學習一下專案中所包含的資源。

buildscript中的宣告是gradle指令碼自身需要使用的資源。可以宣告的資源包括依賴項、第三方外掛、maven倉庫地址等。

而在build.gradle檔案中直接宣告的依賴項、倉庫地址等資訊是專案自身需要的資源。

1.3.5 詳解專案中的資源

如果你展開res目錄看一下,其實裡面的東西還是挺多的,很容易讓人看得眼花繚亂

drawable開頭的資料夾都是用來放圖片的,

所有以mipmap開頭的資料夾都是用來放應用圖示的,

所有以values開發的資料夾都是用來放字串、樣式、顏色等配置的

layout資料夾是用來放佈局檔案的。

之所以有這麼多mipmap開頭的資料夾,其實主要是為了讓程式能夠更好地相容各種裝置。drawable資料夾也是相同的道理,雖然Android Studio沒有幫我們自動生成,但是我們應該自己建立drawable-hdpi、drawable-xhdpi、drawable-xxhdpi等資料夾。在製作程式的時候最好能夠給同一張圖片提供幾個不同解析度的版本,分別放在這些資料夾下,然後當程式執行的時候,會自動根據當前執行裝置解析度的高低選擇載入哪個資料夾下的圖片。當然這只是理想情況,更多的時候美工只會提供給我們一份圖片,這時你就把所有圖片都放在drawable-xxhdpi資料夾下就好了。

知道了res目錄下每個資料夾的含義,我們再來看一下如何去使用這些資源吧。

開啟 res/values/strings.xml檔案

<resources>
    <string name="app_name">Hello World</string>
</resources>

可以看到,這裡定義了一個應用程式名的字串,我們有以下兩種方式來引用它。

在程式碼中通過R.string.hello_world可以獲得該字串的引用。

在XML中通過@string/hello_world可以獲得該字串的引用。

基本的語法就是上面這兩種方式,其中string部分是可以替換的,

引用圖片資源換成drawable

應用圖示替換成mipmap

佈局檔案替換成layout,以此類推。

開啟AndroidManifest.xml檔案

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
    </application>

其中,HelloWorld專案的應用圖示就是通過android:icon屬性來指定的,應用的名稱則是通過android:label屬性指定的。可以看到,這裡對資源引用的方式正是我們剛剛學過的在XML中引用資源的語法。

1.3.6 詳解build.gradle檔案

不同於Eclipse,Android Studio是採用Gradle來構建專案的。Gradle是一個非常先進的專案構建工具,它使用了一種基於Groovy的領域特定語言(DSL)來宣告專案設定,摒棄了傳統基於XML(如Ant和Maven)的各種繁瑣配置。

HelloWorld專案中有兩個build.gradle檔案,一個是在最外層目錄下的,一個是在app目錄下的。這兩個檔案對構建Android Studio專案都起到了至關重要的作用,下面我們就來對兩個檔案中的內容進行詳細的分析。

1、buildscript裡是gradle指令碼執行所需依賴,分別是對應的maven庫和外掛
2、allprojects裡是專案本身需要的依賴,比如我現在要依賴我自己maven庫的toastutils庫,那麼我應該將maven {url 'https://dl.bintray.com/calvinning/maven'}寫在這裡,而不是buildscript中,不然找不到。

------------恢復內容結束------------