Android Gradle 外掛程式搶先版版本資訊

本頁面提供 Android Gradle 外掛程式 (AGP) 預先發布版本的版本資訊。

Android Gradle 外掛程式 9.0 版

Android Gradle 外掛程式 9.0 是 AGP 的新主要版本,並帶來 API 和行為變更。

如要更新至 Android Gradle 外掛程式 9.0.0-alpha04,請在 Android Studio Narwhal 4 Feature Drop | 2025.1.4 中使用 Android Gradle 外掛程式升級工具

升級專案時,AGP 升級小幫手會盡可能保留現有行為,讓您將專案升級為使用 AGP 9.0,即使您尚未準備好採用 AGP 9.0 的所有新預設值,也能順利升級。

相容性

Android Gradle 外掛程式 9.0.0-alpha04 支援的最高 Android API 級別為 API 級別 36。

Android Gradle 外掛程式 9.0.0-alpha04 版需要 Gradle 9.0.0 版。

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

內部 DSL 實作項目和已淘汰的變數 API 現在需要明確選擇加入

Android Gradle 外掛程式現在已定義 API 介面,支援的 API 定義於 com.android.tools.build:gradle-api Maven 構件中。

為了與現有的二進位外掛程式和建構指令碼相容,在 AGP 8.13 以下版本中,系統預設仍會公開定義 API 途徑之前的舊版 DSL 實作項目。這樣一來,Gradle 外掛程式和建構指令碼中的程式碼,就能存取 DSL 的內部實作詳細資料,以及已淘汰的 android.applicationVariantsandroid.libraryVariantsandroid.testVariantsandroid.unitTestVariants API (這些 API 將在 2026 年的 AGP 10 中移除)。

為讓這項轉換更明顯,Android Gradle 外掛程式 9.0.0-alpha04 預設不會提供舊版變數 API 和內部 DSL。

如要重新使用已淘汰的 API,請在 gradle.properties 中設定 android.newDsl=false

在 9.0 版 Alpha 系列期間,我們會與外掛程式作者聯絡,協助他們調整及發布與新模式完全相容的外掛程式,並強化 Android Studio 中的 AGP 升級助理,引導您完成遷移作業。

內建 Kotlin

Android Gradle 外掛程式 9 內建支援 Kotlin 編譯功能,可取代另外套用的 Kotlin 外掛程式。這項功能可簡化與 AGP 的整合,避免使用已淘汰的 API,並在某些情況下提升效能。

Android Gradle 外掛程式 9 在執行階段依附於 Kotlin Gradle 外掛程式 2.2.0,這是內建 Kotlin 支援所需的最低版本。

如要停用內建的 Kotlin,請設定 android.builtInKotlin=false。 如果您已選擇退出,且需要使用舊版 Kotlin Gradle 外掛程式,可以強制降級

buildscript {
    dependencies {
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("2.0.0") } // or another version that you want to use
        }
    }
}

行為變更

Android Gradle 外掛程式 9.0 版有下列新行為:

行為 建議
Android Gradle 外掛程式 9.0 預設使用 NDK 版本 r28c 建議明確指定要使用的 NDK 版本。
Android Gradle 外掛程式 9.0 預設會要求程式庫的消費者使用相同或較高的編譯 SDK 版本。 使用程式庫時,請使用相同或更高版本的編譯 SDK。 如果無法這麼做,或想讓發布的程式庫消費者有更多時間切換,請明確設定 AarMetadata.minCompileSdk

AGP 9.0 包含下列 Gradle 屬性預設值的更新。這樣您在升級時,就能選擇保留 AGP 8.13 行為:

