Android Gradle 外掛程式 8.2.0 (2023 年 11 月)

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

相容性

Android Gradle 外掛程式 8.2 支援的最高 API 級別為 API 級別 34。以下提供其他相容性資訊:

最低版本 預設版本 附註
Gradle 8.2 8.2 詳情請參閱「更新 Gradle」一節。
SDK 版本工具 34.0.0 34.0.0 安裝設定 SDK 版本工具。
NDK 25.1.8937393 安裝設定 NDK 其他版本。
JDK 17 17 詳情請參閱「設定 JDK 版本」相關說明。

新增可指定 JDK 路徑的巨集

#GRADLE_LOCAL_JAVA_HOME 是新的巨集,可用於指定 JDK 路徑。如此一來,您就能更輕鬆安全地為專案指定 Java 主路徑,用於 Gradle Daemon (背景程序) 的執行作業。您選取的路徑會儲存在 .gradle/config.properties 檔案的 java.home 欄位中。在 Android Studio 中,您可以透過 Gradle JDK 設定來設定這個欄位:依序選取「File」 (或 macOS 上的「Android Studio」) >「Settings」>「Build, Execution, Deployment」>「Build Tools」>「Gradle」

根據預設,新專案會使用 #GRADLE_LOCAL_JAVA_HOME。除非您已使用 #JAVA_HOME 等巨集,否則成功同步處理後,現有專案會自動遷移至新的巨集。

這個新巨集的主要優點如下:

  • 不必先開啟專案即可手動修改 JDK 路徑,觸發同步處理作業。
  • 降低與不相容的 Gradle 和專案 JDK 版本相關的錯誤,因為您選取的 Gradle JDK 只有單一可靠資料來源。

已修正問題

Android Gradle 外掛程式 8.2.0 版

