Android Gradle 外掛程式 9.0.1 版 (2026 年 1 月)

Android Gradle 外掛程式 9.0 是主要版本,會變更 API 和行為。

如要更新至 Android Gradle 外掛程式 9.0.1,請使用 Android Gradle 外掛程式升級工具。AGP 升級輔助程式會在適當情況下,協助您在升級專案時保留現有行為,因此即使您尚未準備好採用 AGP 9.0 的所有新預設值,仍可將專案升級至 AGP 9.0。

此外,您也可以使用兩項代理技能,簡化升級程序。如果是非 KMP 應用程式,請嘗試使用 Android 技能存放區中的 AGP 9 升級技能。如果是 KMP 應用程式,請嘗試使用 JetBrains 的 AGP 9 升級技能。如要進一步瞭解如何在 Android Studio 中使用技能,請參閱「使用技能擴充代理模式」。

相容性

Android Gradle 外掛程式 9.0 支援的最高 API 級別為 36.1。其他相容性資訊如下:

最低版本 預設版本 附註
Gradle 9.1.0 9.1.0 詳情請參閱「更新 Gradle」一節。
SDK 版本工具 36.0.0 36.0.0 安裝或設定 SDK 建構工具。
NDK 不適用 28.2.13676358 安裝或設定 NDK 其他版本。
JDK 17 17 詳情請參閱「設定 JDK 版本」相關說明。
Kotlin Gradle 外掛程式 (KGP) 2.2.10 2.2.10 詳情請參閱「Kotlin Gradle 外掛程式的執行階段依附元件」。

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

過去幾年來,我們為 DSL 和 API 導入了新介面,以便進一步控管哪些 API 為公開。AGP 7.x 和 8.x 版仍使用舊的 DSL 類型 (例如 BaseExtension),這些類型也實作了新的公開介面,以便在介面開發期間維持相容性。

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

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

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

  • 更新建構檔案:雖然介面變更旨在盡可能保持 DSL 相似,但可能會有一些小變更。

  • 更新自訂建構邏輯,參照新的 DSL 和 API: 將所有內部 DSL 參照替換為公開 DSL 介面。在大多數情況下,這會是一對一的替換。請改用新的 androidComponents API,取代 applicationVariants 和類似 API。這可能較為複雜,因為 androidComponents API 的設計更穩定,可讓外掛程式相容更久。如需範例,請參閱 Gradle 秘訣。

  • 更新第三方外掛程式:部分第三方外掛程式可能仍依賴不再公開的介面或 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 沒有直接替代方案。
dexOptions 與 dx 工具相關的過時設定,已由 d8 取代。自 Android Gradle 外掛程式 7.0 起,所有設定都不會產生任何效果。 沒有直接替代方案。
generatePureSplits 為免安裝應用程式產生設定分割。 Android App Bundle 現在內建提供設定分割的功能。
aidlPackagedList 要在 AAR 中封裝的 AIDL 檔案,以便將其公開為依附於此程式庫的程式庫和應用程式的 API。 這項資訊仍會顯示在 LibraryExtension 上,但不會顯示在其他擴充功能類型上。

如果您更新至 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

或者,如要逐步遷移,AGP 9.4 可讓您選擇不採用個別模組。如要瞭解如何操作,請參閱「Variant API 模組選擇不採用」。

在 AGP 9.0 中,先前的類別會標示為已淘汰。也就是說,如果專案選擇不採用 newDsl 旗標,就會看到淘汰警告,包括 android 區塊本身。

您也可以在升級至 AGP 9.0 之前,先開始升級至新版 API。新介面已在多個 AGP 版本中推出,因此您可以混合使用新舊介面。AGP API 參考資料會顯示每個 AGP 版本的 API 介面,以及各類別、方法和欄位的新增時間。

我們正與常用外掛程式的作者聯絡,協助他們調整及發布與新模式完全相容的外掛程式,並會繼續強化 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 子專案,選擇性停用內建 Kotlin 支援。

Kotlin Gradle 外掛程式的執行階段依附元件