屬性 函式 從 AGP 8.13 變更為 AGP 9.0 建議
android.newDsl 使用新的 DSL 介面,而不公開 android 區塊的舊版實作項目。
這也表示您無法再存取舊版變數 API,例如 android.applicationVariants
falsetrue 如要停用這項功能,請設定 android.newDsl=false
專案使用的所有外掛程式和建構邏輯都相容後,即可移除停用選項。
android.builtInKotlin 支援直接在 Android Gradle 外掛程式中編譯 Kotlin 程式碼,不必使用 org.jetbrains.kotlin.android 外掛程式。 falsetrue 盡可能移除 org.jetbrains.kotlin.android 外掛程式的使用情形,改用內建的 Kotlin。如要停用,請將 android.builtInKotlin=false 設為
android.uniquePackageNames 強制規定每個程式庫都必須有不同的套件名稱。 falsetrue 為專案中的所有程式庫指定不重複的套件名稱。 如果無法這樣做,您可以在遷移期間停用這個標記。
android.dependency.useConstraints 控管設定之間的依附元件限制。
AGP 9.0 的預設值為 false,只會在應用程式裝置測試 (AndroidTest) 中使用限制。 將此值設為 true,即可還原為 8.13 版的行為。
truefalse 除非必要,否則請勿在所有位置使用依附元件限制。 接受這個標記的新預設值,也會在專案匯入程序中啟用最佳化功能,減少含有許多 Android 程式庫子專案的建構作業匯入時間。
aandroid.enableAppCompileTimeRClass 在應用程式中針對非最終 R 類別編譯程式碼,讓應用程式編譯與程式庫編譯保持一致。
這項功能可提升增量,並為日後資源處理流程的成效最佳化奠定基礎。
falsetrue 許多專案只要採用新行為即可,不必變更來源。 如果 R 類別欄位用於需要常數的任何位置 (例如 switch 案例),請重構為使用鏈結的 if 陳述式。
android.sdk.defaultTargetSdkToCompileSdkIfUnset 將編譯 SDK 版本做為應用程式和測試中目標 SDK 版本的預設值。
在此變更前,目標 SDK 版本預設為最低 SDK 版本。
falsetrue 為應用程式和測試明確指定目標 SDK 版本。
android.onlyEnableUnitTestForTheTestedBuildType 只會為受測建構類型建立單元測試元件。
在預設專案中,這會產生單一偵錯單元測試, 先前的行為則是針對偵錯或發布執行單元測試。
falsetrue 如果專案不需要針對偵錯和發布版本執行測試,則無需進行任何變更。
android.proguard.failOnMissingFiles 如果 AGP DSL 中指定的任何保留檔案不存在於磁碟上,就會導致建構失敗並顯示錯誤。在這項異動之前,如果檔案名稱有錯字,系統會直接忽略檔案。 falsetrue 移除所有無效的 ProGuard 檔案宣告
android.r8.optimizedResourceShrinking 一併考量類別和 Android 資源,讓 R8 保留較少的 Android 資源。 falsetrue 如果專案的保留規則已完成,則無須變更。
android.r8.strictFullModeForKeepRules 允許 R8 保留較少的項目,方法是在保留類別時,不要隱含保留預設建構函式。也就是說,-keep class A 不再表示 -keep class A { <init>(); }
falsetrue 如果專案的保留規則已完成,則無須變更。

將專案的保留規則中,需要保留預設建構函式的所有案例,將 -keep class A 替換為 -keep class A { <init>(); }
android.defaults.buildfeatures.shaders 在所有子專案中啟用 著色器編譯 truefalse 如要只在含有待編譯著色器的子專案中啟用著色器編譯,請在這些專案的 Gradle 建構檔案中設定下列項目:
android {
  buildFeatures {
    shaders = true
  }
}

已移除的功能

Android Gradle 外掛程式 9.0 版移除了下列功能:

已變更的 DSL

Android Gradle 外掛程式 9.0 版的 DSL 破壞性變更如下:

  • 已移除 CommonExtension 的參數化。

    就本身而言,這只是來源層級的重大變更,有助於避免日後發生來源層級的重大變更,但也表示區塊方法需要從 CommonExtension 移至 ApplicationExtensionLibraryExensionDynamicFeatureExtensionTestExtension

    將專案升級至 AGP 9.0 時,請重構使用這些參數或區塊方法的 Gradle 外掛程式程式碼。舉例來說,下列外掛程式已更新,可移除型別參數,且不會依附於已移除的區塊方法:

    AGP 8.13

    val commonExtension: CommonExtension<*, *, *, *, *, *> =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig {
            minSdk {
                version = release(28)
            }
        }
    }
    

    AGP 9.0

    val commonExtension: CommonExtension =
            extensions.getByType(CommonExtension::class)
    commonExtension.apply {
        defaultConfig.apply {
            minSdk {
                version = release(28)
            }
        }
    }
    

    如果外掛程式的目標是某個範圍的 AGP 版本,直接使用 getter 會與低於 9.0 的 AGP 版本二進位檔相容。

已移除 DSL

Android Gradle 外掛程式 9.0 移除的項目:

已移除的 Gradle 屬性

最初新增下列 Gradle 屬性,是為了全域停用預設啟用的功能。

自 AGP 8.0 以下版本起,這些功能預設為停用。只在需要使用這些功能的子專案中啟用,以提高建構效率。

屬性 函式 取代
android.defaults.buildfeatures.aidl 在所有子專案中啟用 AIDL 編譯 只在有 AIDL 來源的子專案中啟用 AIDL 編譯,方法是在這些專案的 Gradle 建構檔案中設定下列屬性:
android {
  buildFeatures {
    aidl = true
  }
}
在每個包含 AIDL 來源的子專案 Gradle 建構檔案中
android.defaults.buildfeatures.renderscript 在所有子專案中啟用 RenderScript 編譯 如要只在有 renderscript 來源的子專案中啟用 renderscript 編譯,請在這些專案的 Gradle 建構檔案中設定下列屬性:
android {
  buildFeatures {
    renderScript = true
  }
}

已移除的 API

Android Gradle 外掛程式 9.0 移除的項目:

  • 已淘汰並停用的 BaseExtension.registerTransform API,僅用於允許針對最新 AGP 版本進行編譯,同時以在 AGP 4.2 以下版本執行為目標。

強制執行的 Gradle 屬性

如果您設定下列 Gradle 屬性,AGP 9.0 會擲回錯誤。

如果專案使用這些屬性,Android Gradle 外掛程式升級小幫手就不會將專案升級至 AGP 9.0。

屬性 函式
android.r8.integratedResourceShrinking 資源縮減功能現在一律會做為 R8 的一部分執行,先前的實作方式已移除。