高级构建定制
构建选项
Java 编译选项
android {
compileOptions {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
}
默认值为“1.6”。这个配置会影响所有编译 Java 源代码的任务。
aapt 选项
android {
aaptOptions {
noCompress ‘foo‘, ‘bar‘
ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
}
}
这个配置会影响所有使用aapt的任务。
android {
dexOptions {
incremental false
preDexLibraries = false
jumboMode = false
}
}
基本的 Java 项目有一组有限的任务能够共同协作来创建一个输出。
其中
classes 任务是将 Java 源代码进行编译的那个任务。
从build.gradle通过简单地在脚本中使用classes就能很容易地访问它。这是project.tasks.classes的简洁写法。
在 Android 项目中,它会比较复杂一点,因为可能有大量的相同的任务并且他们的名字都是基于Build Types和Product Flavors生成。
android对象中有两个(译者注:我怎么感觉是三个。难道是原文笔误?)属性就是为解决这个问题的:
- applicationVariants(仅适用于应用程序插件)
- libraryVariants(仅适用于库插件)
- testVariants (对两个插件都适用)
这三个会分别返回ApplicationVariant、LibraryVariant和TestVariant的DomainObjectCollection对象。
注意,访问这些集合的任何一个都将触发所有任务的生成。这意味着在访问这些集合之后不应该再进行(重新)配置。
DomainObjectCollection可以对所有对象进行直接访问,或通过过滤器(这将会很方便)过滤。
android.applicationVariants.each { variant ->
....
}
这三个variant 类都有以下属性:
属性名称 |
属性类型 |
描述 |
name |
String |
variant的名称。必须保证是唯一的。 |
description |
String |
人类可读的对variant的描述。 |
dirName |
String |
variant的子文件夹名称。必须保证是唯一的。可能会是多个文件夹,即"debug/flavor1" |
baseName |
String |
variant的输出的基础名称必须保证是唯一的。 |
outputFile |
File |
variant的输出。这是一个可读可写的属性 |
processManifest |
ProcessManifest |
处理manifest的任务。 |
aidlCompile |
AidlCompile |
编译AIDL文件的任务。 |
renderscriptCompile |
RenderscriptCompile |
编译Renderscript文件的任务。 |
mergeResources |
MergeResources |
合并资源的任务。 |
mergeAssets |
MergeAssets |
合并assets的任务。 |
processResources |
ProcessAndroidResources |
处理和编译资源的任务。 |
generateBuildConfig |
GenerateBuildConfig |
生成 BuildConfig 类的任务。 |
javaCompile |
JavaCompile |
编译 Java 代码的任务。 |
processJavaResources |
Copy |
处理 Java 资源的任务。 |
assemble |
DefaultTask |
variant 的assemble锚任务。 |
ApplicationVariant 类增加了以下属性:
属性名称 |
属性类型 |
描述 |
buildType |
BuildType |
variant 的 BuildType。 |
productFlavors |
List<ProductFlavor> |
variant 的 ProductFlavors。总是不为null,但可以是空集合。 |
mergedFlavor |
ProductFlavor |
对android.defaultConfig 和 variant.productFlavors的合并 |
signingConfig |
SigningConfig |
用于 variant 的 SigningConfig 对象 |
isSigningReady |
boolean |
如果该 variant 有签名所需的所有信息则为true。 |
testVariant |
BuildVariant |
将会测试该variant的TestVariant |
dex |
Dex |
将代码生成dex的任务。如果variant是一个库,这个值可以为 null。 |
packageApplication |
PackageApplication |
打包最终的APK的任务。如果variant是一个库,这个值可以为 null。 |
zipAlign |
ZipAlign |
对apk进行zipaligns(优化对齐)的任务。如果variant是一个库或者APK不能被签名,这个值可以为 null。 |
install |
DefaultTask |
安装任务。可以为 null。 |
uninstall |
DefaultTask |
卸载任务。 |
LibraryVariant 类增加了以下属性:
属性名称 |
属性类型 |
描述 |
buildType |
BuildType |
variant 的 BuildType。 |
mergedFlavor |
ProductFlavor |
DefaultConfig 的值 |
testVariant |
BuildVariant |
将会测试该variant 的 Build Variant |
packageLibrary |
Zip |
打包成Library AAR 归档文件的任务。如果不是库项目可以为null。 |
TestVariant 类增加了以下属性:
属性名称 |
属性类型 |
描述 |
buildType |
BuildType |
variant 的 BuildType。 |
productFlavors |
List<ProductFlavor> |
variant 的 ProductFlavors。总是不为null,但可以是空集合。 |
mergedFlavor |
ProductFlavor |
对android.defaultConfig 和 variant.productFlavors的合并 |
signingConfig |
SigningConfig |
用于 variant 的 SigningConfig 对象 |
isSigningReady |
boolean |
如果该 variant 有签名所需的所有信息则为true。 |
testedVariant |
BaseVariant |
经过TestVariant测试过的BaseVariant。 |
dex |
Dex |
将代码生成dex的任务。如果variant是一个库,这个值可以为 null。 |
packageApplication |
PackageApplication |
打包最终的APK的任务。如果variant是一个库,这个值可以为 null。 |
zipAlign |
ZipAlign |
对apk进行zipaligns(优化对齐)的任务。如果variant是一个库或者APK不能被签名,这个值可以为 null。 |
install |
DefaultTask |
安装任务。可以为 null。 |
uninstall |
DefaultTask |
卸载任务。 |
connectedAndroidTest |
DefaultTask |
在已连接的设备上运行 android 测试的任务。 |
providerAndroidTest |
DefaultTask |
使用扩展 API 运行android 测试的任务。 |
Android 的特定任务类型的 API。
- ProcessManifest
- AidlCompile
- RenderscriptCompile
- File sourceOutputDir
- File resOutputDir
- MergeResources
- MergeAssets
- ProcessAndroidResources
- File manifestFile
- File resDir
- File assetsDir
- File sourceOutputDir
- File textSymbolOutputDir
- File packageOutputFile
- File proguardOutputFile
- GenerateBuildConfig
- Dex
- PackageApplication
- File resourceFile
- File dexFile
- File javaResourceDir
- File jniDir
- File outputFile
- 要
修改最终输出的文件,可以在 variant 对象上直接使用“outputFile”(译者注:1.0
版本通过variant获取到的是outputs,是一个List,需要通过对其遍历或取第一个元素
variant.outputs[0].outputFile才能获得outputFile对象)。
- ZipAlign
- File inputFile
- File outputFile
- 要
修改最终输出的文件,可以在 variant 对象上直接使用“outputFile”(译者注:1.0
版本通过variant获取到的是outputs,是一个List,需要通过对其遍历或取第一个元素
variant.outputs[0].outputFile才能获得outputFile对象)。
由于Gradle的工作原理以及Android 插件的配置方式,用于每个任务类型的API会有所限制。
首先,Gradle 想要让任务只能配置输入或输出的位置和可能使用的可选标志。所以在这里,这些任务只能定义一些输入或输出。
其次,这些任务的绝大多数的输入都是有实际意义的,它们往往来自sourceSets、Build Types和Pruduct Flavor的混合值。为了保持构建文件易于阅读和理解,目的是要让开发人员通过DSL进行稍微调整就可以修改构建,而不是要深入任务的选项和输入并且去修改它们。
此外注意到,除了 ZipAlign 任务类型,所有其他类型都需要设立私有数据来让它们正常运行。这意味着不可能手动创建这些类型的新任务。
这个 API 也可能会被更改。一般情况下,当前 API 是围绕着任务给定的输出或输入(如果可能)的入口来添加额外的处理的(如果需要)。欢迎反馈意见,特别是那些未预知的需求。
关于 Gradle 任务 (DefaultTask,JavaCompile,Copy,Zip),请参阅 Gradle 文档。
BuildType 和 Product Flavor 的属性参考
即将推出。
关于 Gradle 任务 (DefaultTask,JavaCompile,Copy,Zip),请参阅 Gradle 文档。 <br4>
使用 sourceCompatibility 1.7
通过 Android KitKat (buildToolsVersion
19),你可以使用钻石运算符(即<>),multi-catch,在switch语句中使用string, try with
resources等等。要做到这一点,请将以下配置添加到您的构建文件中:
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
minSdkVersion 7
targetSdkVersion 19
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
注意,你可以把 minSdkVersion
的值设为19之前的版本,只是你只能使用除了try with resources之外的其他新语言特性。如果你想要使用 try with resources,你就需要把minSdkVersion
也设为 19。
你还需要确认 Gradle 使用JDK 1.7或更高的版本。(并且Android Gradle 插件也需要0.6.1或更高的版本。)
Android官方技术文档翻译——Gradle 插件用户指南(7)
原文:http://www.cnblogs.com/6060b/p/4202931.html