本頁面提供 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.library
和com.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) } } |
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
|
false → true |
如要停用這項功能,請設定 android.newDsl=false 。確認專案使用的所有外掛程式和建構邏輯都相容後,即可移除停用選項。 |
android.builtInKotlin |
支援直接在 Android Gradle 外掛程式中編譯 Kotlin 程式碼,不必使用 org.jetbrains.kotlin.android 外掛程式。 |
false → true |
盡可能移除 org.jetbrains.kotlin.android 外掛程式的使用情形,改用內建的 Kotlin。如要停用,請將 android.builtInKotlin=false 設為
|
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.wearAppConfigurationName
DSL。如要瞭解如何將應用程式發布至 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.localDependencySelection
Installation.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.registerTransform
API,僅用於允許針對最新 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 外掛程式 |
|