Android Gradle Plugin指南(六)——高级构建定制
原文地址: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指南(六)——高级构建定制的更多相关文章
- Android Gradle Plugin指南(三)——依赖关系、android库和多项目配置
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Librari ...
- Android Gradle Plugin指南(四)——測试
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Testing 5.Testing(測试) 构建一个測试 ...
- Android Gradle Plugin指南(五)——Build Variants(构建变种版本号)
原文地址:http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants 6. Build Vari ...
- 读书笔记--Android Gradle权威指南(上)
本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 最近看了一本书<Android Gradle 权威指南>,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所 ...
- 读书笔记--Android Gradle权威指南(下)
前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...
- Gradle之Android Gradle Plugin 主要流程分析(二)
[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要流程分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plugin ...
- Gradle之Android Gradle Plugin 主要 Task 分析(三)
[Android 修炼手册]Gradle 篇 -- Android Gradle Plugin 主要 Task 分析 预备知识 理解 gradle 的基本开发 了解 gradle task 和 plu ...
- The Android Gradle Plugin and Gradle version-compatibility
http://tools.android.com/tech-docs/new-build-system/version-compatibility Version Compatibility Post ...
- 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 ...
随机推荐
- USB CCID协议和PC/SC标准
CCID是USB Chip/Smart Card Interface Devices,也就是USB芯片智能卡接口设备,是USB规范下的一种设备类型.就像HID设备一样,需要参考USB规范来写固件程序来 ...
- wchar_t是内置还是别名(亲测有效:wchar_t在windows下是16位整数的别名,在linux等平台下是32位整数的别名。MSVC2008开始默认是/Zc:wchar_t)
接前一篇C++ ABI之名字改编(以Qt为例),继续看看C++名字改编相关的问题. 问题 MSVC 有一对选项/Zc:wchar_t- 与 /Zc:wchar_t控制wchar_t 于是 wchar_ ...
- IOS SWIFT基本画图教程
OS SWIFT基本画图教程 其实这是以前做过的一个例子,方便自己参考的代码!希望对大家也有点参考. 首先,建立一个Swift类,继承UIView这个类,然后重写 func drawRect(rect ...
- 倒计时IE10+
直接上代码,dome 里边有我做的列表倒计时(多个同时倒计时)下面是我做的例子,颜色可以自己设置的 <p name="daojishi" style="width: ...
- 关于C++ 的eof
#include<iostream> #include<fstream> #define MAXSIZE 1000 using namespace std; int main( ...
- ring0和ring3的区别
现在探讨内核程序和应用程序之间的本质区别.除了能用WDK编写内核程序和阅读一部分Windows的内核代码之外,我们还需要了解它们的本质是什么,它们和我们熟悉的应用程序有什么区别. Intel的x86处 ...
- html中事件处理中的this和event对象
在用js编写页面事件处理代码时,会经常涉及到this和event对象,但有时在采用不同的事件处理,尤其是在与自定义的对象关联时,这些对象的指向变的有些复杂. 本文来详细介绍下各种场景下 这些对象 真正 ...
- 基于visual Studio2013解决算法导论之024双向链表实现
题目 双向链表的实现 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...
- 《Java并发编程实战》第十四章 构建自己定义的同步工具 读书笔记
一.状态依赖性的管理 有界缓存实现的基类 @ ThreadSafe public abstract class BaseBoundedBuffer<E> { @GuardeBy( &quo ...
- Sublime 脚本 配置 (lua 和 JavaScript篇)
{ "cmd" :["C:/Lua/Lua.exe","$file"], "file_regex" :"^(? ...