Andriod studio 采用Gradle來構(gòu)建項(xiàng)目
一般一個(gè)項(xiàng)目有兩個(gè)build.gradle,一個(gè)在最外層目錄下,一個(gè)在app目錄下面:
buildscript {
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
這些代碼都是自動(dòng)生成,請(qǐng)忽略語(yǔ)法結(jié)構(gòu),只需看最關(guān)鍵的部分:
1.兩處repositories的閉包都聲明了jcenter()這一行,jcenter()是一個(gè)代碼托管倉(cāng)庫(kù),很多安卓開源項(xiàng)目都會(huì)選擇將代碼托管到j(luò)center上,聲明了他之后,就可以在此項(xiàng)目中引用jcenter中的任何開源項(xiàng)目了,
2.dependencies閉包中使用classpath聲明了一個(gè)gradle插件,why要有這個(gè)插件,gradle不是專門為構(gòu)建安卓項(xiàng)目而生,java,c++很多項(xiàng)目都可以用它創(chuàng)建,想要用它來構(gòu)建安卓項(xiàng)目,必須用聲明com.android.tools.build:gradle:3.0.0這個(gè)插件,后面部分表示版本號(hào);
這是最外層目錄下的gradle解析一般情況下并不需要修改此文件,除非想添加一些全局性的項(xiàng)目構(gòu)建配置;
下面看一看app下面的build.gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "com.example.huyongjin.myapplication"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:2.2.2'
}
第一行應(yīng)用了一個(gè)插件,有兩種值可以選,com.android.application表示這是一個(gè)應(yīng)用程序模塊磷醋,com.android.library表示這是一個(gè)庫(kù)模塊;這兩者的區(qū)別在于:前者可以直接運(yùn)行,后者只能作為代碼庫(kù)依附于別的應(yīng)用程序模塊來運(yùn)行;接著是最大的一個(gè)安卓閉包,在這個(gè)閉包中可以配置項(xiàng)目構(gòu)建的各種屬性:
compileSdkVersion表示指定項(xiàng)目的編譯版本;
//buildToolVersion用于指定項(xiàng)目構(gòu)建工具的版本
androdid閉包中又嵌套了一個(gè)defaultConfig閉包,defaultConfig閉包中可以對(duì)項(xiàng)目的更多細(xì)節(jié)進(jìn)行配置。
applicationId用于指定項(xiàng)目的包名,前面我們?cè)趧?chuàng)建項(xiàng)目的時(shí)候已經(jīng)指定過包名了,如果你想在后面對(duì)其進(jìn)行修改,那么就是在這里進(jìn)行修改的乃戈;
mindsdkVersion用于指定項(xiàng)目最低兼容的Android系統(tǒng)版本,這里15表示最低兼容到Androdid4.0版本;
targetsdkVersion指定的值表示在該目標(biāo)版本上已經(jīng)做過了充分的測(cè)試,系統(tǒng)將會(huì)為你的應(yīng)用程序啟用一些最新的功能和特性;
下面看一看buildTypes閉包:
buildTypes用于指定生成安裝文件的相關(guān)配置,通常只會(huì)有兩個(gè)子閉包,一個(gè)是debug,一個(gè)是release;debug閉包用于生成測(cè)試版安裝文件的配置,release閉包用于指定生成正式版安裝文件的配置;debug可以忽略不寫;
minifyEnabled 用于指定是否對(duì)項(xiàng)目的代碼進(jìn)行了混淆,true表示混淆,false表示沒有;
proguardFiles 用于指定混淆時(shí)指定的規(guī)則文件,這里指定了兩個(gè)文件缩歪,
proguard-android.txt是在android sdk目錄下的,里面是所有項(xiàng)目通用的混淆規(guī)則;proguard-rules.pro是在當(dāng)前項(xiàng)目的根目錄下的,里面可以編寫當(dāng)前項(xiàng)目特有的混淆規(guī)則;
最后還剩一個(gè)dependencies閉包,可以指定當(dāng)前項(xiàng)目的所有依賴關(guān)系,通常一個(gè)android Studio項(xiàng)目一共有3種依賴方式:本地依賴,庫(kù)依賴,遠(yuǎn)程依賴:
本地依賴可以對(duì)本地的jar包或者目錄添加依賴關(guān)系;
庫(kù)依賴可以對(duì)項(xiàng)目中的庫(kù)模塊添加依賴關(guān)系;
遠(yuǎn)程依賴則可以對(duì)jcenter庫(kù)上的開源項(xiàng)目添加依賴關(guān)系;
implementation fileTree是本地依賴聲明,它表示將libs目錄下所有被的.jar后綴文件都添加至項(xiàng)目的構(gòu)建路徑當(dāng)中;
implementation:遠(yuǎn)程依賴聲明,com.android.support:appcompat-v7:26.1.0'是一個(gè)標(biāo)準(zhǔn)的遠(yuǎn)程依賴庫(kù)格式,com.android.support是域名部分,用于和其他公司的庫(kù)做區(qū)分;appcompat-v7是一個(gè)組區(qū)分,用于和同一個(gè)公司的不同庫(kù)區(qū)分;26.1.0是版本號(hào),用于和同一個(gè)庫(kù)的不同版本號(hào)做區(qū)分;加上這一句聲明之后,ggradle首先會(huì)在構(gòu)建項(xiàng)目時(shí)檢查一下本地是否含有這個(gè)庫(kù)的緩存,沒有會(huì)自動(dòng)聯(lián)網(wǎng)下載,然后再添加至項(xiàng)目的構(gòu)建路勁當(dāng)中,
而庫(kù)依賴聲明的基本格式是:implementation project后面加上依賴庫(kù)的名字,比如一個(gè)庫(kù)模塊的名字叫helper,implementation project(':helper')這句聲明即可逛球;
testImplementation是用于聲明測(cè)試用例庫(kù)的,暫時(shí)用不到