您的位置:首页 > 移动开发 > Android开发

Android官方技术文档翻译——Gradle 插件用户指南(7)

2015-07-22 16:43 781 查看
本文译自Android官方技术文档《Gradle Plugin User Guide》,原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide。

翻译不易,转载请注明CSDN博客上的出处:
http://blog.csdn.net/maosidiaoxian/article/details/42417779
前三章见《Android官方技术文档翻译——Gradle 插件用户指南(1-3)》。

第四章见《Android官方技术文档翻译——Gradle 插件用户指南(4)》。

第五章见《Android官方技术文档翻译——Gradle 插件用户指南(5)》。

第六章见《Android官方技术文档翻译——Gradle 插件用户指南(6)》。

翻译工作耗时费神,如果你觉得本文翻译得还OK,请点击文末的“顶”,谢谢。翻译如有错讹,敬请指正。

高级构建定制

构建选项

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的任务。

dex
选项

android {
dexOptions {
incremental false

preDexLibraries = false

jumboMode = false

}
}

这个配置会影响所有使用dex 的任务。

操作任务

基本的 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 类都有以下属性:

属性名称属性类型描述
nameStringvariant的名称。必须保证是唯一的。
descriptionString人类可读的对variant的描述。
dirNameStringvariant的子文件夹名称。必须保证是唯一的。可能会是多个文件夹,即"debug/flavor1"
baseNameStringvariant的输出的基础名称必须保证是唯一的。
outputFileFilevariant的输出。这是一个可读可写的属性
processManifestProcessManifest处理manifest的任务。
aidlCompileAidlCompile编译AIDL文件的任务。
renderscriptCompileRenderscriptCompile编译Renderscript文件的任务。
mergeResourcesMergeResources合并资源的任务。
mergeAssetsMergeAssets合并assets的任务。
processResourcesProcessAndroidResources处理和编译资源的任务。
generateBuildConfigGenerateBuildConfig生成 BuildConfig 类的任务。
javaCompileJavaCompile编译 Java 代码的任务。
processJavaResourcesCopy处理 Java 资源的任务。
assembleDefaultTaskvariant 的assemble锚任务。
ApplicationVariant 类增加了以下属性:

属性名称属性类型描述
buildTypeBuildTypevariant 的 BuildType。
productFlavorsList<ProductFlavor>variant 的 ProductFlavors。总是不为null,但可以是空集合。
mergedFlavorProductFlavor对android.defaultConfig 和 variant.productFlavors的合并
signingConfigSigningConfig用于 variant 的 SigningConfig 对象
isSigningReadyboolean如果该 variant 有签名所需的所有信息则为true。
testVariantBuildVariant将会测试该variant的TestVariant
dexDex将代码生成dex的任务。如果variant是一个库,这个值可以为 null。
packageApplicationPackageApplication打包最终的APK的任务。如果variant是一个库,这个值可以为 null。
zipAlignZipAlign对apk进行zipaligns(优化对齐)的任务。如果variant是一个库或者APK不能被签名,这个值可以为 null。
installDefaultTask安装任务。可以为 null。
uninstallDefaultTask卸载任务。
LibraryVariant 类增加了以下属性:

属性名称属性类型描述
buildTypeBuildTypevariant 的 BuildType。
mergedFlavorProductFlavorDefaultConfig 的值
testVariantBuildVariant将会测试该variant 的 Build Variant
packageLibraryZip打包成Library AAR 归档文件的任务。如果不是库项目可以为null。
TestVariant 类增加了以下属性:

属性名称属性类型描述
buildTypeBuildTypevariant 的 BuildType。
productFlavorsList<ProductFlavor>variant 的 ProductFlavors。总是不为null,但可以是空集合。
mergedFlavorProductFlavor对android.defaultConfig 和 variant.productFlavors的合并
signingConfigSigningConfig用于 variant 的 SigningConfig 对象
isSigningReadyboolean如果该 variant 有签名所需的所有信息则为true。
testedVariantBaseVariant经过TestVariant测试过的BaseVariant。
dexDex将代码生成dex的任务。如果variant是一个库,这个值可以为 null。
packageApplicationPackageApplication打包最终的APK的任务。如果variant是一个库,这个值可以为 null。
zipAlignZipAlign对apk进行zipaligns(优化对齐)的任务。如果variant是一个库或者APK不能被签名,这个值可以为 null。
installDefaultTask安装任务。可以为 null。
uninstallDefaultTask卸载任务。
connectedAndroidTestDefaultTask在已连接的设备上运行 android 测试的任务。
providerAndroidTestDefaultTask使用扩展 API 运行android 测试的任务。
Android 的特定任务类型的 API。

ProcessManifest

File manifestOutputFile

AidlCompile

File sourceOutputDir

RenderscriptCompile

File sourceOutputDir
File resOutputDir

MergeResources

File outputDir

MergeAssets

File outputDir

ProcessAndroidResources

File manifestFile
File resDir
File assetsDir
File sourceOutputDir
File textSymbolOutputDir
File packageOutputFile
File proguardOutputFile

GenerateBuildConfig

File sourceOutputDir

Dex

File outputFolder

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或更高的版本。)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: