Android Gradle 插件 3.1.0(2018 年 3 月)

此版本的 Android 插件需要使用以下工具:

  • Gradle 4.4 或更高版本。

    如需了解详情,请参阅有关更新 Gradle 的部分。

  • Build Tools 27.0.3 或更高版本。

    请注意,您不必再使用 android.buildToolsVersion 属性指定 Build Tools 的版本。默认情况下,该插件会使用所需的最低版本。

新的 DEX 编译器 (D8)

默认情况下,Android Studio 现在会使用名为 D8 的新 DEX 编译器。DEX 编译是指针对 Android 运行时(对于较早版本的 Android,则针对 Dalvik)将 .class 字节码转换为 .dex 字节码的过程。与之前的编译器(称为 DX)相比,D8 的编译速度更快,输出的 DEX 文件更小,同时却能保持相同甚至更出色的应用运行时性能。

D8 应该不会改变您的日常应用开发工作流程。但是,如果您遇到与新编译器有关的任何问题,请报告 bug。您可以在项目的 gradle.properties 文件中添加以下代码,暂时停用 D8 并使用 DX:

      android.enableD8=false
    

对于使用 Java 8 语言功能的项目,系统会默认启用增量脱糖。您可以在项目的 gradle.properties 文件中添加以下代码,停用增量脱糖:

      android.enableIncrementalDesugaring=false.
    

预览用户:如果您已经在使用 D8 的预览版,请注意,它现在会根据 SDK 构建工具中包含的库(而不是 JDK)进行编译。 因此,如果您访问的 API 存在于 JDK 中,但不存在于 SDK 构建工具库中,您会收到编译错误。

行为变更

  • 在构建分别以不同 ABI 为目标的多个 APK 时,默认情况下,插件不会再针对以下 ABI 生成 APK:mipsmips64armeabi

    如果您想构建以上述 ABI 为目标的 APK,必须使用 NDK r16b 或更低版本,并在 build.gradle 文件中指定这些 ABI,如下所示:

              splits {
                  abi {
                      include 'armeabi', 'mips', 'mips64'
                      ...
                  }
              }
            
              splits {
                  abi {
                      include("armeabi", "mips", "mips64")
                      ...
                  }
              }
            
  • 现在,Android 插件的构建缓存会排除超过 30 天的缓存条目。

  • "auto" 传递给 resConfig 不会再自动选择要打包到 APK 中的字符串资源。如果继续使用 "auto",该插件会打包应用及其依赖项提供的所有字符串资源。因此,您应该指定希望插件打包到 APK 中的各个语言区域。

  • 由于本地模块不能依赖应用的测试 APK,因此使用 androidTestApi 配置(而非 androidTestImplementation)将依赖项添加到插桩测试中会导致 Gradle 发出以下警告:

            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            
            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            

修复的问题

  • 修复了 Android Studio 无法正确识别复合构建中的依赖项这一问题。
  • 修复了以下问题:如果在进行单次构建时多次加载 Android 插件(例如,有多个子项目,并且每个子项目的 buildscript 类路径中都包含 Android 插件),您会遇到项目同步错误。