高级构建定制

构建选项

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

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

操作任务

基本的 Java 项目有一组有限的任务能够共同协作来创建一个输出。
其中classes 任务是将 Java 源代码进行编译的那个任务。
build.gradle通过简单地在脚本中使用classes就能很容易地访问它。这是project.tasks.classes的简洁写法。

在 Android 项目中,它会比较复杂一点,因为可能有大量的相同的任务并且他们的名字都是基于Build TypesProduct 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

    • 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 想要让任务只能配置输入或输出的位置和可能使用的可选标志。所以在这里,这些任务只能定义一些输入或输出。
其次,这些任务的绝大多数的输入都是有实际意义的,它们往往来自sourceSetsBuild TypesPruduct Flavor的混合值。为了保持构建文件易于阅读和理解,目的是要让开发人员通过DSL进行稍微调整就可以修改构建,而不是要深入任务的选项和输入并且去修改它们。
此外注意到,除了 ZipAlign 任务类型,所有其他类型都需要设立私有数据来让它们正常运行。这意味着不可能手动创建这些类型的新任务。

这个 API 也可能会被更改。一般情况下,当前 API 是围绕着任务给定的输出或输入(如果可能)的入口来添加额外的处理的(如果需要)。欢迎反馈意见,特别是那些未预知的需求。

关于 Gradle 任务 (DefaultTask,JavaCompile,Copy,Zip),请参阅 Gradle 文档。

BuildType 和 Product Flavor 的属性参考

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或更高的版本。)

转载于:https://www.cnblogs.com/6060b/p/4202931.html

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

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

    昨晚把第五章未译完的几句话攻克了.只是第六章没怎么译,明后天又是周末,假设周一前第六章翻译完的话,周一再发第六章. 本文译自Android官方技术文档<Gradle Plugin User Gu ...

  2. Android官方技术文档翻译——新构建系统概述

    本文译自Android官方技术文档<New Build System>,原文地址:http://tools.android.com/tech-docs/new-build-system. ...

  3. gradle插件用户指南(翻译)

    gradle插件用户指南(翻译) http://www.open-open.com/lib/view/open1428320744713.html gradle属性文件详解(英文): https:// ...

  4. Android官方技术文档翻译——开发工具的构建概述

    本文译自Android官方技术文档<Build Overview>,原文地址:http://tools.android.com/build. 因为<Android Lint Chec ...

  5. Android官方技术文档翻译——Ant 任务

    本文译自Android官方技术文档<Ant Tasks>,原文地址:http://tools.android.com/tech-docs/ant-tasks. 因为是抽着时间译的,所以这篇 ...

  6. Android官方技术文档翻译——ApplicationId 与 PackageName

    本文译自androd官方技术文档<ApplicationId versus PackageName>,原文地址:http://tools.android.com/tech-docs/new ...

  7. android官方技术文档翻译——Android Lint

    本文译自androd官方技术文档<Android Lint>,原文地址:http://tools.android.com/tips/lint. 本文地址:http://blog.csdn. ...

  8. android studio离线配置gradle插件_Gradle 扫盲与 Task 基础

    Gradle 是用于构建项目的工具,除了管理依赖库之外,Gradle 还支持我们自己添加编译脚本.添加编译配置等控制项目的构建,通过提供 API 我们可以控制编译的每一步操作. Gradle 目前使用 ...

  9. Gradle用户指南(1)-Gradle安装

    前置条件 Gradle 需要 Java JDK 或者 JRE,版本是 6 及以上.Gradle 将会装载自己的 Groovy 库,因此,Groovy 不需要被安装.任何存在的 Groovy 安装都会被 ...

最新文章

  1. Sql Server 清除日志的存储过程 Procedure of cleaning sql server's log
  2. 情感分析之电影评论分析-基于Tensorflow的LSTM
  3. Java Eclipse和MyEclipse快捷键
  4. 5_jfoenix_运行jfoenix官方演示,切换片段,部署
  5. [汇编语言]实验二:字的传送
  6. Android 基础 —— 活动的启动模式
  7. maven依赖关系中Scope的作用
  8. 十一、PHP框架Laravel学习笔记——构造器的查询.分块.聚合
  9. win 10 linux shell,实用工具:Win10下的bash shell打开教程
  10. 山西计算机网络系统安装,山西初中信息技术考试系统操作手册-20210410201505.docx-原创力文档...
  11. ant-design tree 设置默认选中状态_[路由系列]5分钟设置一台Ubiquiti的ERX路由器
  12. 鸿蒙太空是什么意思,[评论]林黛玉:“眼泪还债”暗洒闲抛知为谁?
  13. 三方支付之支付宝支付实现逻辑
  14. 电平转换小结(避免翻车指南)
  15. 仓库管理系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 有一种爱 不能称之为爱情
  17. powerdesigner 导入sql文件生成模型
  18. python函数实验总结_Python程序设计实验报告:实验六 函数
  19. 推荐一款适用于vue的h5富文本编辑器
  20. DeFi是什么?DeFi对未来意味着什么?

热门文章

  1. mysql 分表的3种方法
  2. mysql中engine=innodb和engine=myisam的区别详解
  3. c++心得之struct和class(结构体和类)
  4. php帝国程序跨表调用数组,帝国CMS 跨表调用相关信息标签
  5. java阅读doc文件格式_java – 正确区分.xls和.doc文件的方法?
  6. Redhat, CentOS 设置系统时区
  7. python脚本下载sentinel数据_Python API sentinelsat下载错误
  8. c语言做小学生测验程序,[转载]程序设计方法学课程设计--小学生算术四则运算测试程序(C)...
  9. java springcloud版b2b2c社交电商spring cloud分布式微服务 (四) 断路器(Hystrix)
  10. 8K投影仪+大银幕,日本系统Sphere5.2不用头显也能体验VR