為提供內建 Kotlin 支援,Android Gradle 外掛程式 9.0 現在對 Kotlin Gradle 外掛程式 (KGP) 2.2.10 有執行階段依附元件。也就是說,您不必再宣告 KGP 版本,如果您使用的 KGP 版本低於 2.2.10,Gradle 會自動將 KGP 版本升級至 2.2.10。同樣地,如果您使用的 KSP 版本低於 2.2.10-2.0.2,AGP 會將其升級至 2.2.10-2.0.2,以符合 KGP 版本。

升級至更高 KGP 版本

如要使用更高版本的 KGP 或 KSP,請在頂層建構檔案中加入以下內容:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:KGP_VERSION")

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin:KSP_VERSION")
    }
}

降級至較低的 KGP 版本

只有在選擇不採用內建 Kotlin 時,才能降級 KGP 版本。這是因為 AGP 9.0 預設會啟用內建 Kotlin,而內建 Kotlin 需要 KGP 2.2.10 以上版本。

如要使用較低版本的 KGP 或 KSP,請在頂層建構檔案中,使用嚴格版本宣告該版本:

buildscript {
    dependencies {
        // For KGP
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") {
            version { strictly("KGP_VERSION") }
        }

        // For KSP
        classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin") {
            version { strictly("KSP_VERSION") }
        }
    }
}

請注意,可降級的最低 KGP 版本為 2.0.0。

IDE 支援測試固件

AGP 9.0 為測試固件提供完整的 Android Studio IDE 支援。

Fused Library 外掛程式

Fused Library Plugin (預先發布版) 可讓您將多個程式庫發布為單一 Android 程式庫 AAR。這樣一來,使用者就能更輕鬆地依賴您發布的構件。

如要瞭解如何開始使用,請參閱「使用 Fused Library 將多個 Android 程式庫合併發布」。

行為變更

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.useAndroidx 根據預設,請使用 androidx 依附元件。 false → true 採用 androidx 依附元件。
android.default.androidx.test.runner 根據預設,使用 androidx.test.runner.AndroidJUnitRunner 類別執行裝置端測試,取代已淘汰的 InstrumentationTestRunner 預設值
android {
  defaultConfig {
    testInstrumentationRunner = "..."
  }
}
false → true 採用 AndroidJUnitRunner,或明確指定自訂 testInstrumentationRunner。
android.dependency.useConstraints 控管設定之間的依附元件限制。
AGP 9.0 的預設值為 false,只會在應用程式裝置測試 (AndroidTest) 中使用限制。 如果將這項政策設為 true,就會還原為 8.13 版的行為。
true → false 除非必要,否則請勿在所有地方使用依附元件限制。 接受這項旗標的新預設值,也會啟用專案匯入程序的最佳化功能,進而縮短含有多個 Android 程式庫子專案的建構作業匯入時間。
android.enableAppCompileTimeRClass 根據非最終 R 類別編譯應用程式中的程式碼,使應用程式編譯與程式庫編譯保持一致。
這可提升增量,並為日後資源處理流程的效能最佳化奠定基礎。
false → true 許多專案只要採用新行為,不必變更來源。如果 R 類別欄位用於需要常數的任何位置 (例如 switch case),請重構為使用鏈結 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 允許 R8 同時考量類別和 Android 資源,保留較少的 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。這是為了避免意外使用 proguard-android.txt 中包含的 ­dontoptimize 旗標。 false → true 如要避免最佳化,您可以在自訂 proguardFile 中明確指定 ­dontoptimize,並使用 proguard-android-optimize.txt。請盡可能從這個檔案中移除 ­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。所有 Keep 檔案都相容後,請移除「選擇不採用」設定。
android.sourceset.disallowProvider 禁止使用 AndroidSourceSet DSL 傳遞生成來源的供應器。 false → true 在 androidComponents 上使用 Sources API 註冊產生的來源。
android.custom.shader.path.required 如果已啟用著色器編譯功能,則必須在 local.properties 中明確設定著色器編譯器路徑。 false → true 在專案的 local.properties 中新增 glslc.dir=/path/to/shader-tools。

