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

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

Android Gradle 外掛程式 9.0 版

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

如要更新至 Android Gradle 外掛程式 9.0.0-alpha10,請在 Android Studio Otter | 2025.2.1 中使用 Android Gradle 外掛程式升級工具

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

相容性

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

Android Gradle 外掛程式 9.0.0-alpha10 版需要 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 版本」相關說明。

android DSL 類別現在只會實作新的公開介面

過去幾年,我們為 DSL 和 API 推出新介面,以便更妥善控管公開 API。AGP 7.x 和 8.x 版仍使用舊版 DSL 型別 (例如 BaseExtension),這些型別也實作了新的公開介面,以便在介面開發期間維持相容性。

AGP 9.0 專門使用新的 DSL 介面,且實作項目已變更為完全隱藏的新型別。這項異動也會移除舊版已淘汰的變體 API 存取權。

如要更新至 AGP 9.0,您可能需要執行下列操作:

  • 確認專案與內建 Kotlin 相容:org.jetbrains.kotlin.android 外掛程式與新版 DSL 不相容。
  • 將 KMP 專案切換至 Android Gradle Library Plugin for KMP 在與 com.android.librarycom.android.application 外掛程式相同的 Gradle 子專案中使用 org.jetbrains.kotlin.multiplatform 外掛程式,與新的 DSL 不相容。

  • 更新建構檔案: 雖然介面變更的目的是盡可能保留 DSL,但可能還是會出現一些小變更

  • 更新自訂建構邏輯,以參照新的 DSL 和 API: 將所有內部 DSL 的參照項目,替換為公開 DSL 介面。 在大多數情況下,這會是一對一的更換。 請將所有使用 applicationVariants 和類似 API 的位置,都換成新的 androidComponents API。這可能較為複雜,因為 androidComponents API 的設計目的是為了提高穩定性,讓外掛程式能維持更久的相容性。如需範例,請參閱「Gradle Recipes」。

  • 更新第三方外掛程式: 部分第三方外掛程式可能仍依附於不再公開的介面或 API。遷移至與 AGP 9.0 相容的外掛程式版本。

改用新的 DSL 介面後,外掛程式和 Gradle 建構指令碼就不會使用各種已淘汰的 API,包括:

android 區塊中的已淘汰 API 函式 取代
applicationVariants
libraryVariants
testVariants
unitTestVariants
外掛程式的擴充點,可將新功能新增至 AGP。 請將此項替換為 androidComponents.onVariants API,例如:
androidComponents {
    onVariants() { variant ->
        variant.signingConfig
            .enableV1Signing.set(false)
    }
}
部分舊版 API 可能沒有直接替代項目。 如果新的變體 API 無法滿足您的用途,請回報問題
variantFilter 允許停用所選變體。 請將此內容替換為 androidComponents.beforeVariants API,例如:
androidComponents {
    beforeVariants(
        selector()
            .withBuildType("debug")
            .withFlavor("color", "blue")
    ) { variantBuilder ->
        variantBuilder.enable = false
    }
  }
deviceProvider
testServer
註冊自訂測試環境,以便針對 Android 裝置和模擬器執行測試。 切換至 Gradle 管理的裝置
sdkDirectory
ndkDirectory
bootClasspath
adbExecutable
adbExe
使用 Android SDK 的各種元件執行自訂工作。 切換到 androidComponents.sdkComponents
registerArtifactType
registerBuildTypeSourceProvider
registerProductFlavorSourceProvider
registerJavaArtifact
registerMultiFlavorSourceProvider
wrapJavaSourceSet
過時功能大多與 Android Studio 中產生的來源處理作業有關,這些作業在 AGP 7.2.0 中已停止運作。 這些 API 沒有直接替代項目。

如果您更新至 AGP 9.0 後看到下列錯誤訊息,表示專案仍參照部分舊型別:

java.lang.ClassCastException: class com.android.build.gradle.internal.dsl.ApplicationExtensionImpl$AgpDecorated_Decorated
cannot be cast to class com.android.build.gradle.BaseExtension

