切換項目結構模式 Project模式的項目結構 我們將項目切換成Project模式,這就是真實的目錄結構。 1. .gradle和.idea 這兩個目下放置的都是Android Studio自動生成的一些文件,我們無須關係,也不要去手動編輯。 2. app 項目中的代碼、資源等內容幾乎都是放置在這個 ...
切換項目結構模式
Project模式的項目結構
我們將項目切換成Project模式,這就是真實的目錄結構。
- .gradle和.idea
這兩個目下放置的都是Android Studio自動生成的一些文件,我們無須關係,也不要去手動編輯。 - app
項目中的代碼、資源等內容幾乎都是放置在這個目錄下的。 - build
它主要包含了一些在編譯時自動生成的文件,不需要過多關心。 - gradle
這個目錄下包含了gradle wrapper的配置文件。 - .gitignore
這個文件是用來指定的目錄或文件排除在版本控制之外的。 - build.gradle
這是項目全局的gradle構建腳本,通常不需要修改。 - gradle.properties
這個文件是全局的gradle配置文件,在這裡配置的屬性將會影響到項目中所有的gradle編譯腳本。 - gradlew和gradlew.bat
這兩個文件是用來在命令行界面執行gradle命令的,其中gradlew是在Linux或者Mac系統中使用的。gradlew.bathi在Windows系統中使用的。 - HelloWorld.iml
iml文件是所有IntelliJ IDEA項目都會自動生成的一個文件(Android Studio是基於IntelliJ IDEA開發的),用於標識這是一個IntelliJ IDEA項目,我們不需要修改這個文件中的任何內容。 - local.properties
這個文件用於指定本機中的Android SDK路徑的,通常內容都是自動生成的。 - settings.gradle
這個文件用於指定項目中所有引入的模塊。由於HelloWorld項目中只有一個app模塊,因此該文件中也就只引入了app這一個模塊。通常情況下引入都是自動完成的。
這個項目的目錄介紹完畢了,除了app目錄之外的,大多數的文件和目錄都是自動生成的,app目錄才是我們的重點。
- build
這個目錄和外層的build目錄類似,主要也是包含了一些編譯時自動生成的文件,不過它裡面的內容會更多更複雜,我們不需要過多關心。 - libs
如果你的項目中使用到了第三方jar包,就需要把這些jar包都放到libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑里去。 - androidTest
此處是用來編寫Android Test測試用例的,可以對項目進行一些自動化測試。 - java
是放置我們所有java代碼的地方。 - res
這個目錄下內容就有點多了,簡單說就是你在項目中使用到的所有圖片、佈局、字元串等資源都要存放在這個目錄下。
- 圖片放在drawable目錄下
- 佈局存放到layout目錄下
- 字元串放到values目錄下
- AndroidMainfest.xml
這是你整個Android項目的配置文件,你在程式中定義的所有四大組件都要在這個文件夾里註冊,另外還可以在這個文件夾中給應用程式添加許可權聲明。 - test
此處是用來編寫Unit Test測試用例的,是對項目進行自動化測試的另一種方式。 - .gitignore
這個文件用於將app模塊內的指定的目錄或文件排除在版本控制器之外,作用和外層的.gitignore文件類似。 - app.iml
IntelliJ IDEA項目自動生成的文件,我們不需要關心或修改這個文件中的內容。 - build.gradle
這個app模塊的gradle構建腳本,在這個文件中會指定很多項目構建相關的配置。 - 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這個活動。代碼如下所示:
~~~
public class HelloWorldActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_world_activity);
}
}
~~~
首先我們可以看到,HelloWorldActivity是繼承自AppCompatActivity的,這是一種向下相容的Activity,可以將Activity在各個系統版本中增加的特性和功能最低相容到Android2.1系統。Activity是Android系統提供的一個活動的基類,我們項目中所有的活動都必須繼承它或者他的子類才能擁有活動的特性(AppCompatActivity是Activity的子類)。然後可以看到HelloWorldActivity中擁有一個onCreate()方法,這個方法是一個活動唄創建時必定要執行的方法。其中兩行代碼並沒有Hello World!字樣,那麼程式中顯示的Hello World!是在哪裡定義的呢?
其實Android程式的設計講究邏輯與視圖分離,因此是不推薦在活動中直接編寫界面的,更加通用的一種做法是,在佈局文件中編寫界面,然後在活動中引入進來。可以看到,在onCreate()方法的第二行調用了setContentView()方法,就是這個方法給當前的活動引入了一個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>
你看到就可以了,後面我們會對佈局進行詳細講解的。
這樣我們就將HelloWorld項目的目錄結構以及基本的執行過程都分析完了。
本文由博客一文多發平臺 OpenWrite 發佈!