Android Gradle 外掛程式 4.2.0 版 (2021 年 3 月)

相容性

最低版本 預設版本 附註
Gradle 6.7.1 詳情請參閱「更新 Gradle」一節。
SDK 版本工具 30.0.2 30.0.2 安裝設定 SDK 版本工具。
NDK 不適用 21.4.7075529 安裝設定 NDK 其他版本。

新功能

此版本的 Android Gradle 外掛程式內附以下新功能。

預設使用 Java 語言 8 版本

從版本 4.2 開始,AGP 將預設使用 Java 8 語言層級。 Java 8 提供幾種較新的語言功能,包括 lambda 運算式、方法參照和靜態介面方法。完整清單 請參閱 Java 8 說明文件

如要保留舊行為,請在模組層級中明確指定 Java 7 build.gradle.ktsbuild.gradle 檔案:

// build.gradle
android {
  ...
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_7
    targetCompatibility JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}
// build.gradle.kts
android {
  ...
  compileOptions {
    sourceCompatibility = JavaVersion.VERSION_1_7
    targetCompatibility = JavaVersion.VERSION_1_7
  }
  // For Kotlin projects, compile to Java 6 instead of 7
  kotlinOptions {
    jvmTarget = "1.6"
  }
}

新 JVM 資源編譯器

Android Gradle 外掛程式 4.2 工具中的新 JVM 資源編譯器取代了部分 AAPT2 資源編譯器的符記, 改善建構效能,尤其是在 Windows 電腦上。新 JVM 資源編譯器預設為啟用。

現已支援 v3 和 v4 簽署

Android Gradle 外掛程式 4.2 現在支援 APK v3 以及 APK v4 簽署格式。 若要在 AdSense 廣告服務中啟用 建構,請將下列屬性新增至模組層級 build.gradlebuild.gradle.kts 檔案:

// build.gradle
android {
  ...
  signingConfigs {
    config {
        ...
        enableV3Signing true
        enableV4Signing true
    }
  }
}
// build.gradle.kts
android {
  ...
  signingConfigs {
      config {
          ...
          enableV3Signing = true
          enableV4Signing = true
      }
  }
}

APK v4 簽署可讓您使用 ADB 快速部署大型 APK APK 逐步安裝 Android 11。這個新標記會負責處理部署作業中的 APK 簽署步驟 上傳資料集之後,您可以運用 AutoML 自動完成部分資料準備工作

按照變化版本設定應用程式簽署

您現在可以在 Android Gradle 中啟用或停用應用程式簽署 每個變化版本的外掛程式。

這個範例說明如何使用 onVariants()敬上 方法,以用於 Kotlin 或 Groovy:

androidComponents {
    onVariants(selector().withName("fooDebug"), {
        signingConfig.enableV1Signing.set(false)
        signingConfig.enableV2Signing.set(true)
    })

全新 Gradle 屬性: android.native.buildOutput

為了減少建構輸出內容的雜亂,AGP 4.2 會篩選訊息 包括使用 CMakendk-build 的原生建構。 根據預設,只顯示 C/C++ 編譯器輸出內容。先前有一行輸出內容 因此產生大量 資訊訊息

如要查看原生輸出內容的全部內容,請將新的 Gradle 屬性 android.native.buildOutputverbose

您可以在 gradle.properties 檔案中設定這個屬性,或是透過 指令列

gradle.properties
android.native.buildOutput=verbose

指令列
-Pandroid.native.buildOutput=verbose

此屬性的預設值為 quiet

變更 gradle.properties 檔案行為

從 AGP 4.2 開始,您無法再覆寫 Gradle 屬性 子專案換句話說,如果您在 子專案 (而非根專案) 中的 gradle.properties 檔案 系統就會忽略該專案

例如,在先前的版本中,AGP 會讀取 <var>projectDir</var>/gradle.properties, <var>projectDir</var>/app/gradle.properties, <var>projectDir</var>/library/gradle.properties, 以應用程式模組為例,如果兩者都含有相同的 Gradle 屬性 <var>projectDir</var>/gradle.properties<var>projectDir</var>/app/gradle.properties, 然後 <var>projectDir</var>/app/gradle.properties 的優先順序

AGP 4.2 已變更此行為,AGP 不會再從 子專案中的 gradle.properties (例如 <var>projectDir</var>/app/gradle.properties)。 這項異動反映了 新的 Gradle 行為,並支援 設定快取

進一步瞭解如何在 gradle.properties 中設定值 檔案,請參閱 Gradle 說明文件

Gradle 相容性與設定變更

在 Android Studio 中執行時,Gradle 建構工具會使用 Studio 隨附的 JDK。在先前的版本中,Studio 隨附的是 JDK 8。不過在 4.2 版中,隨附內容已改為 JDK 11。使用新的隨附 JDK 執行 Gradle 時,可能會因垃圾收集器的異動,導致產生不相容問題或影響 JVM 效能。這些問題說明如下。

注意:雖然我們建議透過 JDK 11 執行 Gradle,但 變更用來執行 Gradle 的 JDK 專案架構 對話方塊變更這項設定只會影響執行 Gradle 的 JDK 不會變更用於執行 Studio 本身的 JDK。

Studio 與 Android 的相容性 Gradle 外掛程式 (AGP)

Android Studio 4.2 可以開啟使用 AGP 3.1 和 前提是 AGP 執行 Gradle 4.8.1 以上版本。如要 如要瞭解 Gradle 相容性的相關資訊,請參閱 更新 Gradle

為 JDK 11 最佳化 Gradle 版本

這項 JDK 11 更新會影響 JVM 垃圾的預設設定 收集器,因為 JDK 8 使用平行垃圾收集器,而 JDK 11 使用 G1 垃圾收集器

如要提升建構效能,建議您 測試 Gradle 建構作業 平行垃圾收集器在 gradle.properties 中設定以下內容:

org.gradle.jvmargs=-XX:+UseParallelGC

如果此欄位已設有其他選項,請新增選項:

org.gradle.jvmargs=-Xmx1536m -XX:+UseParallelGC

如要使用其他設定測量建構速度,請參閱 剖析版本

minSdk = 28 以上時,APK 內的 DEX 檔案解壓縮

現在,當 minSdk = 28 或 更高。這會導致 APK 大小增加,但會導致 而且下載大小大致相同。

如要強制 AGP 封裝壓縮的 DEX 檔案,您可以新增 新增到您的 build.gradle 檔案中:

android {
    packagingOptions {
        dex {
            useLegacyPackaging true
        }
    }
}

使用 DSL 封裝壓縮的原生程式庫

我們建議以未壓縮格式封裝原生資料庫 不僅能縮減應用程式安裝大小、縮減應用程式下載大小,以及加快應用程式下載速度 縮短使用者載入時間不過,如果您想讓 Android Gradle 外掛程式 封裝經過壓縮的原生資料庫 useLegacyPackaging敬上 新增至應用程式 build.gradle 檔案中的 true

android {
    packagingOptions {
        jniLibs {
            useLegacyPackaging true
        }
    }
}

旗標 useLegacyPackaging 會取代資訊清單屬性 extractNativeLibs。如需更多背景資訊,請參閱版本資訊 預設以未壓縮方式封裝原生資料庫