如果因不相容的第三方外掛程式而遭到封鎖,您可以選擇停用,並恢復使用舊版 DSL 實作項目和舊版變數 API。同時,您也可以使用新介面,並將自己的建構邏輯更新為新版 API。如要停用,請在 gradle.properties 檔案中加入這行程式碼:

android.newDsl=false

您也可以先升級至新版 API,再升級至 AGP 9.0。新介面已存在於許多 AGP 版本中,因此您可以混用新舊介面。AGP API 參考文件會顯示各個 AGP 版本的 API 介面,以及新增各個類別、方法和欄位的時間。

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

如果發現新的 DSL 或 Variant API 缺少功能,請盡快提出問題

內建 Kotlin

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

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

AGP 9.0 內建 Kotlin,可為 test-fixtures 提供完整的 Android Studio IDE 支援。如要試用這項功能,請使用 AGP 9.0.0-alpha07 以上版本。

您可以設定 android.builtInKotlin=false,停用內建的 Kotlin。

如果您已停用內建的 Kotlin,且需要使用舊版 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.resvalues 在所有子專案中啟用 resValues truefalse 只在需要 resValues 的子專案中啟用,方法是在這些專案的 Gradle 建構檔案中設定以下內容:
android {
  buildFeatures {
    resValues = true
  }
}
android.defaults.buildfeatures.shaders 在所有子專案中啟用 著色器編譯 truefalse 如要只在含有待編譯著色器的子專案中啟用著色器編譯,請在這些專案的 Gradle 建構檔案中設定下列項目:
android {
  buildFeatures {
    shaders = true
  }
}
android.r8.proguardAndroidTxt.disallowed 在 AGP 9.0 中,getDefaultProguardFile() 只會支援 proguard-android-optimize.txt,不會支援 proguard-android.txt。這是為了避免意外使用 ­dontoptimize 標記,該標記包含在 proguard-android.txt 中。 falsetrue 如要避免最佳化,除了使用 proguard-android-optimize.txt,您也可以在自訂 proguardFile 中明確指定 ­dontoptimize。請盡可能從這個檔案中移除 ­dontoptimize 標記,因為這會降低 R8 最佳化效益。如要停用,請設定 android.r8.globalOptionsInConsumerRules.disallowed=false
android.r8.globalOptionsInConsumerRules.disallowed 從 AGP 9.0 開始,如果消費者保留檔案含有有問題的 Proguard 設定,Android 程式庫和功能模組發布作業就會失敗。包含 ­dontoptimize­dontobfuscate 等全域選項的消費者保留檔案,只能用於應用程式模組,且可能會降低程式庫使用者的最佳化效益。如果全域選項內嵌於預先編譯的依附元件 (JAR 或 AAR),Android 應用程式模組編譯作業會自動忽略這些選項。如要查看發生這種情況的時間,請檢查 configuration.txt (通常位於 <app_module>/build/outputs/mapping/<build_variant>/configuration.txt 等路徑中),尋找類似以下的註解:# REMOVED CONSUMER RULE: ­dontoptimize falsetrue 發布的程式庫應移除所有不相容的規則。內部程式庫應將任何不相容但必要的規則移至應用程式模組中的 proguardFile。如要停用,請設定 android.r8.globalOptionsInConsumerRules.disallowed=false。所有消費者保留檔案都相容後,即可移除停用選項。

已移除的功能

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 移除的項目:

已移除的 API

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
  }
}

強制執行的 Gradle 屬性

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

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

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

已修正問題

Android Gradle 外掛程式 9.0.0-alpha10

已修正問題
Android Gradle 外掛程式
extractNativeLibs 和 useEmbeddedDex 不應來自資訊清單
AGP 9.0.0-alpha09 中的 R8 警告
Lint
內建 Kotlin 不會將 .kotlin_module 新增至 META-INF
Lint 類別路徑包含不同版本的重複類別
無法覆寫私有資源 (tools:override = "true")

Android Gradle 外掛程式 9.0.0-alpha09