已移除的功能

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

  • 內嵌 Wear OS 應用程式支援
    AGP 9.0 移除內嵌 Wear OS 應用程式的支援,Play 不再支援這項功能。包括移除 wearApp 設定和 AndroidSourceSet.wearAppConfigurationName DSL。如要瞭解如何將應用程式發布至 Wear OS,請參閱「發布至 Wear OS」。
  • androidDependencies 和 sourceSets 報表工作
  • 支援密度分割 APK
    AGP 9.0 不再支援根據螢幕密度建立分割 APK。這項功能和相關 API 已移除。如要使用 AGP 9.0 以上版本,根據螢幕密度分割 APK,請使用應用程式套件。

已變更 DSL

Android Gradle 外掛程式 9.0 包含下列破壞性 DSL 變更:

  • CommonExtension 的參數化功能已移除。

    就本身而言,這只是來源層級的破壞性變更,有助於避免日後發生來源層級的破壞性變更,但也意味著區塊方法必須從 CommonExtension 移至 ApplicationExtension、LibraryExtension、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 移除:

已移除的 API

Android Gradle 外掛程式 9.0 移除:

已移除 Gradle 屬性

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

自 AGP 8.0 或更低版本起,這些功能預設為停用。請只在會用到這些功能的子專案中啟用,建構作業會更有效率。

屬性 函式 替換
android.defaults.buildfeatures.aidl 在所有子專案中啟用 AIDL 編譯 在這些專案的 Gradle 建構檔案中設定下列屬性,只在有 AIDL 來源的子專案中啟用 AIDL 編譯:
在每個包含 AIDL 來源的子專案 Gradle 建構檔案中,加入
android {
  buildFeatures {
    aidl = true
  }
}
android.defaults.buildfeatures.renderscript 在所有子專案中啟用 RenderScript 編譯 在這些專案的 Gradle 建構檔案中設定下列屬性,僅在含有 renderscript 來源的子專案中啟用 renderscript 編譯:
android {
  buildFeatures {
    renderScript = true
  }
}

強制執行的 Gradle 屬性

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

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

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

R8 變更

AGP 9.0.0 包含下列 R8 變更。

新設定選項 -processkotlinnullchecks

我們新增了 R8 選項 -processkotlinnullchecks,可設定 R8 處理 Kotlin 空值檢查。這個選項會採用必要引數,且必須是下列三個值之一:keep、remove_message 和 remove。這個選項會處理 Kotlin 編譯器新增的下列空值檢查:

class kotlin.jvm.internal.Intrinsics {
  void checkNotNull(java.lang.Object);
  void checkNotNull(java.lang.Object, java.lang.String);
  void checkExpressionValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkNotNullExpressionValue(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String);
  void checkReturnedValueIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkFieldIsNotNull(java.lang.Object, java.lang.String);
  void checkFieldIsNotNull(
      java.lang.Object, java.lang.String, java.lang.String);
  void checkParameterIsNotNull(java.lang.Object, java.lang.String);
  void checkNotNullParameter(java.lang.Object, java.lang.String);
}

選項值由弱到強排序,效果如下:

  • keep 不會變更檢查。
  • remove_message 會將每個檢查方法呼叫,重寫為對呼叫的第一個引數呼叫 getClass() (有效保留空值檢查,但沒有任何訊息)。
  • remove 會完全移除檢查。

根據預設,R8 會使用 remove_message。任何 -processkotlinnullchecks 規格都會覆寫該值。如果指定多次,系統會使用最強的值。

停止將保留資訊傳播至隨附方法

當保留規則與需要脫糖的介面方法相符時,R8 先前會在內部將「不允許最佳化」和「不允許縮減」位元轉移至合成隨附方法。

從 AGP 9.0 開始,保留規則不再適用於隨附方法。這與保留規則不適用於其他編譯器合成欄位/方法/類別的事實一致。

將「不允許最佳化」和「不允許縮減」位元轉移至隨附方法後,先前支援以下用途:

  1. 使用 default/static/private 介面方法將程式庫編譯為 DEX,其中 minSdk < 24,且規則會保留介面方法。
  2. 使用類別路徑和 -applymapping 上的程式庫編譯應用程式。
  3. 合併應用程式和程式庫。

