項(xiàng)目結(jié)構(gòu)示意圖


結(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的全局配置文件gradlewgradlew.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_namexml中引用:@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.0targetSdkVersion數(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í)用不到。