Android Gradle 外掛程式 9.2.0 版 (2026 年 4 月)

Android Gradle 外掛程式 9.2 是次要版本,內含多種新功能及改善項目。

相容性

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

最低版本 預設版本 附註
Gradle 9.4.1 9.4.1 詳情請參閱「更新 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 外掛程式的執行階段依附元件」。

統一涵蓋範圍和測試報表

AGP 9.2.0-alpha07 推出多項工作,可產生 HTML 資訊主頁,彙整各種測試類型 (單元和檢測設備)、模組和建構變體中的測試結果和涵蓋範圍,並在單一資訊主頁中提供全面總覽。詳情請參閱「產生統一程式碼涵蓋率報表」和「查看統一測試報表」。

R8 變更

AGP 9.2.0 包含下列 R8 變更。

更嚴格的 -keepattributes 語意,可保留執行階段不可見的註解

執行階段不可見的註解無法在執行階段讀取。因此,D8 會無條件移除執行階段不可見的註解,且無法變更這項設定。

為確保與 ProGuard 相容,R8 支援輸出執行階段不可見的註解。但編譯為 DEX 時,一般來說不應保留執行階段不可見的註解。不過,一般做法是納入便利規則 -keepattributes *Annotation* (直接或間接來自消費者保留規則),讓 R8 保留執行階段可見的註解。很抱歉,這也會導致執行階段隱藏註解。

為減輕這個問題並更符合 D8 行為,含萬用字元的 -keepattributes 模式不再比對 RuntimeInvisibleAnnotations、RuntimeInvisibleParameterAnnotations 和 RuntimeInvisibleTypeAnnotations。因此,只有在明確提及屬性名稱 (不含萬用字元) 時,系統才會保留執行階段不可見的註解。

現在,下列規則都不會保留執行階段隱藏的註解:

-keepattributes *
-keepattributes *Annotation*
-keepattributes *Invisible*

如要保留執行階段不可見的註解,請使用下列規則:

-keepattributes RuntimeInvisibleAnnotations,
                RuntimeInvisibleParameterAnnotations,
                RuntimeInvisibleTypeAnnotations

支援成員規則中的否定名稱

設定語言已擴充,現在可以比對否定成員名稱模式。

舉例來說,如要比對所有結尾不是「ForTesting」的方法,請使用下列規則:

-keepclassmembers class com.example.MyClass {
  *** !*ForTesting(...);
}

您也可以在 -if 規則的前提條件中,否定成員名稱模式。如果否定成員名稱模式包含萬用字元,則這類萬用字元無法在 -if 後續規則中反向參照。

已修正問題

Android Gradle 外掛程式 9.2.1 版

已修正問題
Android Gradle 外掛程式
將 Gradle 升級至 9.2.0 後,出現「java.lang.ClassNotFoundException: Didn't find class "com.android.tools.r8.RecordTag"」錯誤

Android Gradle 外掛程式 9.2.0 版

已修正問題
Android Gradle 外掛程式
如果使用者有 commonTest 但忘記使用 withHostTestBuilder,系統會發出警告
[fused lib - public] OkHttp includes sources
無法在程式庫中使用資訊清單預留位置執行 androidDeviceTest (AGP 9.0.0,搭配 com.android.kotlin.multiplatform.library 外掛程式)
如果使用者已停用 Java,但有 src/androidDeviceTest/java,AGP 應發出警告
AGP 9.0 沒有與 applicationVariants.all.mergeAssetsProvider 相對應的 androidComponents.onVariant
`*.xml.flat` 檔案包含絕對檔案路徑
R8D8ThreadPoolBuildService 未註冊
JDK 26 導致 JdkImageTransform 失敗
在 AGP 10.0 中,自動將 minAgpVersion 編碼至 AAR 中繼資料
使用新的 AGP DSL 重新命名 APK
存取 (但未評估) bootClasspath 時發生 IllegalStateException 錯誤:targetCompatibility 尚未完成
keepRules sourceset 無法用於程式庫
在 AGP 中嵌入 CC 相容性聲明
將 Kotlin Gradle 外掛程式依附元件更新至 2.3.10
允許測試的 compileSdk 高於主要 SDK
Lint
檢查訊息中的錯別字
由於 `SarifReporter.kt` 中的偏移指標停滯,Lint SARIF 報告中的脈絡視窗遭到截斷
Lint Gradle 用戶端缺少重要功能,因此最多只能算是不可靠
停用資源縮減功能時發生 Lint 錯誤
使用巢狀 IntDef 常數時,AGP 9 Lint 會回報 WrongConstant
停用資源縮減功能時發生 Lint 錯誤
Lint 整合
Android Lint 無法使用編譯為 Java 21 位元組程式碼的自訂 Lint 檢查
Lint Gradle 工作會忽略 --quiet 標記
縮減器 (R8)
指定 Java 11 似乎會導致 d8 損毀