Android Gradle 外掛程式 8.0.0 版 (2023 年 4 月)

Android Gradle 外掛程式 8.0.0 是主要版本,內含多種新功能及改善項目。

相容性

最低版本 預設版本 附註
Gradle 8.0 8.0 詳情請參閱「更新 Gradle」一節。
SDK 版本工具 30.0.3 30.0.3 安裝設定 SDK 版本工具。
NDK 25.1.8937393 安裝設定 NDK 其他版本。
JDK 17 17 詳情請參閱「設定 JDK 版本」相關說明。

修補程式版本

以下是 Android Gradle 外掛程式 8.0 版的修補程式版本清單。

Android Gradle 外掛程式 8.0.2 (2023 年 5 月)

如需 AGP 8.0.2 中已修正的錯誤清單,請參閱 Android Studio 2022.2.1 已關閉的問題

Android Gradle 外掛程式 8.0.1 (2023 年 5 月)

這項次要更新修正了下列錯誤:

已修正問題
從 AGP 7.2.2 升級到 7.4.0 後,出現「No VersionRequirement with the given id in the table」錯誤
markTypeAsLive AGP 7.4.1 發生 R8 NullPointerException
[R8 4.0.53] Android 11 發生類別驗證失敗的嚴重問題

破壞性變更:模組層級建構指令碼需要命名空間

您必須在模組層級的 build.gradle.kts 檔案中設定命名空間,而非資訊清單檔案。從 AGP 7.3 開始,您可以開始使用 namespace DSL 屬性。詳情請參閱「設定命名空間」相關說明。

遷移至命名空間 DSL 時,請注意下列問題:

  • 在某些情況下,先前的 AGP 會從主要命名空間或應用程式 ID 推斷測試命名空間。如果 AGP 升級助理發現專案的主要命名空間和測試命名空間相同,就會封鎖升級作業。如果升級作業遭到封鎖,您必須手動變更 testNamespace,並視情況修改原始碼。
  • 變更測試命名空間後,原因可能是程式碼編譯,但檢測設備測試在執行階段會失敗。如果檢測設備測試原始碼參照了 androidTest 和應用程式來源中定義的資源,就可能發生這種情況。

詳情請參閱問題 #191813691 註解 #19

破壞性變更:建構選項預設值

從 AGP 8.0 開始,這些旗標的預設值已變更,以改善建構效能。如需協助調整程式碼以支援部分變更,請使用 AGP 升級助理 (依序點選「Tools」>「AGP Upgrade Assistant」)。升級助理會引導您更新程式碼以配合新行為,或設定旗標以保留先前的行為。

檢舉 新預設值 先前的預設值 附註
android.defaults.buildfeatures.buildconfig false true 根據預設,AGP 8.0 不會產生 BuildConfig。您必須在需要的專案中使用 DSL 指定這個選項。
android.defaults.buildfeatures.aidl false true 根據預設,AGP 8.0 不會啟用 AIDL 支援。您必須在需要的專案中使用 DSL 指定這個選項。我們計劃在 AGP 9.0 中移除這個標記。
android.defaults.buildfeatures.renderscript false true 根據預設,AGP 8.0 不會啟用 RenderScript 支援功能。您必須在需要的專案中使用 DSL 指定這個選項。這個旗標預計將在 AGP 9.0 中移除。
android.nonFinalResIds true false 根據預設,AGP 8.0 會產生包含非最終欄位的 R 類別。
android.nonTransitiveRClass true false AGP 8.0 只會針對目前模組中定義的資源產生 R 類別。
android.enableR8.fullMode true false AGP 8.0 預設會啟用 R8 完整模式。詳情請參閱 R8 完整模式

破壞性變更:強制執行的建構選項值

從 AGP 8.0 開始,您無法再變更這些標記的值。如果您在 gradle.properties 檔案中指定這些引數,系統會忽略該值,AGP 也會列印警告。

檢舉 強制執行的值 附註
android.dependencyResolutionAtConfigurationTime.warn true 如果 AGP 8.0 在設定階段偵測到設定解析度,就會對 Gradle 設定時間造成負面影響,因此會發出警告。
android.r8.failOnMissingClasses true 為確保更優異的 DEX 最佳化效果,如果缺少類別,AGP 8.0 會使使用 R8 的建構作業失敗。如要解決這個問題,您必須新增缺少的程式庫或 -dontwarn 保留規則。詳情請參閱「R8 縮減器缺少類別警告」。
android.testConfig.useRelativePath true 在單元測試中支援使用 Android 資源、資產和資訊清單時,AGP 8.0 會產生僅包含相對路徑的 test_config.properties 檔案。這可確保 Android 單元測試隨時都能使用 Gradle 建構快取。
android.useNewJarCreator true 在建立 JAR 檔案時,AGP 會使用 Zipflinger 程式庫改善建構效能。
android.bundletool.includeRepositoriesInDependencyReport true 如果已啟用 AAB 和 APK 中新增 SDK 依附元件資訊,AGP 8.0 也會在這項資訊中新增專案存放區清單。詳情請參閱「Play 管理中心的依附元件資訊」。
android.enableArtProfiles true 系統現在一律會產生基準設定檔。詳情請參閱「基準設定檔」。
android.enableNewResourceShrinker true 預設使用新的資源縮減器實作。新的資源縮減器支援動態功能。
android.enableSourceSetPathsMap true 用於計算相對資源路徑對應,因此 Gradle 建構作業會更頻繁地更新。
android.cacheCompileLibResources true Gradle 會追蹤與專案位置相對的資源檔案,因此現在預設可以快取已編譯的程式庫資源。必須啟用 android.enableSourceSetPathsMap
android.disableAutomaticComponentCreation true 根據預設,AGP 8.0 不會建立任何 SoftwareComponent。而是只會針對設為使用發布 DSL 發布的變數建立 SoftwareComponent。