請注意,這項功能僅適用於 -applymapping,因為 disallow obfuscation 位元不會轉移至伴隨方法,也就是說,從步驟 1 產生的伴隨類別會有名稱經過模糊處理的方法。

日後,minSdk < 24 將不再支援這項用途。解決方法如下:

  1. 使用 default/static/private 介面方法,將程式庫脫糖至 minSdk < 24 的類別檔案。
  2. 使用 R8 和規則編譯脫糖構件,在隨附類別中保留介面方法。
  3. 使用 classpath 上的程式庫編譯應用程式。
  4. 合併應用程式和脫糖構件。

這項異動的另一個副作用是,無法再保留介面伴生物件方法中匿名和本機類別的內部類別和封閉方法屬性。

將預設發出的來源檔案變更為 r8-map-id-<MAP_ID>

這項異動自 AGP 8.12.0 起生效。

需要重新追蹤時 (也就是啟用模糊處理或最佳化時),類別的預設發出來源檔案屬性會從 SourceFile 變更為 r8-map-id-<MAP_ID>。

如果堆疊追蹤經過模糊處理,新的來源檔案屬性可擷取反向追蹤所需的對應檔案 ID,用於支援在 Logcat 中自動反向追蹤堆疊追蹤。

如果使用自訂來源檔案屬性 (-renamesourcefileattribute),則該屬性仍會優先採用。

在 ProGuard 相容模式下 (gradle.properties 包含 android.enableR8.fullMode=false 時),只有在未保留 SourceFile 屬性的情況下,發出 r8-map-id-<MAP_ID> 的來源檔案屬性才會生效。如果應用程式使用 ProGuard 相容模式,且想在堆疊追蹤中加入對應檔案 ID,應移除 -keepattributes SourceFile (或遷移至 R8 完整模式)。

r8-map-id-<MAP_ID> 中使用的對應 ID 是完整的對應雜湊,而非先前使用的 7 個字元前置字串。

在 L8 脫糖中啟用縮減合成名稱

D8 產生的合成類別名稱通常包含子字串 $$ExternalSynthetic,表示這是 D8 產生的合成類別。此外,合成名稱也會對合成種類進行編碼 (例如 Backport、Lambda)。這會對產生的 DEX 大小造成負面影響,因為類別名稱會占用字串集區中的更多空間。

AGP 9.0 會設定 L8 (核心程式庫脫糖),讓包含所有 j$ 類別的 DEX 檔案,對合成類別使用新的縮短類別名稱格式。新類別名稱會使用數字 ID (例如 $1)。

移除對 -addconfigurationdebugging 的支援

AGP 9.0 不再支援 -addconfigurationdebugging。如果使用這個旗標,編譯器現在會回報警告。

移除從 D8/R8 產生 L8 規則的支援

這項異動僅適用於直接使用 D8/R8 指令列或 API 的開發人員。

R8 9.0 停止支援從 D8 和 R8 為 L8 產生保留規則。請改用 TraceReferences。

具體來說,D8Command.builder.setDesugaredLibraryKeepRuleConsumer 和 R8Command.Builder.setDesugaredLibraryKeepRuleConsumer 方法已移除,且 D8 和 R8 的指令列選項不再支援 --desugared-lib-pg-conf-output。

已修正問題

Android Gradle 外掛程式 9.0.0

