文档章节

Android Gradle Plugin指南(六)——高级构建定制

s
 spring55555
发布于 2015/02/03 11:49
字数 1674
阅读 55
收藏 1

原文地址: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文件中通过脚本很容易使用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或者更高的版本)。

本文转载自:http://blog.csdn.net/qinxiandiqi/article/details/37925629

s
粉丝 4
博文 22
码字总数 6375
作品 0
黄浦
程序员
私信 提问
Android JNI学习(二)——实战JNI之“hello world”

本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Native相互调用 Android JNI学习(四)——JNI的常用方法...

隔壁老李头
2018/05/09
0
0
Gradle入门系列(五)——Gradle其它模块与Plugin插件

Gradle其它模块 一、Settings类 settings.gradle(对应Settings.java)决定哪些工程需要被gradle处理,占用了整个gradle生命周期的三分之一,即Initialzation初始化阶段。 二、SourceSet类 ...

GitLqr
01/05
0
0
Android Gradle 常用使用场景实现方式的总结

Gradle 作为一款灵活多变的构建插件,与 Android Studio 的结合,能够解决过去使用 Eclipse 开发 App 时所遇到的诸多问题。同时,基于 Groove 这样一款 DSL 语言的脚本特性,记住各种语法显然...

亦枫
2018/10/29
0
0
读书笔记--Android Gradle权威指南(上)

最近看了一本书《Android Gradle 权威指南》,对于 Gradle 理解又更深了,但不想过段时间就又忘光了,所以打算写一篇读书笔记,将书中一些我个人觉得蛮有用的点记录、总结一下。 前言 首先,...

请叫我大苏
2018/05/24
0
0
Android Gradle和Gradle插件区别

一、引言 1、什么是Gradle?什么是Gradle插件? build.gradle中依赖的classpath 'com.android.tools.build:gradle:2.1.2'和gradle-wrapper.properties中的distributionUrl=https://services.gr......

AwesomeQA
2017/10/22
57
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot 2 实战:使用 Spring Boot Admin 监控你的应用

1. 前言 生产上对 Web 应用 的监控是十分必要的。我们可以近乎实时来对应用的健康、性能等其他指标进行监控来及时应对一些突发情况。避免一些故障的发生。对于 Spring Boot 应用来说我们可以...

码农小胖哥
22分钟前
2
0
ZetCode 教程翻译计划正式启动 | ApacheCN

原文:ZetCode 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远。 ApacheCN 学习资源 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 ...

ApacheCN_飞龙
32分钟前
2
0
CSS定位

CSS定位 relative相对定位 absolute绝对定位 fixed和sticky及zIndex relative相对定位 position特性:css position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left属性则...

studywin
41分钟前
5
0
从零基础到拿到网易Java实习offer,我做对了哪些事

作为一个非科班小白,我在读研期间基本是自学Java,从一开始几乎零基础,只有一点点数据结构和Java方面的基础,到最终获得网易游戏的Java实习offer,我大概用了半年左右的时间。本文将会讲到...

Java技术江湖
昨天
5
0
程序性能checklist

程序性能checklist

Moks角木
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部