文件結(jié)構(gòu)如下圖:
http://wiki.jikexueyuan.com/project/notes/images/xflavour_folder_structure.png" alt="xflavour_folder_structure.png" />
可以通過(guò)配置,修改/重新指定各種文件的位置:
android {
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
androidTest.setRoot('tests')
}
}
build的配置可以動(dòng)態(tài)化:
def computeVersionName() {
...
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
versionCode 12
versionName computeVersionName()
minSdkVersion 16
targetSdkVersion 16
}
}
注意:方法名不能和默認(rèn)的getter重名;
聲明依賴(lài)
本地jar文件:
dependencies {
compile files('libs/foo.jar')
}
遠(yuǎn)程依賴(lài):
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:11.0.2'
}
library project依賴(lài):
dependencies {
compile project(':libraries:lib1')
}
-–daemon選項(xiàng),將讓gradle后臺(tái)運(yùn)行,后續(xù)編譯將節(jié)省gradle初始化的時(shí)間;添加task
task custom(description: 'This is our custom task') << { task ->
println "Running task ${task.name}"
}
task的執(zhí)行時(shí)機(jī)
<<操作符
task myTask2 << {
println "Hello, World!"
}
相當(dāng)于整個(gè)task都在doLast塊內(nèi)
添加task的依賴(lài)
assemble.dependsOn 'custom'
assemble將依賴(lài)于custom,即custom執(zhí)行后才能執(zhí)行assemble;這樣是將custom添加到了assemble的最后一個(gè)依賴(lài);
使用rule延遲創(chuàng)建task
assemble.dependsOn(‘customAssemble’)
tasks.addRule(“Pattern: customAssemble“) { taskName ->
println “Creating task ${taskName}”
if (taskName.equals(“customAssemble”)) {
android.applicationVariants.each { variant ->
println “Adding dependency to assemble${variant.name}”
def targetTask = project.tasks.findByName(“assemble${variant.name}”)
if(targetTask != null) {
targetTask.dependsOn(“customAssemble${variant.name}”)
}
}
}
task(taskName) << { task ->
println “Running custom task ${task.name}”
}
}
不同的版本,使用不同的服務(wù)器配置,不同的icon,不同的包名等,使用product flavor非常方便;可以在product flavor配置里面設(shè)置控制變量,主代碼根據(jù)控制變量來(lái)控制行為;
productFlavors {
rd {
applicationId "zuul.com.android.rd"
buildConfigField "boolean", "LOG_TIMBER", "true"
buildConfigField "boolean", "LOG_STETHO", "true"
buildConfigField "boolean", "SHOW_LOGGIN_PHONE", "true"
}
}
資源文件(drawable,string,style等)、代碼文件,都可以為不同的flavor創(chuàng)建相應(yīng)的文件夾,進(jìn)行個(gè)性化配置;
buildscript是在gradle系統(tǒng)中定義的一個(gè)方法,接受一個(gè)closure作為參數(shù);Project實(shí)例context上;script block:把一個(gè)closure傳遞到一個(gè)方法中,同時(shí)調(diào)用該方法;