已修正問題
Android Gradle 外掛程式
自訂來源類型應建立多個 sourceSets 變種版本
SDK 版本檢查不會處理 SDK 擴充功能的使用者
DependenciesInfoBuilder 需要更新 API 和相關文件
由於缺少巢狀結構成員,指定 Java 11 的 DexingNoClasspathTransform (minSdk >= 24) 無法執行
DslExtension.Builder.extendProjectWith() 無法以 Groovy 中所述方式運作
新增不使用 kotlin.Pair 的 VariantSelector.withFlavor API
由於「proguard.txt」已變更,AndroidLintAnalysisTask (:lintAnalyzeExternalRelease) 會發生快取失敗的情況
應用程式合併的資訊清單包含來自依附元件的 extractNativeLibs 和 useEmbeddedDex 屬性
AIDL 無法搭配建構工具 33.0.0 運作
AGP:公開 AIDL 工具的路徑和架構 AIDL 檔案做為公用 API
要求:讓 IDE 提供「PermittedSubclasses requires ASM9」的修正項目
編譯 AGP 時指定位元碼 17
移除 VariantManager.getModifiedName
AndroidTest.packaging.jniLibs.keepDebugSymbols 不會影響 androidTest 封裝作業
GMD 檢測設備測試工作會停止運作,且在重試時失敗
agp 8.1.0 中的 generateLocaleConfig 採用非確定性排序,會造成可重現的建構作業中斷
ProcessApplicationManifest.navigationJsons 的檔案中有絕對路徑
建立 AnalyticsService 後,無法透過 AnalyticsConfiguratorService 存取 GradleBuildProject.Builder
AndroidTest.packaging.jniLibs.keepDebugSymbols 不會影響 androidTest 封裝作業
允許對無效色彩值進行編譯
VariantBuilder 的「ReplaceWith」有誤
Gradle 8.1 因 .gradle/.android/analytics.settings 造成設定快取中斷
淘汰訊息並未使用「ReplaceWith」
公開一個能取得預設 NDK 版本的方法
Android Gradle 外掛程式需要 Java 17 才能執行
ASM 轉換和 toAttach() 不相容
修正在 KMP 專案中透過 Gradle 與 K2 UAST 執行 Lint 時的 LintErrors
支援變化版本層級的 missingDimensionStrategy,以及可能的建構類型/變種版本 matchingFallback
「android.injected.studio.version」已從 Android Studio Giraffe 中移除
新增停用 AndroidXDependencyCheck 的功能
agp 8.1.0 中的 generateLocaleConfig 採用非確定性排序,會造成可重現的建構作業中斷
透過 AAR 中繼資料宣傳 R8/D8 版本要求 (例如針對 coreLibraryDesugaring 和新的 API 外聯)
同步處理警告:「GradleBuildProject.Builder should not be accessed through AnalyticsConfiguratorService after AnalyticsService is created」
更新至 Gradle 8.2 milestone 或 RC
無法存取「java.lang.Comparable」
Android 程式庫模組不提供 androidResources
AGP 從 8.0.2 更新至 8.1.0 之後,':app:mergeReleaseClasses' 工作執行失敗
Gradle 8.1 因 .gradle/.android/analytics.settings 造成設定快取中斷
[AGP 8.1.0] 如果 splits.abi.isEnable 和 testOptions.unitTests.isIncludeAndroidResources 皆為 true,./gradlew 測試會失敗,並顯示「Unable to find manifest output」
Android Studio Giraffe 搭配 AGP 8.1 時不會遵循 versionCodeOverride 的運作方式
執行檢測設備測試後,AGP 8.1.0 會解除安裝應用程式 - 7.4.2 不會
轉換 APK 會導致 ListingFileRedirectTask 發生錯誤
HEDGEHOG REGRESSION:執行按鈕會延遲幾秒鐘 (建立規格)
Dexer (D8)
對最低 API 級別 34 以上版本進行 DEX 處理時,啟用原生記錄和密封類別
Lint
例項化的 Lint 檢查功能無法妥善處理 AppComponentFactory
Lint 8.2.0 Alpha 版仍不支援在 Kotlin 中匯入頂層函式
新增不要在 Lint 基準中加入行數和欄數的選項
新增不要在 Lint 基準中加入行數和欄數的選項
Lint 測試不支援 Java 17 語言功能
Bumblebee 2021.1.1 修補程式 1 指出,commons-io 的較舊版本 (20030203.000550) 比 2.11.0 版新。
Lint 8.2.0 Alpha 版仍不支援在 Kotlin 中匯入頂層函式
Bumblebee 2021.1.1 修補程式 1 指出,commons-io 的較舊版本 (20030203.000550) 比 2.11.0 版新。
Android Studio 會誤將指定版本標示為過時。
使用 K2 UAST 時,Lint 會忽略 UseValueOf 問題
其他由 Android Lint 標記的專案發生非預期的問題
Android Lint 在 KMP 程式庫中執行失敗,並顯示「property 'variantInputs.name' doesn't have a configured value.」。
Lint 整合
testImplementation 依附元件中的 DuplicatePlatformClasses lint 錯誤
縮減器 (R8)
java.lang.VerifyError:類別遭驗證器拒絕
使用 Apache POI 程式庫時,建構作業會在執行 :minifyReleaseWithR8 時卡住
如果移除空值檢查,Kotlin 1.9 會導致 Kotlin lambda 遭到 R8 刪除

Android Gradle 外掛程式 8.2.1 版

已修正問題
Android Gradle 外掛程式
如果子專案類別已透過構件轉換作業完成 dex 處理,請不要在子專案類別上執行 dex 工作
Android Gradle 外掛程式無法搭配使用 JavaVersion.VERSION_11 和 OpenJDK 21 ea
Dexer (D8)
Android U 的脫糖記錄
縮減器 (R8)
R8 會產生毀損的 dex,在執行階段導致類別層級轉換例外狀況
R8 導致介面變更為無法存取的介面
R8 Flurry SDK 在使用 AGP 8.2.0 時當機
Android - R8 導致 LinearLayoutManager 的子類別當機
重新封裝時,R8 中的 ClassCastException 會關閉,縮減、模糊化和最佳化功能則會關閉
R8 在 BridgeAnalyzer.analyzeMethod 中停滯
R8 第 8.2.33 版,升級後發生「java.lang.VerifyError: Bad type on operand stack」執行階段當機問題

Android Gradle 外掛程式 8.2.2 版

已修正問題
Android Gradle 外掛程式
無法在 AGP 8.2.0 中設定 JaCoCo 版本
Dexer (D8)
[脫糖程式庫] 脫糖程式庫 2.1 版本與舊版 R8 不相容
是否只在 D8 中執行最佳化?
縮減器 (R8)
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
class.getInterfaces() 傳回空白