文件結(jié)構(gòu)如下圖:
http://wiki.jikexueyuan.com/project/notes/images/xflavour_folder_structure.png" alt="xflavour_folder_structure.png" />
可以通過配置,修改/重新指定各種文件的位置:
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的配置可以動態(tài)化:
def computeVersionName() {
...
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
versionCode 12
versionName computeVersionName()
minSdkVersion 16
targetSdkVersion 16
}
}
注意:方法名不能和默認的getter重名;
聲明依賴
本地jar文件:
dependencies {
compile files('libs/foo.jar')
}
遠程依賴:
repositories {
mavenCentral()
}
dependencies {
compile 'com.google.guava:guava:11.0.2'
}
library project依賴:
dependencies {
compile project(':libraries:lib1')
}
-–daemon
選項,將讓gradle后臺運行,后續(xù)編譯將節(jié)省gradle初始化的時間;添加task
task custom(description: 'This is our custom task') << { task ->
println "Running task ${task.name}"
}
task的執(zhí)行時機
<<
操作符
task myTask2 << {
println "Hello, World!"
}
相當于整個task都在doLast塊內(nèi)
添加task的依賴
assemble.dependsOn 'custom'
assemble
將依賴于custom
,即custom
執(zhí)行后才能執(zhí)行assemble
;這樣是將custom
添加到了assemble
的最后一個依賴;
使用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}”
}
}
不同的版本,使用不同的服務器配置,不同的icon,不同的包名等,使用product flavor非常方便;可以在product flavor配置里面設(shè)置控制變量,主代碼根據(jù)控制變量來控制行為;
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)建相應的文件夾,進行個性化配置;
buildscript
是在gradle系統(tǒng)中定義的一個方法,接受一個closure作為參數(shù);Project
實例context上;script block
:把一個closure傳遞到一個方法中,同時調(diào)用該方法;