
切換項目結構模式

Project模式的項目結構
我們將項目切換成Project模式,這就是真實的目錄結構。
1. .gradle和.idea
這兩個目下放置的都是Android Studio自動生成的一些文件,我們無須關系,也不要去手動編輯。
2. app
項目中的代碼、資源等內容幾乎都是放置在這個目錄下的。
3. build
它主要包含了一些在編譯時自動生成的文件,不需要過多關心。
4. gradle
這個目錄下包含了gradle wrapper的配置文件。
5. .gitignore
這個文件是用來指定的目錄或文件排除在版本控制之外的。
6. build.gradle
這是項目全局的gradle構建腳本,通常不需要修改。
7. gradle.properties
這個文件是全局的gradle配置文件,在這里配置的屬性將會影響到項目中所有的gradle編譯腳本。
8. gradlew和gradlew.bat
這兩個文件是用來在命令行界面執行gradle命令的,其中gradlew是在Linux或者Mac系統中使用的。gradlew.bathi在Windows系統中使用的。
9. HelloWorld.iml
iml文件是所有IntelliJ IDEA項目都會自動生成的一個文件(Android Studio是基于IntelliJ IDEA開發的),用于標識這是一個IntelliJ IDEA項目,我們不需要修改這個文件中的任何內容。
10. local.properties
這個文件用于指定本機中的Android SDK路徑的,通常內容都是自動生成的。
11. settings.gradle
這個文件用于指定項目中所有引入的模塊。由于HelloWorld項目中只有一個app模塊,因此該文件中也就只引入了app這一個模塊。通常情況下引入都是自動完成的。
這個項目的目錄介紹完畢了,除了app目錄之外的,大多數的文件和目錄都是自動生成的,app目錄才是我們的重點。

1. build
這個目錄和外層的build目錄類似,主要也是包含了一些編譯時自動生成的文件,不過它里面的內容會更多更復雜,我們不需要過多關心。
2. libs
如果你的項目中使用到了第三方jar包,就需要把這些jar包都放到libs目錄下,放在這個目錄下的jar包都會被自動添加到構建路徑里去。
3. androidTest
此處是用來編寫Android Test測試用例的,可以對項目進行一些自動化測試。
4. java
是放置我們所有java代碼的地方。
5. res
這個目錄下內容就有點多了,簡單說就是你在項目中使用到的所有圖片、布局、字符串等資源都要存放在這個目錄下。
* 圖片放在drawable目錄下
* 布局存放到layout目錄下
* 字符串放到values目錄下
6. AndroidMainfest.xml
這是你整個Android項目的配置文件,你在程序中定義的**所有四大組件都要在這個文件夾里注冊**,另外還可以在這個文件夾中給應用程序添加權限聲明。
7. test
此處是用來編寫Unit Test測試用例的,是對項目進行自動化測試的另一種方式。
8. .gitignore
這個文件用于將app模塊內的指定的目錄或文件排除在版本控制器之外,作用和外層的.gitignore文件類似。
9. app.iml
IntelliJ IDEA項目自動生成的文件,我們不需要關心或修改這個文件中的內容。
10. build.gradle
這個app模塊的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這個活動。代碼如下所示:
~~~
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項目的目錄結構以及基本的執行過程都分析完了。
- Android第一行代碼(第二版)筆記
- 第1章
- 1.1.3 Android應用開發特色
- 1.2搭建開發環境
- 1.3創建你的第一個Android項目
- 1.3.4分析你的第一個Android程序
- 1.3.5 詳解項目中的資源
- 1.3.6 詳解build.gradle文件
- 1.4掌握日志工具的使用
- 第2章
- 2.1活動是什么
- 2.2活動的基本用法
- Android開發規范
- Android Studio配置打包生成自定義文件名
- 開發問題記錄
- Android resource compilation failed( com.android.support沖突)
- 關于Android原生集成5+webview,監聽webview返回時,執行兩次onkey方法問題的解決
- java先關基礎鞏固
- URI與URL詳解