執行設定檔的新穩定旗標

AGP 包含新標記 android.settings.executionProfile。使用此旗標即可覆寫 SettingsExtension 的預設執行設定檔。詳情請參閱設定外掛程式說明文件

如要預覽實驗功能旗標,請參閱「預覽版本資訊」。

不支援 Kotlin 延遲屬性指派

如果您針對建構指令碼使用 Gradle 的 Kotlin DSL,請注意,Android Studio 和 AGP 8.0 不支援使用 = 運算子指派實驗性屬性指派作業。如要進一步瞭解這項功能,請參閱版本資訊說明文件

版本分析器工作類別

從 Android Studio Flamingo 開始,版本分析器會針對會影響建構時間長度的工作提供新的預設檢視畫面。如果專案使用 AGP 8.0 以上版本,而非個別顯示工作,版本分析器會按照類別將工作分組。舉例來說,Android 資源、Kotlin 或 Dexing 的特定工作會歸入同一組,然後按照建構時間長度排序。如此一來,您可以輕鬆得知哪個類別對於建構時間的影響最大。展開各類別即可顯示對應工作清單。如要個別顯示工作,而不分組,請使用「Group by」(分組依據) 下拉式選單。

版本分析器工作類別。

新設定外掛程式

AGP 8.0.0-alpha09 推出了新的設定外掛程式。設定外掛程式可讓您將通用設定 (適用於所有模組的設定) 集中在一處,以便不必將設定複製並貼到多個模組中。此外,您也可以使用設定外掛程式建立工具執行設定檔,或針對執行工具的不同操作說明,然後進行切換。

如要使用設定外掛程式,請在 settings.gradle 檔案中套用外掛程式:

apply plugin 'com.android.settings'

集中管理全域設定

如要調整通用設定,請在 settings.gradle 檔案中使用新的 android 區塊。範例如下:

android {
  compileSdk 31
  minSdk 28
  ...
}

工具執行設定檔

設定外掛程式也可讓您為某些工具建立執行設定檔。執行設定檔會決定工具的執行方式。您可以根據環境選取不同的執行設定檔。在執行設定檔中,您可以為工具設定 JVM 引數,並將其設為在獨立的程序中執行。目前僅支援 R8 工具

建立執行設定檔,並在 settings.gradle 檔案中設定預設的執行設定檔,如以下範例所示:

android {
  execution {
    profiles {
      high {
        r8 {
          jvmOptions += ["-Xms2048m", "-Xmx8192m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      low {
        r8 {
          jvmOptions += ["-Xms256m", "-Xmx2048m", "-XX:+HeapDumpOnOutOfMemoryError"]
          runInSeparateProcess true
        }
      }
      ci {
        r8.runInSeparateProcess false
      }
    }
    defaultProfile "low"
  }
}

如要覆寫預設設定檔,請使用 gradle.properties 檔案中的 android.experimental.settings.executionProfile 屬性選取其他設定檔:

android.experimental.settings.executionProfile=high

您也可以使用指令列設定這個屬性,以便設定不同的工作流程。舉例來說,如果您有持續整合工作流程,可以使用指令列變更執行設定檔,不必變更 settings.gradle 檔案:

./gradlew assembleRelease \
  -Pandroid.experimental.settings.executionProfile=ci

若要執行 AGP 8.0,須使用 JDK 17

如要用 Android Gradle 外掛程式 8.0 建構應用程式,現在必須使用 JDK 17 才能執行 Gradle。Android Studio Flamingo 會隨附 JDK 17,並將 Gradle 設為預設使用,這表示多數 Android Studio 使用者都不需要變更專案的設定。

如果您需要手動設定 AGP 在 Android Studio 中使用的 JDK 版本,則需要使用 JDK 17 以上版本。

使用獨立於 Android Studio 之外的 AGP 時,請將 JAVA_HOME 環境變數-Dorg.gradle.java.home 指令列選項設為 JDK 17 安裝目錄,藉此升級 JDK 版本。