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

时间:2023-03-09 07:43:00
Android官方技术文档翻译——新构建系统概述

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

这篇文章从去年就开始翻译的了,无奈项目较赶我翻译的速度又慢,翻译期间Google官网又对它不断更新,以致拖到了现在。这一篇文档是对Android新构建系统的概述,列出了与它相关的一些文档,以及这个新构建系统的各版本更新日志。这个新的构建系统,其实也就是这个Gradle 上的 Android 插件,如果你的Android Studio项目由于这个插件的版本更新导致无法构建,参阅本篇文档可能会有帮助。

翻译不易,转载请注明CSDN博客上的出处:

http://blog.csdn.net/maosidiaoxian/article/details/44077737

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

新构建系统

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

我们正在研究新的编译系统,以取代里面 ADT 里的构建系统以及 Ant。

(译者注:有关下面列出的文章的译文可以参见我的专栏:http://blog.csdn.net/column/details/android-tech-transla.html)

2013谷歌 I/O 大会: 新的 Android SDK 构建系统

示例均在页底。

发布说明:

1.1.2 (2015/02/26)
  • 当创建用于单元测试的可模拟的(mockable) jar 包时路径会统一化处理。
  • 修复了 build.gradle 中的“archivesBaseName”设置被忽略的问题。
  • 当构建类库的测试应用程序时清单合并工具会有的未处理占位符失败。
1.1.1 (2015/02/24)
  • 现在只有包含了一个Wear 应用程序的变种版本才会触发构建它们。
  • 如果有依赖相关的问题现在将会在构建时期就失败而不是等到调试时期才失败。这将允许运行诊断性的任务 (比如“dependencies”)来帮助解决冲突。
  • 现在又可以调用 android.getBootClasspath() 方法了。
1.1.0 (2015/02/17)
  • 单元测试的支持。单元测试代码运行在在本地 JVM 上,它针对着与常用的 mocking
    框架 (如 Mockito)相兼容的的专用版本的 android.jar。
    • 新的任务: test,testDebug/testRelease,testMyFlavorDebug (如果使用了
      flavors)。
    • 能被识别为单元测试的新源文件夹:

      src/test/java,src/testDebug/java, src/testMyFlavor/java 等等。
    • 用于添加 test-only 依赖项的新配置,例如 

      testCompile 'junit:junit:4.11' 

      testMyFlavorCompile ' some:library:1.0'
    • 暂时不兼容 Jack 编译器 。
    • 新的选项,用于控制“mockable”android.jar 行为的 android.testOptions.unitTests.returnDefaultValues。
  • 在过去名称中包含了“Test”的任务,现在使用“AndroidTest”,比如“assembleDebugTest”改为“assembleDebugAndroidTest”这是为了把它们从单元测试任务中区分出来,例如
    “assembleDebugUnitTest”。
  • 混淆配置文件不再应用于测试 APK。如果启用了压缩(译者注:应该是minifyEnable设为true),压缩主APK
    时会生成一个映射文件,测试 APK 将只有在应用这个映射文件时才会被混淆器处理。
  • 依赖管理的问题修复及更改:
    • 正确地处理了“provided”和“package” 的作用范围,以做它们应该做的。
    • “provided”和“package” 不能用于 Android Libraries项目,否则将生成错误
    • 同步测试和测试依赖树:
      • 如果同一个版本的构件在测试项目本身及测试项目的依赖树中都有,那么它会在测试应用程序中跳过
      • 如果这个构件的版本不同,那么将会生成一个构建错误。Gradle 提供了机制来解决这个问题。
  • 增加在资源合并工具中对任意Dpi资源的限定符的支持。
  • 有大量 Android 模块的项目将会发现项目评估与 IDE 同步的速度有了提升(各人的情况可能会有不同)

1.0.1 (2014/1/9)
  • 修复81638 : 修复 PermGen 在运行 extractAnnotations 时的问题。
  • 修复当导入targetSdkVersion < 16 的库项目时的一个小的清单合并问题
  • 修复当运行在JD8时的屏幕密度顺序问题。
  • 修复82662:禁用传入参数 --no-optimize 到 dx。

1.0.0-rc4 (2014/12/04)
  • 处理在对启用了 multidex 的库项目进行测试时本地jar包的问题
  • 修复路径只有一个字长时的路径正常化问题(用于解压缩 aars)
  • 通过dexOptions.javaMaxHeapSize 修复 Jack和Jill 两个编译器的内存设置。
1.0.0-rc3 (2014/12/03)
  • 对于未解压 AAR包的目标路径基于包含了无效字符的 groupId/artifactId/version 的情况,能够更好地处理。
1.0.0-rc2 (2014/12/03)
  • 通过指定类库的协作,增强清单合并的日志。
  • 清单占位符可以是任何类型,只要这个类型实现了 tostring() 方法。
  • 修正了一个问题:一个 targetSdk 较低的库会由于一个声明的权限,而在不同的清单中都添加权限。
  • 更好地修正能够在嵌入一个微型应用程序时在main 应用程序清单添加新的权限的问题。
  • 添加对密度分割(density splits)和resConfig 属性的冲突的检查。
  • 测试应用程序现在不会使用multi-dexing,除非它们是在测试一个类库项目。
  • 修复一些 lint 的问题:80872808346041680837
1.0.0-rc1 (2014/11/24)
(好吧,这是真正的 RC1版本)
  • 修复资源缩减(resources shrinking)的问题
  • 修复在 publishNonDefault 中的问题
  • 运行在版本为 21以上的设备的安装任务现在重新安装一遍。
  • 使用 aapt 21以上版本的密度拆分,现在使用 --preferred-density 将允许一些位图的密度版本缺失。
  • hasProperty() 现在在由variant API 返回的只读的wrapper上又能正常使用了。
  • 现在在类库项目中设置 applicationId(Suffix) 将会直接报错。
  • 修复在嵌入一个微型的应用程序时可以在其中main app的清单中添加新权限的问题。
0.14.4 (2014/11/19)
  • 这应该被视为 1.0-RC 版本 (可以这么说,见前文)
  • 修正 proguardFiles DSL 的问题。
  • 固定Studio 0.9.x 的兼容性问题
  • 兼容 Gradle 2.1, 2.2 和 2.2.1
0.14.3 (2014/11/18)
  • Variant 特定的 BuildConfigField 或 resValue
applicationVariants.all { variant ->
    variant.buildConfigField "int", "VALUE", "1"
    variant.resValue "string", "name", "value"
}
  • Variant (和 multi-flavor)特有的依赖配置

    multi-flavor 是除了Build Type之外的所有的flavors。只在有两个以上的flavor时才存在。

    当前限制:需要先手动定义配置(运行 dependencies任务可以看到名称)
configurations {
    fooDebugCompile
}

android {
    productFlavors {
        foo { ... }
    }
}

dependencies {
    fooDebugCompile '...'
}

  • 用于嵌入穿戴设备app 的 BuildType/Flavor/Variant 配置(<name>WearApp)
  • 升级到 Proguard 5.1
  • 即将到 1.0 版本:移除的过时的属性和方法
    • BuildConfig.PACKAGE_NAME (使用新的字段名称)
    • android.flavorGroups (使用新属性名称)
    • ProductFlavor.packageName/flavorGroup/testPackageName/renderscriptSupportMode
      (使用新属性名称)
    • BuildType.runProguard/packageNameSuffix/jniDebugBuild/renderscriptDebugBuild/zipAlign
      (使用新的属性名称)
    • Variant.packageApplication/zipAlign/createZipAlignTask/outputFile/processResources/processManifest
      (使用 variant output)
0.14.2 (2014/11/10)
  • 修复multi-dex 的潜在问题:在打包期间,dex 文件可以被重命名,从而导致正在使用的main dex 文件错误。
  • 修复 versionNameSuffix 支持
  • 修复 BuildType.initWith,使它能够复制 shrinkResources 的标志
  • 如果没有提供混淆规则文件,则设置默认的混淆规则文件(SDK/tools/proguard/proguard-android.txt)
  • 用于在apk中包含假的地域的BuildType.pseudoLocalesEnabled标记。

0.14.1 (2014/11/03)
  • 修复覆盖支持。
  • 修复样式(style)引用的资源缩减
  • 从资源缩减中排除嵌入的 Wear micro-app。

0.14.0 (2014/10/31)
  • 需要 Studio 0.9
  • 代码混淆和代码覆盖率现在可以一起使用
  • 支付从 Android 5.0 的设备中拉取覆盖率数据
  • 环境变量 ANDROID_SERIAL (如果存在)
    会限制对序列号匹配的设备的测试的安装或执行
  • Multi-Dex 多持。
    • 需要Build Tools 21.1.0,并且支持库(Support repository)版本为8。
    • 在 defaultConfig,ProductFlavor 或 BuildType上multiDexEnabled
      = true
    • 支持 minSdkVersion 21+ (原生) 或 <21 (延伸模式,通过 com.android.support:multidex:1.0.0
      上的自动依赖)
    • 请参阅multiDex示例。
  • 支持自动删除未使用的资源
    • 目前默认情况下它是关闭的,可以通过在你的发布构建类型(release
      build types)中设置 shrinkResources 为 true进行启用。它需要 minifyEnabled 也设置为true。
  • DSL 和 API 的变化:
    • 重命名几个属性,以使这些属性更统一。
      • BuildType.runProguard                 ->  minifyEnabled
      • BuildType.zipAlign                    -> zipAlignEnabled
      • BuildType.jniDebugBuild               -> jniDebuggable
      • BuildType.renderscriptDebug           -> renderscriptDebuggable
      • ProductFlavor.renderscriptSupportMode -> renderscriptSupportModeEnabled
      • ProductFlavor.renderscriptNdkMode     -> renderscriptNdkModeEnabled
    • 通过 variant 和 variantFilter API 所查询到的 BuildType/ProductFlavor/SigningConfig
      现在都是只读的。
      • 这些对象一直是全局对象,并且改变它们将会在其它的变种(variants)产生副作用
      • 合并后的定制版本(flavor)仍然是独立的变种版本(per-variant),且可以被修改
    • Variant 及 VariantOutput API 的变化
      • 获取密度(density)或 ABI 筛选器的值现在可以通过 

        output.getFilter(com.android.build.OutputFile.DENSITY) 

        output.getFilter(com.android.build.OutputFile.ABI) 来实现
      • 请参阅densitySplit示例


0.13.3 (2014/10/06)
0.13.2 (2014/09/26)
  • 修复了清单合并工具的问题,这个问题可能会把错误的uses-sdk 节点放到清单中。
0.13.1 (2014/09/22)
  • 增加从测试中合并 Instrumentation 元素的功能
  • 修复 uninstallAll 任务的问题
  • 修复错误的配置可能会导致变种版本没有输出,并因此影响项目评估的问题。
  • connectedCheck 任务现在会在没有发现测试时返回失败的结果。
0.13.0 (2014/09/18)
  • 需要 Gradle 2.1
  • 现在可以提供一个清单(src/androidTest/AndroidManifest.xml) 用于测试的应用程序啦
  • Library 项目里的AndroidManifest 文件现在可以包含占位符。如果它们不能在库项目中被处理,它们将会在使用这个库的项目(原文为consuming project)中被处理。
  • AndroidManifest 占位符现在可以在Product Flavors 和 Build Types上设置。
  • Variant.getMappingFile() API 现在允许查询混淆映射文件。
  • 用于由Density 和 ABI 而产生的多APK的新分割机制。文档见这里
  • Bug 修复:
    • 修复被使用的混淆文件(原文为consumer proguard file)(来自 aar 文件)会在第一次构建时被忽略的问题。
    • 修复 aar 输出名称的问题,现在变种版本(variants)不会再互相改写这个名称
    • 正确合并 declare-styleable,以包含所有的 attrs。
    • 修复在资源合并过程中资源字符串的空格问题。

0.12.2 (2014/07/16)
  • 修复穿戴应用程序的打包问题
  • 修复 build.gradle 中 ${applicationId} 占位符不起作用的问题。
  • 自定义 Java 代码生成的步骤现在是源代码生成步骤的一部分 (修复 IDE 集成)。
  • 为解决可能存在资源竞争的情况,把未解压的aar 移回每个项目里面作为临时的解决方法。
0.12.1 (2014/07/01)
  • 修复在清单中合并的package属性的问题。
0.12.0 (2014/06/25)
  • 新的 IDE 模型,需要Studio Beta 0.8
  • 修复清单合并里的问题。
0.11.1
  • 修复当构件(artifact) 依赖于Maven*仓上的android.jar 构件时的问题。
  • 修复在生成的清单中自定义的命名空间声明丢失的问题。
  • 修复在清单合并工具中权限组验证的问题。

0.11.0
  • 更新 IDE 模型,需要Studio 0.6
  • 支持 Gradle 1.10,1.11,1.12。
  • 新的清单合并工具现在作为默认的合并工具。
    • 大量的问题修复。
    • 新增能够在flavor对象上添加用于清单文件的自定义占位符

      defaultConfig {

      manifestPlaceholders = [activityName:"defaultName"] 

      }
  • 将文件及文件夹移到构建目录(buildDir)中以便更好地进行IDE集成。
  • 现在可以发布生成的 APK。发布的配置和库一样,使用 defaultPublishConfig 和 publishNonDefault 标志。
  • API及DSL 上的重大更改:
    • ProductFlavor.packageName 现在是 applicationId。packageName 的setters
      暂时仍保留,但会在 1.0版本时移除
    • ProductFlavor.testPackageName 现在是 testApplicationId。 testPackageName 的setters暂时仍保留,但会在1.0版本时移除
    • ProductFlavor 上的 minSdkVersion/targetSdkVersion 现在是一个ApiVersion 实例,而不再是一个整数。
      • DSL 的影响
        • 不能在 DSL 中使用setter,请使用方法来代替。基本上,不要使用“=”

          flavor {minSdkVersion = 9 }

          替换为:

          flavor { minSdkVersion 9 }
        • 这是由于 groovy 的限制,防止过多的setters。
      • interface ApiVersion {

            int getApiLevel();

            int getCodename();

        }

0.10.4
  • 修复清单合并的 bug(包括 application 节点在生成的清单中的正确位置)
  • 修复在库项目中的产品定制(flavors)如果使用不同的饭锅,将无法正确地生成 R 类的问题。
  • 修复有关 XML 文件解码时解析UTF8的BOM 的问题。
  • Lint 问题修复。
0.10.3
  • 由于推送期间的一个问题,没有发布该版本。
0.10.2
  • 更多关于清单合并的问题修复,包括更好地处理 minSdkVersion。
  • 更多的lint 问题修复。
  • 修复增量编译dex 的支持(仍然需要被启用)
0.10.1
  • 修复关于新清单合并工具的几个问题。欢迎继续向我们反馈问题。
  • 修复卸载任务的问题。
  • 大量的 lint 修复及新的检查。例如,你可以在你的库中使用lint 强制让资源有前缀。
0.10.0
  • 支持 Gradle 1.10,1.11,1.12。
    • Gradle 1.12 将需要 Studio 0.5.8
  • 新的清单合并工具。
    • 默认情况下禁用。可以通过 android.useOldManifestMerger = false进行启用
    • 请参阅在这里的文档。
  • 通过 Jacoco 实现测试代码覆盖率的支持
    • 通过 testCoverageEnabled = true在测试的构建类型中进行启用
    • HTML 和 XML 报告生成的路径为 build/reports/coverage
    • 通过

      android {

        jacoco {

          version = '0.6.2.201302030002'

        }

      }进行Jacoco版本的配置
    • 已知的问题: 不兼容使用 Dagger。
  • 资源前缀支持。
    • 可以通过以下配置在你的库中设置前缀:

      android {

        resourcePrefix 'mylib_'

      }
    • 用 Studio 0.5.8 启动,Lint 会警告用户资源没有使用前缀。(正在进行中)
  • Pre-dex 缓存(位于 rootProject/build)。可以跨模块及变种版本进行共享。应该会加快构建。
  • 加载的aar会被解压在一个单独的位置中 (在 rootProject/build 下),以便在使用它的所有模块之间共享。可能会加速构建。
  • 升级到 Proguard 4.11. 修复增量编译问题。
  • 修复aidl文件的增量编译问题。
  • 访问混淆的任务的变种版本 API 现在位于名称为“obfuscation”的一般节点下面。
0.9.2
  • 因为需要调查一些旧的问题,基于 Aapt 的 PNG 处理器现在又是默认的处理器了。
  • flavorGroups 已经被重命名为 flavorDimensions,并且
    DSL 也已经更新。旧的DSL在 1.0 版本对它进行移除之前,仍然可用。

0.9.1
  • 现在在打包发生文件冲突时,可以包含一个文件(以前只能把冲突的文件排除出去):

android.packagingOptions {

          pickFirst 'META-INF/foo.txt'

      }

  • 新的PNG 处理器。
    • 在处理多个文件时应该会快很多
    • 解决压缩处理过的 png 比原始文件大很多的问题
    • 可以恢复使用旧的压缩处理工具: android.aaptOptions.useAaptPngCruncher
      = true

      警告:我们已经知道了关于新的处理器生成的PNG图片会使应用程序崩溃的报告。
  • 该插件现在强制所有库依赖项都有一个唯一的包名称。
    • 如果要禁用这一项,你可以使用 android.enforceUniquePackageName
      = false
    • 警告: 这个禁用功能会在 1.0 中移除
  • 修复的问题:
    • 生成的 POM 文件现在会有正确的依赖,即使 pom 对象在 build.gradle中被操纵
    • libraryVariant API 现在提供了对flavors列表的访问。
    • 修复了库清单的修改不触发新的清单合并的问题。
    • BuildConfig.VERSION_NAME 即使它的值在当前的变种版本(variant)中没有被设置,它也总是会自动生成。
    • BuildConfig 现在会打包在库中。这需要你所有的库都有唯一的包名称。
      • 如果你对强制包名称唯一的功能进行禁用,那么你应该禁用 BuildConfig 的打包: android.packageBuildConfig
        = false
      • 警告: 这个禁用功能会在 1.0 中移除
0.9.0
  • 兼容 Gradle 1.10 和 1.11
    • 使用 Gradle 1.11 需要 Android Studio 0.5.0
  • 重大更改
    • 用于库项目的DSL现在和应用程序项目的一样。
      • 你可以在buildTypes { ... }容器创建或配置更多的构建类型。
      • 您可以使用productFlavors { ... }容器创建product
        flavors。
      • 你可以使用signingConfigs { ... }容器创建
        signingConfigs。
    • instrumentTest 改名为 androidTest
      • 这是本着测试的内容来改名的:运行在 Android 上的所有类型的测试(单元测试、 仪器仪表试验和后来的 uiautomator) 运行的测试
      • 默认的文件夹名称和android.sourcesets对象都被重命名。
      • 如果要迁移,你可以选择重命名文件夹,或者是
        sourcesets指向旧的位置
    • 现在 Library Projects的依赖配置为 provided, compile,
      和 publish。
  • 库项目发布
    • 现在可以发布库的变种版本(variant),尽管默认情况下只有默认的variant
      被发布。。这项工作还在进行中。
    • TL;DR: 这将 不会修复bug 52962,这个bug是
      库的release variant 总是存在被占用的情况。
    • 它允许您手动依赖一个库的指定的varaint。请参阅文档
    • 通过 android.defaultPublishConfig修改默认的发布配置
    • 通过 android.publishNonDefault
      = true 启用其他variants的发布
    • 通过 compile
      project(path: ':project', configuration: 'flavor1Debug') 引用指定的variant
    • 请参阅文档
  • 跳过一些变种版本(variant)的功能。这允许你不去创建构建类型或flavors的所有可能组合的版本。
    • DSL 是:android.variantFilter { variant -> ... }
    • 该对象传入一个实现了以下方法的闭包:
      • public void setIgnore(boolean ignore);
      • @NonNull public ProductFlavor getDefaultConfig();
      • @NonNull public BuildType getBuildType();
      • @NonNull public List<ProductFlavor> getFlavors();
    • 如果需要跳过 variant,可以调用setIgnore(true)。
    • 不能在 afterEvaluate中使用
  • 发布和apk的配置不会对编译有任何的扩展,综合起来的内部配置仍然会正确地设置(这应该不会产生任何影响)。
  • 修复变种版本所特定的源文件夹不会被用于java编译的问题。
  • 修复一些Renderscript支持模式的兼容性问题。需要Build Tools 19.0.3
  • 其它大量问题修复。
0.8.3
  • 修复 Studio 集成的问题
0.8.2
  • 修复增量编译中关于 BuildConfig 字段和生成的 Res 值的问题。
0.8.1
  • 增加通过 DSL 创建资源值的功能。
  • 现在你可以在build types和product flavors 中使用 resValue <type>,<name>,<value>, 和你在 buildConfigField中使用一样。
  • 修复在activity-alias:targetActivity中的包重命名的问题
  • Variant API 的改进:
    • packageName 返回 variant 的包名
    • versionCode 返回(app或test)的 variant 的 versionCode
    • versionName 返回(app或test)的 variant 的 versionName可能会返回 null。
  • 其它问题修复
0.8.0
  • 需要 Gradle 1.10
  • 需要Build-Tools 19.0.0+
  • 修复 issue 64302:添加渲染脚本支持模式的 jar 到 IDE模型的依赖中。
  • 修复 issue 64094:buildConfigField 现在可以替换同一个type/flavor里的前一个值。
  • 在类库项目中添加 NDK prebuilts 的支持。
  • 并行化 pre-dexing 的处理以加快清理构建。
  • 重新启用增量dex编译 (尽管在一些构建当中它会被自动禁用,比如在某些还不支持dx 的情况下。
  • 为仅编译(不打包)的依赖增加“provided”依赖范围。

    每个 buildtype 和flavor的额外范围也都可用 (debugProvided,myFlavorProvided,等等)
  • Lint 的改进:
    • 新的“lintVital”任务,作为assembling release variants的一部分自动运行,只检查致命的严重问题
    • lint 里的Java 语法分析器替换为 ECJ ;检查将会更快,并修复了lint 会在某些源码里的构造方法中卡住的bug
    • Lint HTML 报告现在将会写入指向源代码文件和图片的链接,这些链接以报告所在位置的相对路径作为URL。
  • Variant API 的改进:
    • getPreBuild() 返回该variant的构建前任务
    • getSourceSets() 返回这个任务的sourcesets,并且是从低优先级到高优先级排序的。
    • createZipAlignTask(String taskName, File inputFile, File outputFile)

      该方法会创建并返回一个新的zipalign任务。如果您定义了自定义 APKs 签名的插件,则会非常有用。

      这也使得assemble任务依赖于新的 zipalign 任务,并使得 variant.getOutputFile() 返回 zipalign 任务的结果。
    • project.android.registerJavaArtifact() 现在会得到一个 Configuration
      对象,用于把依赖传给IDE请参阅 artifactApi 示例。
0.7.3
  • 重新启用 Java6 支持
0.7.2

注: 0.7.2 版本需要 Java7。这是一个失误。请使用 0.7.3 版本来代替。
  • 修复了混淆相关的问题。
  • 在库项目中添加了packagingOptions支持。
  • 解决了测试库项目时本地 jar包的问题。
  • 修复了有关 variant.addJavaSourceFoldersToModel 的BUG
  • 为预生成的 .so 文件向源文件集增加jniLibs文件夹。
  • Lint 修复的问题:
    • 修复 RTL 探测器的问题
    • 修复 HTML 报告的问题
新的示例: ndkJniLib, genFolderApi2

0.7.1
  • 用于忽略重复的文件的DSL

    android { 

      packagingOptions { 

        exclude 'META-INF/LICENSE.txt' 

      } 

    }
  • 修复在lint任务中触发变种版本(variants)编译的问题。

0.7.0
  • 需要 Gradle 1.9
  • 需要 Studio 0.4.0
  • 如果你定义了flavor,现在会有一个 variant 特定的源文件夹。
    • 针对应用程序的更新 (不是库或测试)。名字为src/flavorDebug/...或src/flavor1Flavor2Debug/
      • 请注意驼峰命名法,第一个字母要小写。
    • 它的组件(res、manifest 等等)比构建类型或flavors的组件有更高的优先级。
    • 当多个flavor dimension 被用到的时候,还会有一个“flavor 组合”的源文件夹。例如src/flavor1Flavor2/
      • 注意,这是对 *所有的* dimensions的全部组合而言的。
      • 它的优先级高于single-flavor sourcesets,但低于build-types的。
  • Lint的改进
    • 改进lint 集成。Lint现在是作为 check 任务的一部分来运行,并将分析所有的variants,然后合并分析的结果并创建一个报告来列出每个错误所对应的variant
      (除非某个错误出现于所有的variant)。你也可以在特定的variant上运行lint,例如 lintDebug 或 lintFreeRelease。
    • Lint将不再报告 AAR 库里面的错误。此版本的插件也增加了一些新的lint 检查。
    • 新的 DSL 允许从 build.gradle 中配置lint。它在Studio中读取和使用
    • 请参阅 '基本' 示例。
  • 构建配置改进和 DSL 的变化。
    • buildConfigLine改为buildConfigField
    • 每个属性只有一个字段
    • 预计有三个值,type, name, value。
    • 允许重写flavor或build type里的值。
    • 请参见“基本”示例。
  • 构建配置现在自动包含更多常量,如PACKAGE_NAME、 VERSION_CODE、 VERSION_NAME、 BUILD_TYPE、 FLAVOR及 FLAVOR_<group>(如果有多个flavor 维度)。
  • 切换到 ProGuard 4.10
  • 增加测试混淆(进行混淆处理)过的应用程序的功能。
  • 对product Flavor(和 defaultConfig)有新的参数选项,允许通过 aapt 的-c 选项过滤资源
    • 您可以通过 DSL 传入单个值 (resConfig) 或多个值 (resConfigs)。
    • 所有从默认配置和flavors的值都会组合起来并传给 aapt。
    • 请参见“基本”示例。
  • Jar 文件现在会进行pre-dexed(预dex编译?)以便被更快地编译为dex。
  • 当前已禁用增量的dex编译,因为我们已经发现了一些问题。
  • Renderscript 支持模式。
    • 请参阅示例“rsSupportMode”
  • 在defaultConfig和flavors上的新的测试相关的 DSL 的属性:
    • testHandleProfiling:boolean 类型,将自动填入清单中的instrumentation节点里的handleProfiling属性。
    • testFunctionalTest: boolean 类型,将自动填入清单中的instrumentation节点的functionalTest属性。
  • 用于添加新生成的源文件夹的API:
    • 为模型(用于 IDE 支持)添加一个源文件夹:
      • variant.addJavaSourceFoldersToModel(sourceFolder1, sourceFolders2,...)
    • 自动在任务上添加依赖,设置 JavaCompile 任务的输入和到模型的传播文件夹:
      • variant.registerJavaGeneratingTask(task, sourceFolder1, sourceFolders2,...)
    • 请参阅示例“genFolderApi”
  • 用于在variants上添加额外的文件的API。这会让你注册 Java 或 Android 的构件,例如其中的测试构件。
    • 有关该 API 请参见示例“artifactApi”(示例不表示被使用,而只是为了测试)。
  • 修复了在清单合并工具处理不同的包名称时parentActivityName的问题。
  • 允许jar文件中 META-INF 文件夹里的文件可以被打包进 apk 。

0.6.3
  • 修复 ClassNotFoundException:在0.6.2版本引入的MergingException
0.6.2
  • Lint 现在可以从local.properties里的 sdk.dir 配置的SDK主目录获取
  • 现在,当使用一个不支持的Gradle版本时所显示的错误信息将会说明怎么去升级 Gradle wrapper
  • 合并资源文件时将不再把它们的源文件的标记作为注释合并到 R 文件
  • 项目路径可以包含 “--”(两个英文的破折号)
  • 提供与 Android Studio 的集成的一些内部改变

0.6.1

  • 修复当执行“check”任务时,有关“lint”任务的问题
0.6.0
  • Gradle 1.8 现在是支持的最低版本
  • 编译 Java 代码的默认编码为 UTF-8
  • 现在,用户可以指定用来编译 Java 代码的编码
  • 修复了 Gradle 1.8 特定的一些 bug
    • 解决导入依赖不全的项目的问题
    • 解决编译带 AIDL 文件的项目的问题
设置要用于编译 Java 代码的编码很简单,如下:
android {
    compileOptions.encoding = "UTF-8"
}

0.5.7
  • 支持对库项目的混淆。注意,库项目当前的 DSL 属性 “proguardFiles”现在是在混淆库项目的代码时设置混淆规则文件用。新的属性 “consumerProguardFiles” 则是用于把一个规则文件打包时 aar 。
  • 提升 IDE 支持,其中包括加载包含错误依赖的项目,以及用于生成 Java 代码的锚任务
  • 新的hook任务: preBuild和prebuild<VariantName>
  • 首次 lint 集成。这项工作还在进行中,因此这个lint 任务没有被加入到check任务中。
  • 启用对 1.8 的兼容 (虽然你们会注意到,在0.5.7发布之后,我们随后发布了 0.6.0 以处理额外发现的 1.8 的问题。
0.5.6
  • 启用对 Gradle 1.7 的支持
0.5.5
  • 修复一个问题,以防止使用10.8.1版本的构建工具
  • 访问variants容器不会强制创建该任务。

    这意味着在脚本解析阶段(还没开始运行任务) android.[application|Library|Test]Variants将会是空的。若要使用它,请使用 .all 而不是 .each
  • 库项目只打包它自己的资源到 aar 中。
  • 修复资源合并中的增量问题。
  • 其它 bug 修复。
0.5.4
  • 修复declare-styleable 的增量编译问题
0.5.3
  • 修复在 PrepareDependenciesTask 中崩溃的bug
0.5.2
  • 针对命令行工具有更好的错误输出,特别是 在衍生线程并行运行的情况
  • 修复在合并的资源文件中由于有windows 路径而产生的一个问题。
0.5.1
  • 修复依赖检查器的问题。
0.5.0 中有什么新功能
  • 修改了IDE Model 并且不与早期版本兼容!要求为 Android
    Studio 0.2.0 及以上版本。
  • 修复 IDE 模型以包含输出文件,即使它已经通过
    DSL自定义。还修复了 DSL 在variant 对象上get/set 输出文件,因此没有必要去使用 variant.packageApplication 或
    variant.zipAlign 了
  • 修复了依赖解析,以为了我们能够把默认配置, 构建类型,flavor(s)的组合一起解析,而不是单独解析。
  • 修复了库项目的测试的依赖以正确地包含库项目自己的所有依赖。
  • 修复当两个依赖有同样的leaf名称的情况。
  • 修复混淆规则文件不能被应用到flavors上面的问题。
0.4.3
  • 为所有 png 文件,而不仅仅是.9.png 启用资源缩减
  • 修复res/和assets/中无资源文件的处理。
  • 修复当进行增量aidl编译时由于方法名称出错(Groovy 搞的......)导致的崩溃问题
  • 当应用程序的包名称已经被更改时清理旧的R类。
0.4.2
  • 修复资源合并的增量支持。
  • 修复所有的png会以不限制线程数量的并行进行处理, 导致无法运行
    aapt 的的问题。
  • 修复对在aaptOptions中ignoreAsset的支持
  • 对于合并清单失败的情况,添加了更多日志打印。
  • 向 TestServer API添加了flavor名称。

0.4.1
  • 修复的问题
    • “package”范围更名为“apk”
      • 变种版本(variants)为“debugApk”、“releaseApk”、“flavor1Apk”等......
      • 现在能够正确地支持在构建中允许package-only的依赖。
      • 只有Jar 依赖可以是 package-only。库项目必须被添加到编译范围。
    • 修复 [application|library|test]Variants API (在0.4版本总是返回空)
    • 修复在混淆中总是提示Manifest重复的问题。
0.4
  • 系统要求
    • Gradle 1.6
    • Android SDK 的Build Tools 组件版本 17.0.0 或以上
  • 新功能
    • 用于第三方设备供应商及测试服务器运行和部署测试的 API。API 是 @Beta 版的
    • 支持 ProGuard 4.9
      • 通过 BuildType.runProguard 来启用
      • 通过 BuiltType.proguardFile 或 ProductFlavor.proguardFile 添加混淆配置文件。
      • 默认的混淆文件可以通过 android.getDefaultProguardFile(name) 进行访问,这个name是“proguard-android.txt”或“proguard-android-optimize.txt”
    • IDE Tooling支持实现了 Gradle 1.6 自定义模型
  • 修复BUG及其它更改
    • deviceCheck 重命名为 connectedCheck
    • 修复对 assets/ 的子文件夹的支持
    • 修复在Android 库有本地 Jar 依赖项的情况下的问题
    • 修复通过 DSL重命名包名的问题,确保资源在新的命名空间中被编译
    • 修复 DSL ,添加了“android”范围内的getSourceSets。

0.3
  • 系统要求:
    • Gradle 1.3+ (在 1.3或1.4 上测试过)。不会与 1.5 兼容。否则将需要进行更新。
    • Android Platform Tools 16.0.2+
  • 新功能:
    • Renderscript 支持。
    • 支持多资源文件夹。请参见 “multires”示例。
      • PNG crunch(译者注:这个我以前没见过,不知道怎么翻译,所以保留)现在是以增量及并行方式进行。
    • 支持多asset文件夹。
    • 支持库项目中的asset文件夹。
    • 支持由 BuildType 提供的 versionName 后缀。
  • 测试
    • 默认用于测试的 sourceset 现在是 src/instrumentTest(用于flavors的instrumentTest<Name>)
    • Instrumentation 测试现在是:
      • 由“deviceCheck”开始,而不是“check”
      • 在所有连接的设备上并行运行。
      • 如果任何测试失败,则会中断整个构建。
      • 为每一个flavor或项目生成一个 HTML 报告,但同时也会进行聚合。
    • 新插件“androdi-reporting”可以把整个项目的android 测试结果进行聚合。请参见 “flavorlib” 示例。
  • DSL 的改进:
    • 把androdi.target 替换为 android.compileSdkVersion,以避免 targetSdkVersion 混淆
    • 签名信息现在是一个 SigningConfig 对象,并且可以跨 BuildType 和 ProductFlavor 进行复用
    • 可以重新设置一个完整的 sourceSet 的能力。请参见 “migrated”示例。
    • 用来处理 Build Variants 的API。
  • 修复的问题:
    • 默认 Java 编译目标设置为 1.6。
    • 修复当库项目和应用程序项目包名称相同的情况下 R 类的生成。
0.2
  • 修正了对 windows 的支持。
  • 添加了对自定义 sourceset 的支持。(http://tools.android.com/tech-docs/new-build-system/using-the-new-build-system#TOC-Working-with-and-Customizing-SourceSets)
  • 添加了对每个配置中的依赖的支持。
  • 修正了对本地 jar 文件的依赖的支持。
  • 新的例子“migrated”和“flavorlib”


当前0.9.x版本的限制

  • NDK 集成非常基础,有限,且无文档参考。参照例子
  • 没有代码覆盖支持
  • 清单合并非常有限。
  • 库项目只能发布它们的release variants。
你可以下载一个小的捆绑包,它包含了几个不同的 (大部分是空的) 项目,那些项目演示了一些构建特性:见这里

较旧的文档,需要更新。

你可以做什么?

发送反馈,多多益善。以及 bug 报告。非常感谢!

贡献

本项目完全在 AOSP(Android Open-Source Project) 下开发。可以访问 source.android.com 查看如何获取源代码。

有关如何构建、 调试和测试 Gradle 插件的说明,请参见构建 Android Gradle 插件

可以通过标准的AOSP工作流贡献补丁,或使用adt-dev进行交流。