1. 程式人生 > 其它 >分析你的第一個Android程式

分析你的第一個Android程式

分析你的第一個Android程式

Android模式的專案結構

回到Android Studio當中,首先展開MyApplication專案,你會看到如圖(Android模式的專案結構)所示的專案結構。

切換專案結構模式

任何一個新建的專案都會預設使用Android模式的專案結構,但這並不是專案真實的目錄結構,而是被Android Studio轉換過的。這種專案結構簡潔明瞭,適合進行快速開發,但是對於新手來說可能並不易於理解。點選圖(Android模式的專案結構)當中的Android區域可以切換專案結構模式,如圖(切換專案結構模式)所示。

Project模式的專案結構

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

開始看到這麼多陌生的東西,你一定會感到有點頭暈吧。別擔心,我現在就對圖(Project模式的專案結構)中的內容進行一一講解,之後你再看這張圖就不會感到那麼吃力了。

.gradle和idea

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

app

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

build(沒有發現這個資料夾)

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

gradle

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

.gitignore

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

build.gradle

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

gradle.properties

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

gradlew和gradlew.bat

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

MyApplication.iml

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

local.properties

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

settings.gradle

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

app目錄下的結構

現在整個專案的外層目錄結構已經介紹完了。你會發現,除了app目錄之外,大多數的檔案和目錄都是自動生成的,我們並不需要進行修改。想必你已經猜到了,app目錄下的內容才是我們以後的工作重點,展開之後結構如圖(app目錄下的結構)所示。

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

build

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

libs

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

androidTest

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

java

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

res

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

AndroidManifest.xml

這是你整個Android專案的配置檔案,你在程式中定義的所有四大元件都需要在這個檔案裡註冊,另外還可以在這個檔案中給應用程式新增許可權宣告。由於這個檔案以後會經常用到,我們用到的時候再做詳細說明。

test

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

gitignore

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

app.iml

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

build.gradle

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

proguard-rules.pro

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

這樣整個專案的目錄結構就都介紹完了,如果你還不能完全理解的話也很正常,畢竟裡面有太多的東西你都還沒接觸過。不過不用擔心,這並不會影響到你後面的學習。等你學完整本書再回來看這個目錄結構圖時,你會覺得特別地清晰和簡單。

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

這段程式碼表示對MainActivity這個活動進行註冊,沒有在Androidmanifest.xml裡註冊的活動是不能使用的。其中intent-filter裡的兩行程式碼非常重要,

表示MainActivity是這個專案的主活動,在手機上點選應用圖示,首先啟動的就是這個活動。

那MainActivity具體又有什麼作用呢?我在介紹Android四大元件的時候說過,活動是 Android應用程式的門面,凡是在應用中你看得到的東西,都是放在活動中的。因此我們看到的介面,其實就是MainActivity這個活動。那我們快去看一下它的程式碼吧,開啟MainActivity,程式碼如下所示

public class MainActivity extends AppCompatActivity {

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

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

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

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

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