已修正問題
Android Gradle 外掛程式
功能要求:將理想的 AGP 版本插入為屬性
穩定 SingleArtifact.VERSION_CONTROL_INFO_FILE
androidTest connectedCheck logcat 輸出內容損毀
AGP 內建的 Kotlin 支援不應與 Kotlin 來源集同步
missingDimensionStrategy 偏好與自身名稱相符的版本,即使來自不相關的維度也一樣
AGP 內建的 Kotlin 支援不應與 Kotlin 來源集同步
AGP 9.0.0-rc01 無法透過 kotlin() 函式解析 Kotlin 程式庫
Built-in-kotlin 不會在 Maven POM 中發布 kotlin-stdlib 依附元件限制
新增測試案例,測試 compileSdk 和 targetSdk 之間的差異
resConfigs 值空白會導致不明確的 aapt 錯誤
純 Java 專案依附於 Kotlin stdlib。
在 AGP 9.0 中移除已淘汰的 KotlinMultiplatformAndroidCompilationBuilder 屬性
`com.android.tools.build:gradle:9.0.0-alpha05` 應對 KGP 和 gradle-api 有 API 依附元件
重新命名 com.android.experimental.built-in-kotlin Gradle 外掛程式
AGP9:`variant.sources.kotlin!!.addGeneratedSourceDirectory()` 無法運作
編譯 SDK 的 AAR 中繼資料檢查使用舊版 DSL
移除已淘汰的 `com.android.build.api.dsl.ManagedDevices.devices` 屬性
AGP 內建的 Kotlin 支援不應與 Kotlin 來源集同步
如果消費者保留檔案包含 -dontobfuscate,則無法發布 Android 程式庫
沒有列印最佳化資源對應的選項
在這個階段結束後,呼叫 finalizeDsl 會發生錯誤
即使停用 Jetifier,AGP 仍會初始化 Jetifier 設定
當 `kotlin.stdlib.default.dependency` 對模組和 pom 檔案為 true 時,內建的 kotlin 不會將 kotlinStdlib 新增為編譯時間依附元件
新的最佳化 DSL 預設不會建立 configuration.txt
AGP 8.13.0 無法驗證模組中的導覽圖
AGP 使用已淘汰的 Gradle API:多字串標記法
警告嘗試使用舊版 multidex 程式庫且 minSdkVersion >=21 的使用者
如果存在程式碼生成工作,建構作業就會失敗
使用 `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 錯誤不正確
與「kotlin-kapt」不同,「legacy-kapt」外掛程式會略過註解處理
compileSdkSpec.minorApiLevel 無法與 SettingsExtension 搭配使用
[fused lib - public] Generated fused library does not include sources
extractNativeLibs 和 useEmbeddedDex 不應來自資訊清單
AGP 9.0.0-alpha09 中 R8 的警告
在 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 旗標
ProGuard 檔案不存在時建構失敗
移除 buildconfig 預設 gradle.properties 旗標
將應用程式的 targetSdk 預設值變更為以 compileSdk 為基礎,而非 minSdk
啟用 `isIncludeAndroidResources` 時,`process{Variant}UnitTestManifest` 無法在 AGP 8.12.0 中合併 tools:overrideLibrary 用途
AGP 導致 Gradle 針對 JVM 測試工作發出淘汰警告
DependencyReportTask 與設定快取不相容
在 AGP 9.0 中,將預設來源/目標 Java 版本從 Java 8 改為 Java 11
將 android.useAndroidX 預設值改為 true
使用內建 Kotlin 套用 kapt 外掛程式時,可更妥善處理例外狀況。
android.proguard.failOnMissingFiles 不適用於 consumerProguardFiles
將 Kotlin Gradle 外掛程式依附元件更新至 2.2.10
使用 KGP API 建立 KotlinJvmAndroidCompilation
Kotlin 明確 API 模式已套用至測試來源
Lint
AGP 8.11.0:使用 apply(from = "...") 套用 .gradle.kts 檔案時,lintAnalyzeRelease 工作會異常終止
Lint 檢查 SdkIntAtLeast 檢查不會檢查註解值是否正確
內建 Kotlin 不會將 .kotlin_module 新增至 META-INF
Lint 類別路徑包含不同版本的重複類別
覆寫私人資源的解決方法無效 (tools:override = "true")
錯誤:移除未使用的資源時,不會一併移除資源的翻譯,也不會詢問是否要移除
Lint 擲回警告「Could not clean up K2 caches」
Lint 擲回警告「Could not clean up K2 caches」
Lint 整合
AndroidLintAnalysisTask 因 systemPropertyInputs.javaVersion 差異,導致不同 JDK 供應商或子版本發生快取失敗
Lint 會自動使用最新安裝的 SDK,而不考慮 compileSdk,不會註冊為工作輸入,且會中斷快取
縮減器 (R8)
如果使用最終資源 ID,R8 最佳化資源縮減功能會失敗,且不會顯示任何訊息