android {
compileOptions {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
}
默認(rèn)值是“1.6”。這個(gè)設(shè)置將影響所有task編譯Java源代碼。
android {
aaptOptions {
noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
}
}
這將影響所有使用aapt的task。
android {
dexOptions {
incremental false
preDexLibraries = false
jumboMode = false
}
}
這將應(yīng)用所有使用dex的task。
基礎(chǔ)Java項(xiàng)目有一組有限的task用于互相處理生成一個(gè)輸出。
classes
是一個(gè)編譯Java源代碼的task??梢栽赽uild.gradle文件中通過(guò)腳本很容易使用classes
。這是project.tasks.classes
的縮寫(xiě)。
在Android項(xiàng)目中,相比之下這就有點(diǎn)復(fù)雜。因?yàn)锳ndroid項(xiàng)目中會(huì)有大量相同的task,并且它們的名字基于_Build Types_和_Product Flavor_生成。
為了解決這個(gè)問(wèn)題,android
對(duì)象有兩個(gè)屬性:
applicationVariants
(只適用于app plugin)libraryVariants
(只適用于library plugin)testVariants
(兩個(gè)plugin都適用)這三個(gè)都會(huì)分別返回一個(gè)ApplicationVariant、LibraryVariant和TestVariant對(duì)象的DomainObjectCollection。
注意使用這三個(gè)collection中的其中一個(gè)都會(huì)觸發(fā)生成所有對(duì)應(yīng)的task。這意味著使用collection之后不需要更改配置。
DomainObjectCollection可以直接訪問(wèn)所有對(duì)象,或者通過(guò)過(guò)濾器進(jìn)行篩選。
android.applicationVariants.each { variant ->
....
}
這三個(gè)variant類(lèi)都共享下面的屬性:
屬性名 | 屬性類(lèi)型 | 說(shuō)明 |
---|---|---|
name | String | Variant的名字,必須是唯一的。 |
description | String | Variant的描述說(shuō)明。 |
dirName | String | Variant的子文件夾名,必須也是唯一的??赡芤矔?huì)有不止一個(gè)子文件夾,例如“debug/flavor1” |
baseName | String | Variant輸出的基礎(chǔ)名字,必須唯一。 |
outputFile | File | Variant的輸出,這是一個(gè)可讀可寫(xiě)的屬性。 |
processManifest | ProcessManifest | 處理Manifest的task。 |
aidlCompile | AidlCompile | 編譯AIDL文件的task。 |
renderscriptCompile | RenderscriptCompile | 編譯Renderscript文件的task。 |
mergeResources | MergeResources | 混合資源文件的task。 |
mergeAssets | MergeAssets | 混合asset的task。 |
processResources | ProcessAndroidResources | 處理并編譯資源文件的task。 |
generateBuildConfig | GenerateBuildConfig | 生成BuildConfig類(lèi)的task。 |
javaCompile | JavaCompile | 編譯Java源代碼的task。 |
processJavaResources | Copy | 處理Java資源的task。 |
assemble | DefaultTask | Variant的標(biāo)志性assemble task。 |
ApplicationVariant類(lèi)還有以下附加屬性:
屬性名 | 屬性類(lèi)型 | 說(shuō)明 |
---|---|---|
buildType | BuildType | Variant的BuildType。 |
productFlavors | List |
Variant的ProductFlavor。一般不為空但也允許空值。 |
mergedFlavor | ProductFlavor | android.defaultConfig和variant.productFlavors的合并。 |
signingConfig | SigningConfig | Variant使用的SigningConfig對(duì)象。 |
isSigningReady | boolean | 如果是true則表明這個(gè)Variant已經(jīng)具備了所有需要簽名的信息。 |
testVariant | BuildVariant | 將會(huì)測(cè)試這個(gè)Variant的TestVariant。 |
dex | Dex | 將代碼打包成dex的task。如果這個(gè)Variant是個(gè)庫(kù),這個(gè)值可以為空。 |
packageApplication | PackageApplication | 打包最終APK的task。如果這個(gè)Variant是個(gè)庫(kù),這個(gè)值可以為空。 |
zipAlign | ZipAlign | zip壓縮APK的task。如果這個(gè)Variant是個(gè)庫(kù)或者APK不能被簽名,這個(gè)值可以為空。 |
install | DefaultTask | 負(fù)責(zé)安裝的task,不能為空。 |
uninstall | DefaultTask | 負(fù)責(zé)卸載的task。 |
LibraryVariant類(lèi)還有以下附加屬性:
屬性名 | 屬性類(lèi)型 | 說(shuō)明 |
---|---|---|
buildType | BuildType | Variant的BuildType. |
mergedFlavor | ProductFlavor | The defaultConfig values |
testVariant | BuildVariant | 用于測(cè)試這個(gè)Variant。 |
packageLibrary | Zip | 用于打包庫(kù)項(xiàng)目的AAR文件。如果是個(gè)庫(kù)項(xiàng)目,這個(gè)值不能為空。 |
TestVariant類(lèi)還有以下屬性:
屬性名 | 屬性類(lèi)型 | 說(shuō)明 |
---|---|---|
buildType | BuildType | Variant的Build Type。 |
productFlavors | List |
Variant的ProductFlavor。一般不為空但也允許空值。 |
mergedFlavor | ProductFlavor | android.defaultConfig和variant.productFlavors的合并。 |
signingConfig | SigningConfig | Variant使用的SigningConfig對(duì)象。 |
isSigningReady | boolean | 如果是true則表明這個(gè)Variant已經(jīng)具備了所有需要簽名的信息。 |
testedVariant | BaseVariant | TestVariant測(cè)試的BaseVariant |
dex | Dex | 將代碼打包成dex的task。如果這個(gè)Variant是個(gè)庫(kù),這個(gè)值可以為空。 |
packageApplication | PackageApplication | 打包最終APK的task。如果這個(gè)Variant是個(gè)庫(kù),這個(gè)值可以為空。 |
zipAlign | ZipAlign | zip壓縮APK的task。如果這個(gè)Variant是個(gè)庫(kù)或者APK不能被簽名,這個(gè)值可以為空。 |
install | DefaultTask | 負(fù)責(zé)安裝的task,不能為空。 |
uninstall | DefaultTask | 負(fù)責(zé)卸載的task。 |
connectedAndroidTest | DefaultTask | 在連接設(shè)備上行執(zhí)行Android測(cè)試的task。 |
providerAndroidTest | DefaultTask | 使用擴(kuò)展API執(zhí)行Android測(cè)試的task。 |
Android task特有類(lèi)型的API:
每個(gè)task類(lèi)型的API由于Gradle的工作方式和Android plugin的配置方式而受到限制。 首先,Gradle意味著擁有的task只能配置輸入輸出的路徑和一些可能使用的選項(xiàng)標(biāo)識(shí)。因此,task只能定義一些輸入或者輸出。
其次,這里面大多數(shù)task的輸入都不是單一的,一般都混合了sourceSet、_Build Type_和_Product Flavor_中的值。為了保持構(gòu)建文件的簡(jiǎn)單和可讀性,目標(biāo)是要讓開(kāi)發(fā)者通過(guò)DSL語(yǔ)言修改這些對(duì)象來(lái)配飾構(gòu)建的過(guò)程,而不是深入修改輸入和task的選項(xiàng)。
另外需要注意,除了ZipAlign這個(gè)task類(lèi)型,其它所有類(lèi)型都要求設(shè)置私有數(shù)據(jù)來(lái)讓它們運(yùn)行。這意味著不可能自動(dòng)創(chuàng)建這些類(lèi)型的新task實(shí)例。
這些API也可能會(huì)被更改。一般來(lái)說(shuō),目前的API是圍繞著給定task的輸入和輸出入口來(lái)添加額外的處理(如果需要的時(shí)候)。歡迎反饋意見(jiàn),特別是那些沒(méi)有預(yù)見(jiàn)過(guò)的需求。
對(duì)于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),請(qǐng)參考Gradle文檔。
即將到來(lái)... 對(duì)于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),請(qǐng)參考Gradle文檔。
使用Android KitKat(19版本的buildTools)就可以使用diamond operator,multi-catch,switch中使用字符串,try with resource等等(譯注:都是JDK7的一些新特性,詳情請(qǐng)參考JDK7文檔)。設(shè)置使用1.7版本,需要修改你的構(gòu)建文件:
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
注意:
你可以將minSdkVersion
的值設(shè)置為19之前的版本,只是你只能使用除了try with resources之外的其它新語(yǔ)言特性。如果你想要使用try with resources特性,你就需要把minSdkVersion
也設(shè)置為19。
你同樣也需要確認(rèn)Gradle使用1.7或者更高版本的JDK(Android Gradle plugin也需要0.6.1或者更高的版本)。