Android Gradle 外掛程式 2.2.0 版 (2016 年 9 月)

依附元件:
新功能:
  • 使用 Gradle 2.14.1 版,當中包含多項效能改善項目和新功能,並修正在本機使用 Gradle Daemon 時允許權限提升的安全漏洞。詳情請參閱 Gradle 版本資訊
  • Gradle 現在會使用 externalNativeBuild {} DSL,讓您連結至原生來源並透過 CMake 或 ndk-build 編譯原生資料庫。建構原生資料庫後,Gradle 會將其封裝至 APK。如要進一步瞭解如何搭配 Gradle 使用 CMake 和 ndk-build,請參閱在專案中新增 C 和 C++ 程式碼相關說明。
  • 現在 Gradle 會在您透過指令列執行建構作業時,嘗試自動下載任何缺少的 SDK 元件或專案依附的更新項目。詳情請參閱「透過 Gradle 自動下載缺少的套件」一節。
  • Gradle 提供新的實驗性快取功能,透過 DEX 前置處理、儲存以及重新利用經過 DEX 前置處理的程式庫版本,加快建構時間。如要進一步瞭解如何使用這項實驗功能,請參閱建構快取指南。
  • 採用新的預設封裝管道,用單一工作即可控制壓縮、簽署及 zipalign 處理,藉此改善建構效能。如要改回使用舊版封裝工具,只要在 gradle.properties 檔案中加入 android.useOldPackaging=true 即可。使用新的封裝工具時,無法執行 zipalignDebug 工作。不過,您可以呼叫 createZipAlignTask(String taskName, File inputFile, File outputFile) 方法,自行建立這項工作。
  • 除了傳統 JAR 簽署外,APK 簽署現在也會使用 APK Signature Scheme v2。所有 Android 平台都會接受最終產生的 APK。如果在簽署後修改這些 APK 的任何內容,便會使其 v2 簽署失效,也無法安裝在裝置上。如要停用這項功能,請在模組層級的 build.gradle 檔案中加入以下內容:

    Groovy

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

    Kotlin

    android {
      ...
      signingConfigs {
        create("config") {
          ...
          v2SigningEnabled = false
        }
      }
    }
          
  • 您現在可以針對 multidex 建構作業使用 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 現在會傳回 Gradle 適用的 Android 外掛程式提供的預設 ProGuard 檔案,不再使用 Android SDK 中的檔案。
  • 改善 Jack 編譯器的效能和功能。
    • testCoverageEnabled 設為 true 的情況下,Jack 現在支援 Jacoco 的測試涵蓋率。
    • 改善對註解處理工具的支援功能。類別路徑內的註解處理工具 (例如任何 compile 依附元件) 會自動套用到建構作業。您也可以在建構作業中指定註解處理工具,然後使用模組層級 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 Daemon 的堆積大小至少有 1.5 GB,Jack 現在便會以和 Gradle 相同的程序執行。若要調整 Daemon 堆積大小,請在 gradle.properties 檔案中新增以下內容:

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