項(xiàng)目結(jié)構(gòu)概述

項(xiàng)目結(jié)構(gòu)示意圖
2.1.png
2.2.png
結(jié)構(gòu)簡單分析
  • .gradle .idea 目錄: 自動配置的文件

  • app 目錄:代碼、資源等內(nèi)容都在這個(gè)文件夾下

    • build 目錄:編譯時(shí)自動生成

    • libs目錄:存放第三方j(luò)ar包

    • src目錄:源碼目錄

      • androidTest目錄:自動化測試用的

      • main目錄:工作目錄,通常只管這個(gè)目錄下的文件

        • java目錄:寫代碼的目錄,activitivity.java文件就在里面

        • res目錄:放資源的目錄

          • drawable放圖片

          • layout放布局

          • values放字符串

          • mipmap放應(yīng)用圖標(biāo)(h,m,xh等對應(yīng)不同分辨率)

        • AndroidManifest.xml文件:整個(gè)項(xiàng)目的配置文件,四大組件都在這注冊,添加權(quán)限聲明等

      • test目錄:Unit Test測試使用

      • .gitnore文件:版本控制使用

      • app.iml文件:AS自動生成的

      • build.gradle文件:gradle腳本構(gòu)建文件

      • proguard-rules.pro文件:代碼混淆用的,防止app被破解

    • gradle目錄:包含gradle wrapper的配置文件

    • .gitgnore 文件:版本控制相關(guān)

    • build.gradle文件:構(gòu)建gradle的全局腳本文件

    • gradle.properties文件:配置gradle的全局配置文件

    • gradlew gradlew.bat文件:執(zhí)行gradle命令的文件,bat文件是windows系統(tǒng)用的

    • HelloWorld.iml文件:別管,AS自動生成的文件

    • local.properties文件:指定本機(jī)Android SDK路徑,通常自動生成

    • settings.gradle文件:指定引入的模塊

    主要文件分析
    AndroidManifest.xml
    <activity android:name=".MainActivity">
      <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
     </activity>

     //表示對MainActivity這個(gè)活動進(jìn)行注冊,沒注冊不能用。其中
     <action android:name="android.intent.action.MAIN" />
     和
     <category android:name="android.intent.category.LAUNCHER" />
     //表示這個(gè)活動是項(xiàng)目的主活動,也是最先啟動的活動。
資源引用

布局文件通過R.layout.activity_main來引用,那其他資源如何引用呢?比如HelloWorld這個(gè)字符串,它的資源文件是strings.xml

    <resources>
      <string name="app_name">HelloWorld</string>
    </resources></pre>
  • 代碼中引用:R.string.app_name

  • xml中引用:@string/app_name

同樣的,如果是圖片資源就將string替換為drawable,圖標(biāo)則是mipmap,布局文件就是layout

androidStudio 配置文件分析
外層build.gradle文件
   //這個(gè)文件是自動生成的
     buildscript {
      repositories {
       google()
       jcenter()
      }
      dependencies {
       classpath 'com.android.tools.build:gradle:3.5.3'
      }
     }
     ?
     allprojects {
      repositories {
       google()
       jcenter()
      }
     }
   ```  ?
     //repositories{}中聲明了jcenter(),這是一個(gè)代碼托管倉庫,聲明了這個(gè)就能引用jcenter的開源項(xiàng)目了。還聲明了goole(),這是google自有的倉庫。

     //dependencies中使用classpath聲明了一個(gè)Gradle插件,用來表示這是個(gè)Android項(xiàng)目而不是C++或其他項(xiàng)目。
內(nèi)層builld.gradle文件
     apply plugin: 'com.android.application'
     ?
     android {
      compileSdkVersion 29
      buildToolsVersion "29.0.2"
      defaultConfig {
      applicationId "com.example.helloworld"
      minSdkVersion 15
      targetSdkVersion 29
      versionCode 1
      versionName "1.0"
      testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
      }
      buildTypes {
      release {
      minifyEnabled false
      proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
      }
      }
     }
     ?
     dependencies {
      implementation fileTree(dir: 'libs', include: ['*.jar'])
      implementation 'androidx.appcompat:appcompat:1.0.2'
      implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
      testImplementation 'junit:junit:4.12'
      androidTestImplementation 'androidx.test.ext:junit:1.1.0'
      androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'
     }
    
  • 第一行應(yīng)用了一個(gè)插件,一般選兩個(gè)值:

    • com.android.application:表示這是個(gè)應(yīng)用程序模塊

    • com.android.library:表示這是個(gè)庫模塊,只能依附于別的應(yīng)用程序模塊運(yùn)行

  • 第三行android{}配置項(xiàng)目構(gòu)建的屬性:

    • compileSdkVersion指定編譯的版本,29代表用Android 10的SDK編譯

    • buildToolsVersion指定構(gòu)建工具的版本,有最新的AS會提示

    • defaultConfig{}細(xì)節(jié)配置

      • applicationId指定包名

      • minSdkVersion指定最低兼容版本,15表示Android4.0

      • targetSdkVersion數(shù)字越大會啟用一些新功能,比如權(quán)限控制等

      • versionCode項(xiàng)目版本號

      • versionName項(xiàng)目版本名

    • buildTypes{}指定生成安裝文件的配置

      • release{}正式版安裝文件的配置

        • minifyEnabled指定是否代碼混淆

        • proguardFiles指定混淆的規(guī)則文件

          • proguard-android-optimize.txtSDK目錄下,項(xiàng)目通用混淆規(guī)則

          • proguard-rules.pro當(dāng)前項(xiàng)目根目錄下,當(dāng)前項(xiàng)目的特有混淆規(guī)則

      • debug{}測試版安裝文件的配置,通常忽略不寫

  • dependencies{}:指定當(dāng)前項(xiàng)目的所有依賴關(guān)系

    • 第一行:fileTree:本地依賴

    • 第二三行:遠(yuǎn)程依賴:androidx.appcompat域名部分,appcompat組名,1.0.2是版本名。Gradle會先檢查本地是否已經(jīng)有此庫的緩存,如果沒有就會聯(lián)網(wǎng)下載

    • 最后三行用來測試用例,暫時(shí)用不到。

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

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

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