Android Gradle 插件 2.2.0(2016 年 9 月)

依赖项:
新变化:
  • 使用 Gradle 2.14.1,其中加入了一些性能改进和新功能,并修复了在使用 Gradle 守护程序时允许获取本地特权的安全漏洞。如需了解详情,请参阅 Gradle 版本说明
  • 利用 externalNativeBuild {} DSL,Gradle 现在可让您链接到自己的原生源代码,并使用 CMake 或 ndk-build 编译原生库。构建原生库后,Gradle 会将它们打包到您的 APK 中。如需详细了解如何在 Gradle 中使用 CMake 和 ndk-build,请参阅向您的项目添加 C 和 C++ 代码一文。
  • 当您从命令行运行 build 时,Gradle 现在会尝试自动下载项目依赖但缺失的所有 SDK 组件或更新。如需了解详情,请参阅 Gradle 自动下载缺失软件包部分。
  • 新的实验性缓存功能可让 Gradle 通过 dex 预处理、存储和重复使用库的 dex 预处理版本来缩短构建时间。如需详细了解如何使用此实验性功能,请参阅构建缓存指南。
  • 通过采用在一个任务中处理压缩、签名和压缩对齐操作的新默认打包管道,提升了构建性能。您可以通过在 gradle.properties 文件中添加 android.useOldPackaging=true 来恢复使用旧的打包工具。在使用新的打包工具时,zipalignDebug 任务将不可用。不过,您可以调用 createZipAlignTask(String taskName, File inputFile, File outputFile) 方法来自己创建一个。
  • 除了传统的 JAR 签名,APK 签名现在还会使用 APK 签名方案 v2。所有 Android 平台都接受生成的 APK。如果在签名后修改这些 APK,那么它们的 v2 签名便会失效,并会阻止在设备上安装。如需停用此功能,请将以下代码添加到模块级 build.gradle 文件中:

    Groovy

    android {
      ...
      signingConfigs {
        config {
          ...
          v2SigningEnabled false
        }
      }
    }
          

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
          
  • 对于 MultiDex build,您现在可以使用 ProGuard 规则来确定 Gradle 应该将哪些类编译到应用的主 DEX 文件中。因为 Android 系统在启动应用时会先加载主 DEX 文件,所以您可以在启动时通过将它们编译到主 DEX 文件中来确定某些类的优先级。在您专门为主 DEX 文件创建 ProGuard 配置文件后,请使用 buildTypes.multiDexKeepProguard 将该配置文件的路径传递给 Gradle。使用此 DSL 与使用 buildTypes.proguardFiles 不同,后者会提供应用的常规 ProGuard 规则,并且不会指定主 DEX 文件的类。
  • 添加了对 android:extractNativeLibs 标志的支持,此标志可在应用安装到设备的过程中缩小应用的大小。如果您在应用清单的 <application> 元素中将此标志设置为 false,Gradle 会将未压缩的对齐版原生库和 APK 打包在一起。这可防止 PackageManager 在安装过程中将原生库从 APK 复制到设备的文件系统,同时还有助于减小应用增量更新。
  • 您现在可以针对产品变种指定 versionNameSuffixapplicationIdSuffix。(问题 59614
变更:
  • getDefaultProguardFile 现在会返回 Android Plugin for Gradle 提供的默认 ProGuard 文件,并且不再使用 Android SDK 中的那些文件。
  • 改进了 Jack 编译器的性能和功能:
    • 在将 testCoverageEnabled 设置为 true 后,Jack 现在支持 Jacoco 测试覆盖率。
    • 改进了对注解处理器的支持。类路径上的注解处理器(例如任意 compile 依赖项)会自动应用于 build。您还可以在 build 中指定注解处理器,并通过在模块级 build.gradle 文件中使用 javaCompileOptions.annotationProcessorOptions {} DSL 来传递参数:

      Groovy

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className 'com.example.MyProcessor'
              // Arguments are optional.
              arguments = [ foo : 'bar' ]
            }
          }
        }
      }
          

      Kotlin

      android {
        ...
        defaultConfig {
          ...
          javaCompileOptions {
            annotationProcessorOptions {
              className = "com.example.MyProcessor"
              // Arguments are optional.
              arguments(mapOf(foo to "bar"))
            }
          }
        }
      }
          

      如果要在编译时应用注解处理器,但不将其包含在 APK 中,请使用 annotationProcessor 依赖项范围:

      Groovy

      dependencies {
          compile 'com.google.dagger:dagger:2.0'
          annotationProcessor 'com.google.dagger:dagger-compiler:2.0'
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          

      Kotlin

      dependencies {
          implementation("com.google.dagger:dagger:2.0")
          annotationProcessor("com.google.dagger:dagger-compiler:2.0")
         // or use buildVariantAnnotationProcessor to target a specific build variant
      }
          
    • 如需查看您可以设置的参数的列表,请从命令行中运行以下命令:

      java -jar /build-tools/jack.jar --help-properties
      

    • 默认情况下,如果 Gradle 守护程序的堆大小至少为 1.5 GB,那么 Jack 现在会与 Gradle 在同一进程中运行。如需调整守护程序的堆大小,请将以下代码添加到 gradle.properties 文件中:

      # This sets the daemon heap size to 1.5GB.
      org.gradle.jvmargs=-Xmx1536M