原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Advanced-Build-Customization

7、 Advanced Build Customization(高级构建定制)

7.1 Build options(构建选项)

7.1.1 Java Compilation options(Java编译选项)

    android {
compileOptions {
sourceCompatibility = "1.6"
targetCompatibility = "1.6"
}
}

默认值是“1.6”。这个设置将影响全部task编译Java源码。

7.1.2 aapt options(aapt选项)

    android {
aaptOptions {
noCompress 'foo', 'bar'
ignoreAssetsPattern "!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"
}
}

这将影响全部使用aapt的task。

7.1.3 dex options(dex选项)

    android {
dexOptions {
incremental false preDexLibraries = false jumboMode = false }
}

这将应用全部使用dex的task。

7.2 Manipulation tasks(操作task)

基础Java项目有一组有限的task用于互相处理生成一个输出。

classes是一个编译Java源码的task。能够在build.gradle文件里通过脚本非常easy使用classes。这是project.tasks.classes的缩写。

在Android项目中,相比之下这就有点复杂。由于Android项目中会有大量同样的task,而且它们的名字基于Build Types和Product Flavor生成。

为了解决问题,android对象有两个属性:

    * applicationVariants(仅仅适用于app plugin)

    * libraryVariants(仅仅适用于library plugin)

    * testVariants(两个plugin都适用)

这三个都会分别返回一个ApplicationVariant、LibraryVariant和TestVariant对象的DomainObjectCollection

注意使用这三个collection中的当中一个都会触发生成全部相应的task。这意味着使用collection之后不须要更改配置。

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的task。
aidlCompile AidlCompile 编译AIDL文件的task。
renderscriptCompile RenderscriptCompile 编译Renderscript文件的task。
mergeResources MergeResources 混合资源文件的task。
mergeAssets MergeAssets 混合asset的task。
processResources ProcessAndroidResources 处理并编译资源文件的task。
generateBuildConfig GenerateBuildConfig 生成BuildConfig类的task。
javaCompile JavaCompile 编译Java源码的task。
processJavaResources Copy 处理Java资源的task。
assemble DefaultTask Variant的标志性assemble task。

ApplicationVariant类还有下面附加属性:

属性名 属性类型 说明
buildType BuildType Variant的BuildType。
productFlavors List<ProductFlavor> Variant的ProductFlavor。一般不为空但也同意空值。
mergedFlavor ProductFlavor android.defaultConfig和variant.productFlavors的合并。
signingConfig SigningConfig Variant使用的SigningConfig对象。
isSigningReady boolean 假设是true则表明这个Variant已经具备了全部须要签名的信息。
testVariant BuildVariant 将会測试这个Variant的TestVariant。
dex Dex 将代码打包成dex的task。假设这个Variant是个库,这个值能够为空。
packageApplication PackageApplication 打包终于APK的task。假设这个Variant是个库,这个值能够为空。
zipAlign ZipAlign zip压缩APK的task。假设这个Variant是个库或者APK不能被签名,这个值能够为空。
install DefaultTask 负责安装的task,不能为空。
uninstall DefaultTask 负责卸载的task。

LibraryVariant类还有下面附加属性:

属性名 属性类型 说明
buildType BuildType Variant的BuildType.
mergedFlavor ProductFlavor The defaultConfig values
testVariant BuildVariant 用于測试这个Variant。
packageLibrary Zip 用于打包库项目的AAR文件。假设是个库项目,这个值不能为空。

TestVariant类还有下面属性:

属性名 属性值 说明
buildType BuildType Variant的Build Type。
productFlavors List<ProductFlavor> Variant的ProductFlavor。一般不为空但也同意空值。
mergedFlavor ProductFlavor android.defaultConfig和variant.productFlavors的合并。
signingConfig SigningConfig Variant使用的SigningConfig对象。
isSigningReady boolean 假设是true则表明这个Variant已经具备了全部须要签名的信息。
testedVariant BaseVariant TestVariant測试的BaseVariant
dex Dex 将代码打包成dex的task。假设这个Variant是个库,这个值能够为空。
packageApplication PackageApplication 打包终于APK的task。假设这个Variant是个库,这个值能够为空。
zipAlign ZipAlign zip压缩APK的task。假设这个Variant是个库或者APK不能被签名,这个值能够为空。
install DefaultTask 负责安装的task,不能为空。
uninstall DefaultTask 负责卸载的task。
connectedAndroidTest DefaultTask 在连接设备上行运行Android測试的task。
providerAndroidTest DefaultTask 使用扩展API运行Android測试的task。

Android task特有类型的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”能够改变终于的输出目录。

* ZipAlign

* File inputFile

* File outputFile

* 直接在Variant对象中使用“outputFile”能够改变终于的输出目录。

每一个task类型的API因为Gradle的工作方式和Android plugin的配置方式而受到限制。

首先,Gradle意味着拥有的task仅仅能配置输入输出的路径和一些可能使用的选项标识。因此,task仅仅能定义一些输入或者输出。

