Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

使用编译缓存加快整洁编译的速度

编译缓存可以存储 Android Plugin for Gradle 在编译您的项目时生成的特定输出(如未打包的 AAR 和经过 dex 预处理的远程依赖项)。使用缓存时,您的整洁编译将显著加快,因为编译系统在后续编译期间可以直接再用这些缓存的文件,而不必重新创建它们。在持续集成服务器上以及在一台本地计算机上运行多个编译流程时,编译缓存也适用。

使用 Android 插件 2.3.0 及更高版本的项目在默认情况下会启用编译缓存(除非您明确停用编译缓存)。不过,如果您将以下某个编译属性设为与下面所示值不同的值,插件将停用经过 dex 预处理的远程依赖项的缓存(这些是每个属性的默认设置,因此,如果您完全不声明它们,经过 dex 预处理的远程依赖项的缓存将保持启用状态)。

    android {
      defaultConfig {
        // If you do enable multidex, you must also set
        // minSdkVersion to 21 or higher.
        multiDexEnabled false
      }
      buildTypes {
        <build-type> {
          minifyEnabled false
        }
      }
      dexOptions {
        preDexLibraries true
      }
      ...
    }
    ...
    

注意:如果您的项目使用 Android 插件版本 2.2.2 或 2.2.3,那么它使用的是实验性版本的编译缓存功能。您应更新您的项目以使用最新版本的 Android 插件

如果您要了解可让您的编译速度更快的其他方式,请阅读优化您的编译速度

更改编译缓存的位置

默认情况下,Android 插件将您的缓存保存在 <user-home>/.android/build-cache/ 中。如果您配置以下某个路径变量(按优先级逐渐降低的顺序列出),Android Studio 将改用 <path-variable>/.android/build-cache/

  • ANDROID_SDK_HOME
  • user.home
  • HOME

Android 插件将为编译缓存使用一个默认位置,以便在使用 Android 插件 2.3.0 或更高版本(并且未停用编译缓存)的所有项目之间共享缓存的文件。例如,在您的一个项目编译并缓存经过 dex 预处理的依赖项后,也使用该依赖项的其他项目可以从共享的编译缓存复制它,从而跳过再次对其进行 dex 预处理。

如果希望项目创建其自己的缓存(并且不与其他项目共享该缓存),您可以在该项目的 gradle.properties 文件中为缓存指定一个唯一的位置,如下所示:

    // You can specify either an absolute path or a path relative
    // to the gradle.properties file.
    android.buildCacheDir=<path-to-directory>
    

完成文件的修改后,请点击 Sync Project 图标 以创建新的编译缓存目录。

注意:避免为 <project-root>/build/<project-root>/<module-root>/build/ 目录中的编译缓存指定目录,因为 Gradle 会在每次运行 clean 任务时删除这些目录。

如果您希望只与特定的其他项目共享缓存,请在这些项目的 gradle.properties 文件中指定相同的编译缓存目录。

清除编译缓存

Android 插件的 clean 任务可以清除您的项目的 build/ 目录,与之类似,您可以运行 cleanBuildCache 任务来清除您的项目的编译缓存。如果项目为其编译缓存指定非默认目录,那么从该项目运行此任务只会清除相关缓存,而不会清除位于默认位置的共享缓存。要执行此任务,请从菜单栏中依次选择 View > Tool Windows > Terminal,并使用以下命令之一:

  • 在 Windows 上:
    gradlew cleanBuildCache
  • 在 Mac 或 Linux 上:
    ./gradlew cleanBuildCache

注意:如果您停用编译缓存,cleanBuildCache 任务将不可用。

停用编译缓存

由于编译缓存可以加快整洁编译的速度,因此不建议停用此功能。如果您仍希望为您的项目停用编译缓存,请将以下内容添加到项目的 gradle.properties 文件中:

    // To re-enable the build cache, either delete the following
    // line or set the property to 'true'.
    android.enableBuildCache=false
    

完成文件的修改后,请点击 Sync Project 图标 以应用您所做的更改。

注意:在您停用编译缓存后,Android 插件将忽略 android.buildCacheDir 属性,并且 cleanBuildCache 任务将不再可用。此外,停用编译缓存不会自动清除缓存目录。如果您决定重新启用编译缓存,这样可以让您保留缓存的文件。