已修正問題
Android Gradle 外掛程式
`legacy-kapt` 外掛程式會略過註解處理,與 `kotlin-kapt` 不同
compileSdkSpec.minorApiLevel 無法搭配 SettingsExtension 使用
[fused lib - public] Generated fused library does not include sources

Android Gradle 外掛程式 9.0.0-alpha08

已修正問題
AGP 9.0.0-alpha08 未將任何公開問題標示為已修正

Android Gradle 外掛程式 9.0.0-alpha07

已修正問題
Android Gradle 外掛程式
如果存在程式碼產生工作,建構就會失敗
如果 `android.builtInKotlin=false`、`android.newDsl=false` 和 `android.enableLegacyVariantApi=false`,使用 `kotlin-android` 外掛程式會失敗,並顯示「API 'applicationVariants' is obsolete」
當 kotlin.stdlib.default.dependency=false 時,內建 Kotlin 無法解析未指定版本的 kotlin-stdlib
DexData 開啟檔案時不會關閉,因此無法清除
AndroidSourceDirectorySet 應在 AGP 9.0 中停止擴充 PatternFilterable
僅限測試模組中的測試夾具錯誤
在測試固定裝置中使用內容接收器時發生錯誤
testFixtures 中 Kotlin 程式碼的 IDE 錯誤不正確

Android Gradle 外掛程式 9.0.0-alpha06

已修正問題
Android Gradle 外掛程式
新的最佳化 DSL 預設不會建立 configuration.txt
AGP 8.13.0 無法驗證模組中的導覽圖
AGP 使用已淘汰的 Gradle API:多字串標記
如果使用者嘗試搭配 minSdkVersion >=21 使用舊版 multidex 程式庫,請發出警告
Lint
Lint ChecksSdkIntAtLeast 檢查不會檢查註解值是否正確

Android Gradle 外掛程式 9.0.0-alpha05

已修正問題
Android Gradle 外掛程式
android.proguard.failOnMissingFiles 無法用於 consumerProguardFiles
將 Kotlin Gradle 外掛程式依附元件更新至 2.2.10
使用 KGP API 建立 KotlinJvmAndroidCompilation
Kotlin 明確 API 模式套用至測試來源
Lint
Lint 擲回「Could not clean up K2 caches」警告

Android Gradle 外掛程式 9.0.0-alpha04

已修正問題
Android Gradle 外掛程式
在 AGP 9.0 中,將預設來源/目標 Java 版本從 Java 8 切換為 Java 11
將 android.useAndroidX 預設值設為 true
使用內建 Kotlin 套用 kapt 外掛程式時,例外狀況會更完善。
Lint
Lint 擲回「Could not clean up K2 caches」警告

Android Gradle 外掛程式 9.0.0-alpha03

已修正問題
Android Gradle 外掛程式
啟用 `isIncludeAndroidResources` 時,`process{Variant}UnitTestManifest` 無法在 AGP 8.12.0 中合併工具:覆寫程式庫用法
AGP 導致 Gradle 中 JVM 測試工作出現淘汰警告
DependencyReportTask 與設定快取不相容
Lint
錯誤:移除未使用的資源時,系統不會一併移除相關翻譯,也不會詢問是否要移除

Android Gradle 外掛程式 9.0.0-alpha02

已修正問題
Android Gradle 外掛程式
ProGuard 檔案不存在時建構失敗
移除 buildconfig 預設 gradle.properties 標記
將應用程式的 targetSdk 預設值改為以 compileSdk 為準,而非 minSdk

Android Gradle 外掛程式 9.0.0-alpha01

已修正問題
Android Gradle 外掛程式
在 AGP 9.0 中移除已淘汰的 AndroidSourceSet.jni
在 AGP 9.0 中移除 Installation.installOptions()
在 AGP 9.0 中移除 BuildType.isRenderscriptDebuggable。
移除 android.defaults.buildfeatures.renderscript
`com.android.kotlin.multiplatform.library` 會在 Gradle 管理的裝置上當機
移除 `android.defaults.buildfeatures.aidl` 預設 gradle.properties 標記