本頁面提供 Android Gradle 外掛程式 (AGP) 預先發布版本的版本資訊。
Android Gradle 外掛程式 9.0 版
Android Gradle 外掛程式 9.0 是 AGP 的新主要版本,並帶來 API 和行為變更。
如要更新至 Android Gradle 外掛程式 9.0.0-alpha11,請在 Android Studio Otter 2 Feature Drop | 2025.2.2 中使用 Android Gradle 外掛程式升級工具。
升級專案時,AGP 升級小幫手會盡可能保留現有行為,讓您將專案升級為使用 AGP 9.0,即使您尚未準備好採用 AGP 9.0 的所有新預設值,也能順利升級。
相容性
Android Gradle 外掛程式 9.0.0-alpha11 支援的最高 Android API 級別為 API 級別 36。
Android Gradle 外掛程式 9.0.0-alpha11 需要 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.library和com.android.application外掛程式相同的 Gradle 子專案中使用org.jetbrains.kotlin.multiplatform外掛程式,與新的 DSL 不相容。更新建構檔案: 雖然介面變更的目的是盡可能保留 DSL,但可能還是會出現一些小變更。
更新自訂建構邏輯,以參照新的 DSL 和 API: 將所有內部 DSL 的參照項目,替換為公開 DSL 介面。 在大多數情況下,這會是一對一的更換。 請將所有使用
applicationVariants和類似 API 的位置,都換成新的androidComponentsAPI。這可能較為複雜,因為androidComponentsAPI 的設計目的是為了提高穩定性,讓外掛程式能維持更久的相容性。如需範例,請參閱「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) } } |
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 支援功能,且預設會啟用這項功能。也就是說,您不必再於建構檔案中套用 org.jetbrains.kotlin.android (或 kotlin-android) 外掛程式,即可編譯 Kotlin 來源檔案。這項功能可簡化 Kotlin 與 AGP 的整合,避免使用已淘汰的 API,並在某些情況下提升效能。
因此,將專案升級至 AGP 9.0 時,您也需要遷移至內建 Kotlin 或停用。
執行階段依附於 Kotlin Gradle 外掛程式 2.2.10
Android Gradle 外掛程式 9.0 在執行階段會依附於 Kotlin Gradle 外掛程式 (KGP) 2.2.10,這是內建 Kotlin 支援所需的最低版本。
也就是說,如果您選擇停用內建 Kotlin,並使用低於 2.2.10 的 KGP 版本,Gradle 會自動將 KGP 版本升級至 2.2.10。
同樣地,如果您使用的 KSP 版本低於 2.2.10-2.0.2,AGP 會將 KSP 版本升級至 2.2.10-2.0.2,以配合 KGP 版本。
因此,如果您選擇停用內建 Kotlin,並想使用舊版 KGP 或 KSP,請在頂層建構檔案中新增下列項目:
buildscript {
dependencies {
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
version { strictly("KGP_VERSION") }
}
classpath("com.google.devtoolsksp:symbol-processing-gradle-plugin") {
version { strictly("KSP_VERSION") }
}
}
}
IDE 支援測試固件
AGP 9.0 針對測試固定裝置,提供完整的 Android Studio IDE 支援。如要取得這項支援,請使用 AGP 9.0.0-alpha07 以上版本。
行為變更
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
|
false → true |
如要停用這項功能,請設定 android.newDsl=false。確認專案使用的所有外掛程式和建構邏輯都相容後,即可移除停用選項。 |
android.builtInKotlin |
啟用內建 Kotlin | false → true |
遷移至內建 Kotlin (如可行) 或停用。 |
android.uniquePackageNames |
強制規定每個程式庫都必須有不同的套件名稱。 | false → true |
為專案中的所有程式庫指定不重複的套件名稱。 如果無法這樣做,您可以在遷移期間停用這個標記。 |
android.dependency.useConstraints |
控管設定之間的依附元件限制。 AGP 9.0 的預設值為 false,只會在應用程式裝置測試 (AndroidTest) 中使用限制。
將此值設為 true,即可還原為 8.13 版的行為。
|
true → false |
除非必要,否則請勿在所有位置使用依附元件限制。 接受這個標記的新預設值,也會在專案匯入程序中啟用最佳化功能,減少含有許多 Android 程式庫子專案的建構作業匯入時間。 |
aandroid.enableAppCompileTimeRClass |
在應用程式中針對非最終 R 類別編譯程式碼,讓應用程式編譯與程式庫編譯保持一致。 這項功能可提升增量,並為日後資源處理流程的效能最佳化奠定基礎。 |
false → true |
許多專案只要採用新行為即可,不必變更來源。 如果 R 類別欄位用於需要常數的任何位置 (例如 switch 案例),請重構為使用鏈結的 if 陳述式。 |
android.sdk.defaultTargetSdkToCompileSdkIfUnset |
將編譯 SDK 版本做為應用程式和測試中目標 SDK 版本的預設值。 在此變更前,目標 SDK 版本預設為最低 SDK 版本。 |
false → true |
為應用程式和測試明確指定目標 SDK 版本。 |
android.onlyEnableUnitTestForTheTestedBuildType |
只會為受測建構類型建立單元測試元件。 在預設專案中,這會產生單一偵錯單元測試, 先前的行為則是針對偵錯或發布執行單元測試。 |
false → true |
如果專案不需要針對偵錯和發布版本執行測試,則無需進行任何變更。 |
android.proguard.failOnMissingFiles |
如果 AGP DSL 中指定的任何保留檔案不存在於磁碟上,就會導致建構失敗並顯示錯誤。在這項異動之前,如果檔案名稱有錯字,系統會直接忽略檔案。 | false → true |
移除所有無效的 ProGuard 檔案宣告 |
android.r8.optimizedResourceShrinking |
一併考量類別和 Android 資源,讓 R8 保留較少的 Android 資源。 | false → true |
如果專案的保留規則已完成,則無須變更。 |
android.r8.strictFullModeForKeepRules |
允許 R8 保留較少的項目,方法是在保留類別時,不要隱含保留預設建構函式。也就是說,-keep class A 不再表示
-keep class A { <init>(); } |
false → true |
如果專案的保留規則已完成,則無須變更。
將專案的保留規則中,需要保留預設建構函式的所有案例,將 -keep class A 替換為 -keep class A { <init>(); }。 |
android.defaults.buildfeatures.resvalues |
在所有子專案中啟用
resValues |
true → false |
只在需要 resValues 的子專案中啟用,方法是在這些專案的 Gradle 建構檔案中設定以下內容:android {
buildFeatures {
resValues = true
}
} |
android.defaults.buildfeatures.shaders |
在所有子專案中啟用 著色器編譯 | true → false |
如要只在含有待編譯著色器的子專案中啟用著色器編譯,請在這些專案的 Gradle 建構檔案中設定下列項目:android {
buildFeatures {
shaders = true
}
} |
android.r8.proguardAndroidTxt.disallowed |
在 AGP 9.0 中,getDefaultProguardFile() 只會支援 proguard-android-optimize.txt,不會支援 proguard-android.txt。這是為了避免意外使用 dontoptimize 標記,該標記包含在 proguard-android.txt 中。
|
false → true |
如要避免最佳化,除了使用 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
|
false → true |
發布的程式庫應移除所有不相容的規則。內部程式庫應將任何不相容但必要的規則移至應用程式模組中的 proguardFile。如要停用,請設定 android.r8.globalOptionsInConsumerRules.disallowed=false。所有消費者保留檔案都相容後,即可移除停用選項。
|
已移除的功能
Android Gradle 外掛程式 9.0 版移除了下列功能:
- 嵌入式 Wear OS 應用程式支援
AGP 9.0 移除了嵌入式 Wear OS 應用程式的支援,Play 不再支援這類應用程式。這包括移除wearApp設定和AndroidSourceSet.wearAppConfigurationNameDSL。如要瞭解如何將應用程式發布至 Wear OS,請參閱「發布至 Wear OS」一文。 androidDependencies和sourceSets報告工作
已變更的 DSL
Android Gradle 外掛程式 9.0 版的 DSL 破壞性變更如下:
已移除
CommonExtension的參數化。就本身而言,這只是來源層級的重大變更,有助於避免日後發生來源層級的重大變更,但也表示區塊方法需要從
CommonExtension移至ApplicationExtension、LibraryExension、DynamicFeatureExtension和TestExtension。將專案升級至 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 移除的項目:
AndroidSourceSet.jni,因為該功能無法運作。AndroidSourceSet.wearAppConfigurationName,因為這與已移除的內嵌 Wear OS 應用程式支援有關。BuildType.isRenderscriptDebuggable,因為該功能無法運作。DependencyVariantSelection。已由DependencySelection取代,後者會公開為kotlin.android.localDependencySelectionInstallation.installOptions(String)。這項屬性已由Installation.installOptions的可變動屬性取代。實驗性但從未穩定化的
PostProcessing區塊。ProductFlavor.setDimension,已由dimension屬性取代,這項功能只適用於已淘汰的 Google Play 免安裝。
LanguageSplitOptions
已移除的 API
Android Gradle 外掛程式 9.0 移除的項目:
Component.transformClassesWith。已由Instrumentation.transformClassesWith取代Component.setAsmFramesComputationMode。已由Instrumentation.setAsmFramesComputationMode取代ComponentBuilder.enabled。這項功能已由ComponentBuilder.enable取代。DependenciesInfoBuilder.includedInBundle。已由includeInBundle取代。Variant.minSdkVersion。已由minSdk取代Variant.maxSdkVersion。已由maxSdk取代Variant.unitTest,因為這不適用於com.android.test外掛程式。unitTest可用於擴充HasUnitTest的VariantBuilder子類型。VariantBuilder.targetSdk和targetSdkPreview,因為這些函式庫中沒有意義。請改用GeneratesApkBuilder.targetSdk或GeneratesApkBuilder.targetSdkPreview。VariantBuilder.enableUnitTest,因為這不適用於com.android.test外掛程式。enableUnitTest可用於擴充HasUnitTestBuilder的VariantBuilder子類型。VariantBuilder.unitTestEnabled已移除,並改用命名更一致的enableUnitTest,適用於擴充HasUnitTestBuilder的VariantBuilder子型別。VariantOutput.enable。已由enabled取代已淘汰並停用的
FeaturePlugin和FeatureExtension。已淘汰並停用的
BaseExtension.registerTransformAPI,僅用於允許針對最新 AGP 版本進行編譯,同時以在 AGP 4.2 以下版本執行為目標。
已移除的 Gradle 屬性
最初新增下列 Gradle 屬性,是為了全域停用預設啟用的功能。
自 AGP 8.0 以下版本起,這些功能預設為停用。只在需要使用這些功能的子專案中啟用,以提高建構效率。
| 屬性 | 函式 | 取代 |
|---|---|---|
android.defaults.buildfeatures.aidl |
在所有子專案中啟用 AIDL 編譯 |
只在有 AIDL 來源的子專案中啟用 AIDL 編譯,方法是在這些專案的 Gradle 建構檔案中設定下列屬性:android {
buildFeatures {
aidl = true
}
} |
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 外掛程式 |
|
|||
| Lint |
|
|||
Android Gradle 外掛程式 9.0.0-alpha09
| 已修正問題 | ||||
|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
|||
Android Gradle 外掛程式 9.0.0-alpha08
| 已修正問題 | |
|---|---|
| AGP 9.0.0-alpha08 未將任何公開問題標示為已修正 |
Android Gradle 外掛程式 9.0.0-alpha07
| 已修正問題 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
||||||||
Android Gradle 外掛程式 9.0.0-alpha06
| 已修正問題 | |||||
|---|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
||||
| Lint |
|
||||
Android Gradle 外掛程式 9.0.0-alpha05
| 已修正問題 | |||||
|---|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
||||
| Lint |
|
||||
Android Gradle 外掛程式 9.0.0-alpha04
| 已修正問題 | ||||
|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
|||
| Lint |
|
|||
Android Gradle 外掛程式 9.0.0-alpha03
| 已修正問題 | ||||
|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
|||
| Lint |
|
|||
Android Gradle 外掛程式 9.0.0-alpha02
| 已修正問題 | ||||
|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
|||
Android Gradle 外掛程式 9.0.0-alpha01
| 已修正問題 | |||||||
|---|---|---|---|---|---|---|---|
| Android Gradle 外掛程式 |
|
||||||