
切換項(xiàng)目結(jié)構(gòu)模式

Project模式的項(xiàng)目結(jié)構(gòu)
我們將項(xiàng)目切換成Project模式,這就是真實(shí)的目錄結(jié)構(gòu)。
- .gradle和.idea
這兩個目下放置的都是Android Studio自動生成的一些文件,我們無須關(guān)系,也不要去手動編輯。 - app
項(xiàng)目中的代碼、資源等內(nèi)容幾乎都是放置在這個目錄下的。 - build
它主要包含了一些在編譯時自動生成的文件,不需要過多關(guān)心。 - gradle
這個目錄下包含了gradle wrapper的配置文件。 - .gitignore
這個文件是用來指定的目錄或文件排除在版本控制之外的。 - build.gradle
這是項(xiàng)目全局的gradle構(gòu)建腳本,通常不需要修改。 - gradle.properties
這個文件是全局的gradle配置文件,在這里配置的屬性將會影響到項(xiàng)目中所有的gradle編譯腳本。 - gradlew和gradlew.bat
這兩個文件是用來在命令行界面執(zhí)行g(shù)radle命令的,其中g(shù)radlew是在Linux或者M(jìn)ac系統(tǒng)中使用的。gradlew.bathi在Windows系統(tǒng)中使用的。 - HelloWorld.iml
iml文件是所有IntelliJ IDEA項(xiàng)目都會自動生成的一個文件(Android Studio是基于IntelliJ IDEA開發(fā)的),用于標(biāo)識這是一個IntelliJ IDEA項(xiàng)目,我們不需要修改這個文件中的任何內(nèi)容。 - local.properties
這個文件用于指定本機(jī)中的Android SDK路徑的,通常內(nèi)容都是自動生成的。 - settings.gradle
這個文件用于指定項(xiàng)目中所有引入的模塊。由于HelloWorld項(xiàng)目中只有一個app模塊,因此該文件中也就只引入了app這一個模塊。通常情況下引入都是自動完成的。
這個項(xiàng)目的目錄介紹完畢了,除了app目錄之外的,大多數(shù)的文件和目錄都是自動生成的,app目錄才是我們的重點(diǎn)。

- build
這個目錄和外層的build目錄類似,主要也是包含了一些編譯時自動生成的文件,不過它里面的內(nèi)容會更多更復(fù)雜,我們不需要過多關(guān)心。 - libs
如果你的項(xiàng)目中使用到了第三方j(luò)ar包,就需要把這些jar包都放到libs目錄下,放在這個目錄下的jar包都會被自動添加到構(gòu)建路徑里去。 - androidTest
此處是用來編寫Android Test測試用例的,可以對項(xiàng)目進(jìn)行一些自動化測試。 - java
是放置我們所有java代碼的地方。 - res
這個目錄下內(nèi)容就有點(diǎn)多了,簡單說就是你在項(xiàng)目中使用到的所有圖片、布局、字符串等資源都要存放在這個目錄下。
- 圖片放在drawable目錄下
- 布局存放到layout目錄下
- 字符串放到values目錄下
- AndroidMainfest.xml
這是你整個Android項(xiàng)目的配置文件,你在程序中定義的所有四大組件都要在這個文件夾里注冊,另外還可以在這個文件夾中給應(yīng)用程序添加權(quán)限聲明。 - test
此處是用來編寫Unit Test測試用例的,是對項(xiàng)目進(jìn)行自動化測試的另一種方式。 - .gitignore
這個文件用于將app模塊內(nèi)的指定的目錄或文件排除在版本控制器之外,作用和外層的.gitignore文件類似。 - app.iml
IntelliJ IDEA項(xiàng)目自動生成的文件,我們不需要關(guān)心或修改這個文件中的內(nèi)容。 - build.gradle
這個app模塊的gradle構(gòu)建腳本,在這個文件中會指定很多項(xiàng)目構(gòu)建相關(guān)的配置。 - proguard-rules.pro
這個文件用于指定項(xiàng)目代碼的混淆規(guī)格,當(dāng)代碼開發(fā)完成后打包成安裝包文件,如果不希望代碼被別人破解,通常會將代碼進(jìn)行混淆,從而讓破解者難以閱讀。
這樣整個項(xiàng)目的目錄結(jié)構(gòu)就介紹完了。
接下來我們一起分析一下HelloWorld項(xiàng)目究竟是怎么運(yùn)行起來的吧。首先打開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>
這段代碼標(biāo)示對HelloWorldActivity這個活動進(jìn)行注冊,沒有在AndroidManifest.xml里注冊的活動是不能使用的。
其中intent-filter里的兩行代碼非常重要,
<action android:name="android.intent.action.MAIN" />和<category android:name="android.intent.category.LAUNCHER" />標(biāo)示HelloWorldActivity是這個項(xiàng)目的主活動,在手機(jī)上點(diǎn)擊應(yīng)用圖標(biāo),首先啟動的就是這個活動。
我們來看下HelloWorldActivity這個活動。代碼如下所示:
public class HelloWorldActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_activity);
}
}
首先我們可以看到,HelloWorldActivity是繼承自AppCompatActivity的,這是一種向下兼容的Activity,可以將Activity在各個系統(tǒng)版本中增加的特性和功能最低兼容到Android2.1系統(tǒng)。Activity是Android系統(tǒng)提供的一個活動的基類,我們項(xiàng)目中所有的活動都必須繼承它或者他的子類才能擁有活動的特性(AppCompatActivity是Activity的子類)。然后可以看到HelloWorldActivity中擁有一個onCreate()方法,這個方法是一個活動唄創(chuàng)建時必定要執(zhí)行的方法。其中兩行代碼并沒有Hello World!字樣,那么程序中顯示的Hello World!是在哪里定義的呢?
其實(shí)Android程序的設(shè)計講究邏輯與視圖分離,因此是不推薦在活動中直接編寫界面的,更加通用的一種做法是,在布局文件中編寫界面,然后在活動中引入進(jìn)來??梢钥吹?,在onCreate()方法的第二行調(diào)用了setContentView()方法,就是這個方法給當(dāng)前的活動引入了一個hello_world_layout布局。
布局文件都定義在res/layout目錄下的,打開hello_world_layout.xml文件并切換到Test視圖,代碼如下所示
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HelloWorldActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
你看到就可以了,后面我們會對布局進(jìn)行詳細(xì)講解的。
這樣我們就將HelloWorld項(xiàng)目的目錄結(jié)構(gòu)以及基本的執(zhí)行過程都分析完了。
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!