1.3.4分析你的第一個Android程序——Android第一行代碼(第二版)筆記

file

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

file

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

我們將項(xiàng)目切換成Project模式,這就是真實(shí)的目錄結(jié)構(gòu)。

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

這個項(xiàng)目的目錄介紹完畢了,除了app目錄之外的,大多數(shù)的文件和目錄都是自動生成的,app目錄才是我們的重點(diǎn)。

file
  1. build
    這個目錄和外層的build目錄類似,主要也是包含了一些編譯時自動生成的文件,不過它里面的內(nèi)容會更多更復(fù)雜,我們不需要過多關(guān)心。
  2. libs
    如果你的項(xiàng)目中使用到了第三方j(luò)ar包,就需要把這些jar包都放到libs目錄下,放在這個目錄下的jar包都會被自動添加到構(gòu)建路徑里去。
  3. androidTest
    此處是用來編寫Android Test測試用例的,可以對項(xiàng)目進(jìn)行一些自動化測試。
  4. java
    是放置我們所有java代碼的地方。
  5. res
    這個目錄下內(nèi)容就有點(diǎn)多了,簡單說就是你在項(xiàng)目中使用到的所有圖片、布局、字符串等資源都要存放在這個目錄下。
  • 圖片放在drawable目錄下
  • 布局存放到layout目錄下
  • 字符串放到values目錄下
  1. AndroidMainfest.xml
    這是你整個Android項(xiàng)目的配置文件,你在程序中定義的所有四大組件都要在這個文件夾里注冊,另外還可以在這個文件夾中給應(yīng)用程序添加權(quán)限聲明。
  2. test
    此處是用來編寫Unit Test測試用例的,是對項(xiàng)目進(jìn)行自動化測試的另一種方式。
  3. .gitignore
    這個文件用于將app模塊內(nèi)的指定的目錄或文件排除在版本控制器之外,作用和外層的.gitignore文件類似。
  4. app.iml
    IntelliJ IDEA項(xiàng)目自動生成的文件,我們不需要關(guān)心或修改這個文件中的內(nèi)容。
  5. build.gradle
    這個app模塊的gradle構(gòu)建腳本,在這個文件中會指定很多項(xiàng)目構(gòu)建相關(guān)的配置。
  6. 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ā)布!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容