一、引言
Gradle語(yǔ)法對(duì)于組件化環(huán)境的配置非常重要。首先簡(jiǎn)單介紹下Gradle:
1、Gradle是一種構(gòu)建工具
2、Gradle核心是基于Groovy腳本語(yǔ)言,Groovy腳本基于JAVA且拓展了JAVA,因此Gradle需要依賴JDK和Groovy庫(kù)
3、Gradle是一種弱類型語(yǔ)言,可以類型推倒
二、第一行代碼
打印“hello gradle”,有兩種打印方式:
println ("app-gradle")
println "app-gradle" //println與字符串之間有空格
打印結(jié)果:(如果沒(méi)看到,點(diǎn)開旁邊的Toggle View就能看到)

三、深入學(xué)習(xí)
平時(shí)我們新建module時(shí),新建module的build.gradle會(huì)與app的build.gradle中的版本號(hào)以及引入的第三方庫(kù)有很多相同的地方,我們能否建一個(gè)gradle文件對(duì)它們進(jìn)行管理呢,答案是肯定的,接下看看如何做:
準(zhǔn)備工作:
1、在根目錄上新建一個(gè)文件:config.gradle
2、在根目錄的build.gradle中引入config.gradle文件
//將config.gradle引入后,在app與library中才能檢測(cè)到config.gradle中定義的屬性
apply from:"config.gradle"
3、新建一個(gè)library
新建的config文件是空的,這時(shí)我們可以在里面加入ext代碼塊,ext代碼塊可以添加多個(gè)自定義屬性,比如這里我在ext代碼塊中添加一個(gè)username屬性,然后在app與library中輸出username可以這樣寫:
//config.gradle打開是空的,可以通過(guò)ext代碼塊添加多個(gè)自定義屬性
ext{
username='simon'
}
println("${rootProject.ext.username}")
println("${username}") //簡(jiǎn)寫

前面提到Gradle是弱類型語(yǔ)言,接下來(lái)看看在app中將username賦值為1能否成功:
rootProject.ext.username=1
println("${rootProject.ext.username}")

可以看到成功將string類型推倒成了int類型
接下來(lái)先對(duì)app與library的版本號(hào)進(jìn)行管理:
在config.gradle中如下寫:
ext{
username='simon'
//建立map存儲(chǔ)
androidid=[
compileSdkVersion:28,
buildToolsVersion:"29.0.0",
minSdkVersion:19,
targetSdkVersion:28,
versionCode:1,
versionName:"1.0",
testInstrumentationRunner:"android.support.test.runner.AndroidJUnitRunner"
]
//因?yàn)閍pp中applicationId而Library中沒(méi)有,因此將applicationId抽取出來(lái)
appid=[
app:"com.example.xiacheng.alearning"
]
}
在app中如下寫:
//賦值與引用 這里定義的名字不能與下面的androidid、dependencies相同
def androId=rootProject.ext.androidid
def appid=rootProject.ext.appid
android {
compileSdkVersion androId.compileSdkVersion
buildToolsVersion androId.buildToolsVersion
defaultConfig {
applicationId appid.app
minSdkVersion androId.minSdkVersion
targetSdkVersion androId.targetSdkVersion
versionCode androId.versionCode
versionName androId.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
在library中也一樣
def androId=rootProject.ext.androidid
def appid=rootProject.ext.appid
android {
compileSdkVersion androId.compileSdkVersion
buildToolsVersion androId.buildToolsVersion
defaultConfig {
minSdkVersion androId.minSdkVersion
targetSdkVersion androId.targetSdkVersion
versionCode androId.versionCode
versionName androId.versionName
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
接下來(lái)在對(duì)第三方庫(kù)進(jìn)行統(tǒng)一管理:
//現(xiàn)在我們用的support包都是28.0.0,那么就可以定義一個(gè)supportlibrary
supportLibrary="28.0.0"
//第三方庫(kù)
depencies=[
"appcompat":"com.android.support:appcompat-v7:${supportLibrary}",
"recyclerview":"com.android.support:recyclerview-v7:${supportLibrary}",
"constraint":"com.android.support.constraint:constraint-layout:1.1.3"
]
在app中
def support=rootProject.ext.depencies
dependencies {
implementation fileTree(dir:'libs',include:['*.jar'])
implementation support.appcompat
implementation support.recyclerview
implementation support.constraint
//這里有一個(gè)終極簡(jiǎn)寫 把support進(jìn)行foreach
support.each{k,v->implementation v}
}
library跟app一樣處理