其次,这里面大多数task的输入都不是单一的,一般都混合了sourceSet、Build Type和Product Flavor中的值。为了保持构建文件的简单和可读性,目标是要让开发人员通过DSL语言改动这些对象来配饰构建的过程,而不是深入改动输入和task的选项。

另外须要注意,除了ZipAlign这个task类型,其他全部类型都要求设置私有数据来让它们执行。这意味着不可能自己主动创建这些类型的新task实例。

这些API也可能会被更改。一般来说,眼下的API是环绕着给定task的输入和输出入口来加入额外的处理(假设须要的时候)。欢迎反馈意见,特别是那些没有预见过的需求。

对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请參考Gradle文档。

7.3 BuildType and Product Flavor property reference(BuildType和Product Flavor属性參考)

coming soon。。。。= =

对于Gradle的task(DefaultTask,JavaCompile,Copy,Zip),请參考Gradle文档。

7.4 Using sourceCompatibility 1.7(使用(JDK)1.7版本号的sourceCompatibility)

使用Android KitKat(19版本号的buildTools)就能够使用diamond operator,multi-catch,switch中使用字符串,try with resource等等(译注:都是JDK7的一些新特性,详情请參考JDK7文档)。设置使用1.7版本号,须要改动你的构建文件:

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使用1.7或者更高版本号的JDK(Android Gradle plugin也须要0.6.1或者更高的版本号)。

Android Gradle Plugin指南(六)——高级构建定制的更多相关文章

  1. Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Librari ...

  2. Android Gradle Plugin指南(四)——測试

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 5.Testing(測试) 构建一个測试 ...

  3. Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)

    原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 6. Build Vari ...

  4. 读书笔记--Android Gradle权威指南(上)

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...

  5. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  6. Gradle之Android Gradle Plugin 主要流程分析(二)

    [Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要流程分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin ...

  7. Gradle之Android Gradle Plugin 主要 Task 分析(三)

    [Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plu ...

  8. The Android Gradle Plugin and Gradle version-compatibility

    http://tools.android.com/tech-docs/new-build-system/version-compatibility Version Compatibility Post ...

  9. Android AS升级3.1 编译报错:The SourceSet 'instrumentTest' is not recognized by the Android Gradle Plugin.

    AndroidStudio升级到3.1后编译报错:The SourceSet ‘instrumentTest’ is not recognized by the Android Gradle Plug ...

随机推荐

  1. Qt中的对象类型转换(Qstring 转换char*有三种方法)

    char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22"; ch2 = c ...

  2. poj 1159 Palindrome(区间dp)

    题目链接:http://poj.org/problem?id=1159 思路分析:对该问题的最优子结构与最长回文子序列相同.根据最长回文子序列的状态方程稍加改变就可以得到该问题动态方程. 假设字符串为 ...

  3. UVA 103 Stacking Boxes (dp + DAG上的最长路径 + 记忆化搜索)

     Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simple in one or t ...

  4. QT 入门 -QApplication QPushButton QDialog Ui类型的手工使用

    QT 1.工具 assistant  帮助文档 qtconfig  QT配置工具 qmake     QT的make与项目文件智能创建工具 uic          UI界面的设计文件的编译工具 mo ...

  5. STL之如何选择顺序容器

    一.顺序容器的分类 顺序容器:vector向量.list链表.deque双端队列: 优先级最高的是vector向量,它的速度比较快,优点最多: 在程序设计中,容器可以切换: #include < ...

  6. C#_会员管理系统:开发二(会员资料管理界面的‘增删改查’)

    会员资料管理界面: 新建一个窗体,窗体界面和控件如下: 窗体中的控件dgvManager更改FullRowSelect属性(点击选中效果)为:FullRowSelect 会员资料管理界面窗体的详细代码 ...

  7. LGPL与闭源程序

    最近一直在学习 Qt.Qt 有两个许可证:LGPL 和商业协议.这两个协议在现在的 Qt 版本中的代码是完全一致的(潜在含义是,Qt 的早期版本,商业版的 Qt 通常包含有一些开源版本所没有的库,比如 ...

  8. CSS高级技巧 图标字体ICONFONT的使用方法视频

    图标字体  iconfont 这是一种字体,它跟svg 有很大 相似点   它是矢量的,放大缩小不失真的.很且很小. 我们把它成字看来. 字体 在 从ie4就开始支持的.  兼容性很好 唯一麻烦的地方 ...

  9. java的new BufferedReader(new InputStreamReader(System.in))

    流 JAVA /IO 基本小结 通过一行常见的代码讨论:new BufferedReader(new InputStreamReader(System.in)) /*** *** 看到这篇文章挺好的, ...

  10. 比较优势 - MBA智库百科

    比较优势 - MBA智库百科 比较优势 出自 MBA智库百科(http://wiki.mbalib.com/)   这是一个消除歧义页--使用相同或相近标题,而主题不同的条目列表.如果您是通过某个内部 ...