Android Gradle 外掛程式 8.3.0 版 (2024 年 2 月)

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

相容性

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

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

以下是 Android Gradle 外掛程式 8.3 的新功能。

修補程式版本

以下是 Android Studio Iguana 和 Android Gradle 外掛程式 8.3 的修補程式版本清單。

Android Studio Iguana | 2023.2.1 修補程式 2 和 AGP 8.3.2 (2024 年 4 月)

這項次要更新修正了這些錯誤

Android Studio Iguana | 2023.2.1 修補程式 1 和 AGP 8.3.1 (2024 年 3 月)

這項次要更新修正了這些錯誤

支援 Gradle 版本目錄

Android Studio 支援以 TOML 為基礎的 Gradle 版本目錄,這項功能可讓您在單一集中位置管理依附元件,並在模組或專案之間共用依附元件。透過編輯器建議和與「Project Structure」對話方塊的整合,Android Studio 現可讓您更輕鬆地設定版本目錄。瞭解如何設定及設定 Gradle 版本目錄,或如何將建構項目遷移至版本目錄

程式碼完成和導覽

您在以 TOML 檔案格式編輯版本目錄,或將版本目錄中的依附元件新增至建構檔案時,Android Studio 會提供程式碼完成功能。如要使用程式碼完成功能,請按下 Ctrl + 空白鍵 (在 macOS 上為 Command + 空白鍵)。此外,您也可以按下 Ctrl + b (在 macOS 為 Command + b),快速從應用程式 build.gradle 檔案中的依附元件參照,前往版本目錄中宣告該依附元件的所在位置。

新增依附元件時的程式碼完成功能

與「Project Structure」對話方塊整合

如果專案使用 TOML 檔案格式定義的版本目錄,您可以透過 Android Studio 中的「Project Structure」對話方塊「Variables」檢視畫面 (依序點選「File」>「Project Structure」>「Variables」),編輯在該目錄中定義的變數。每個版本目錄都有一個下拉式選單,列出該目錄中的變數。如要編輯變數,請按一下其值並覆寫。儲存這些變更後,TOML 檔案會隨之更新。

在「Project Structure」對話方塊中顯示版本目錄的變數

您也可以在「Project Structure」對話方塊的「Dependencies」檢視畫面中更新依附元件 (依序點選「File」>「Project Structure」>「Dependencies」)。如要使用「Project Structure」對話方塊更新版本,請前往要編輯的模組和依附元件,然後更新「Requested Version」欄位。儲存這些變更後,TOML 檔案就會隨之更新。請注意,如果依附元件版本是使用變數定義,直接以這種方式更新版本會將變數替換為硬式編碼值。另外請注意,無論您是否使用「Project Structure」對話方塊,從建構檔案中移除依附元件,都不會從版本目錄中移除依附元件。

在「Project Structure」對話方塊中,顯示版本目錄的依附元件

已知問題和限制

以下是 Android Studio 支援 Gradle 版本目錄時的已知問題或限制。

  • 在 Kotlin 指令碼檔案中醒目顯示外掛程式別名宣告錯誤:當您新增 alias(libs.plugins.example) 形式的外掛程式宣告時,編輯器會在 libs 部分下方加上紅色底線。這是 Gradle 8.0 以下版本的已知問題,我們會在日後的 Gradle 版本中解決這個問題。

  • Android Studio 僅支援 TOML 格式的版本目錄:目前,Android Studio 的程式碼完成、導覽和專案結構對話方塊支援功能僅適用於 TOML 檔案格式定義的版本目錄。不過,您仍可直接在 settings.gradle 檔案中新增版本目錄,並在專案中使用其依附元件。

  • 不支援 KTS 建構檔案的導覽:使用 Control 鍵 + 點選 (在 macOS 上為 Command 鍵 + 點選) 前往版本目錄中的依附元件定義,對於使用 Kotlin 指令碼編寫的建構檔案,目前尚不支援。

  • Firebase Assistant 會直接在建構指令碼中新增依附元件:Firebase Assistant 會直接將依附元件新增至建構指令碼,而非透過版本目錄。

  • 不支援「找出用途」功能:不論建構檔案是 KTS 還是 Groovy,都無法在其他建構檔案中找出版本目錄變數的用途。也就是說,在版本目錄中使用 Control + 點選 (在 macOS 上為 Command + 點選) 變數定義,不會導向使用該變數的建構檔案。

  • 如果目錄檔案位於根 gradle 資料夾中,Android Studio 中的「Project Structure」對話方塊會顯示多個目錄檔案,但不會顯示複合式建構的目錄。舉例來說,如果您有兩個目錄檔案 (一個用於應用程式,另一個用於複合式版本),則「Project Structure」對話方塊只會顯示應用程式目錄檔案。您可以使用複合式建構,但必須直接編輯 TOML 檔案。

其他 SDK 深入分析:政策問題

Android Studio 會在 build.gradle.ktsbuild.gradle 檔案和「Project Structure」對話方塊中顯示 Lint 警告,表示已標記為違反 Play 政策的公開 SDK 在 Google Play SDK 索引中列出。您應更新所有違反 Play 政策的依附元件,因為這些違規可能會導致您日後無法透過 Google Play 管理中心發布應用程式。違反政策警告可補充 Android Studio 顯示的過時版本警告

Android Studio 的 compileSdk 版本支援

如果專案使用目前 Android Studio 版本不支援的 compileSdk,Android Studio 會顯示警示。如果有可用的版本,系統也會建議您改用支援專案所用 compileSdk 的 Android Studio 版本。請注意,升級 Android Studio 可能也需要升級 AGP。如果目前的 AGP 版本不支援專案使用的 compileSdk,AGP 也會在「Build」工具視窗中顯示警告。

Lint 行為變更

從 Android Gradle 外掛程式 8.3.0-alpha02 開始,在模組上執行 Lint 時,會針對模組的主要元件和測試元件分別執行 Lint 分析工作。這項異動的原因是為了改善效能。如要還原先前的行為,請在 gradle.properties 檔案中設定 android.experimental.lint.analysisPerComponent=false

精確資源縮減功能預設為開啟

精確資源縮減功能預設為開啟,可從 resources.arsc 檔案中移除未使用的項目,並刪除未使用的資源檔案。啟用這項縮減功能後,資源表格會縮減,且 APK 中只會包含參照的 res 資料夾項目。

如要關閉精確資源縮減功能,請在專案的 gradle.properties 檔案中將 android.enableNewResourceShrinker.preciseShrinking 設為 false

已修正問題

Android Gradle 外掛程式 8.3.0 版

已修正問題
Android Gradle 外掛程式
PackageForUnitTest 任務其實不需要建構快取
[AGP 8.1.0] 如果 splits.abi.isEnable 和 testOptions.unitTests.isIncludeAndroidResources 皆為 true,./gradlew 測試會失敗,並顯示「Unable to find manifest output」
使用巢狀 Gradle 複合式版本的 AGP 模型建構作業會失敗
資源縮減器會損壞資源 ID,導致執行階段異常終止
Gradle 最低支援版本檢查只能運作一次,第二次開始就無法執行
AGP 從 8.0.2 更新至 8.1.0 之後,任務 ':app:mergeReleaseClasses' 執行失敗
[Gradle 8.4][升級] 由於使用 kotlin gradle 外掛程式中已淘汰的功能,升級之後整合測試失敗
請勿在設定階段檢查資訊清單重疊檔案是否存在
MergeJavaResWorkAction 錯誤的 Gradle 文件連結無效
Gradle 8.1 因 .gradle/.android/analytics.settings 造成設定快取中斷
AGP 沒有 ProjectComponentIdentifier.build 時不應使用 ProjectComponentIdentifier.projectPath
請減少/移除 AGP「Analytics other plugin to proto: ...」的資訊層級記錄
[Gradle 8.4][升級] ProcessJavaResTask 中設定期間的檔案作業會中斷設定快取
使用 Variant API 取得符號表 (R.txt) 時發生錯誤
Lint 獨立外掛程式無法妥善處理 gradleApi() 依附元件
針對 AGP 類別/屬性提供的 kDoc 不良。「VariantOutput.enable」建議其應替換為「VariantOutput.enable」
AGP 8.3.0-alpha02 無法在 Windows 主機上安裝版本設定檔
強制執行「android.enableDexingArtifactTransform=true」
[Gradle 8.4][升級] 設定階段的檔案處理方式,導致升級之後整合測試失敗
AGP 8.3.0-alpha-02 - 發生錯誤:「Error: Failed to deserialize cached resource repository.」
[Gradle 8.4][升級] TestLabBuildService 設定階段中的檔案處理方式,導致升級之後整合測試失敗
執行檢測設備測試後,AGP 8.1.0 會解除安裝應用程式 - 7.4.2 不會
轉換 APK 會導致 ListingFileRedirectTask 發生錯誤
轉換 ASSETS 構件會產生無效的輸入/輸出位置
將 android.experimental.r8.dex-startup-optimize=true 升級為預設值
遷移至新的 Gradle 設定校正 API
當 Kotlin 編譯器嘗試更新至 IDEA 21.3 時,資源編譯作業失敗
使用構件 API 執行回應式 get()
將「android.lint.printStackTrace」AGP 屬性升級為穩定版
AGP 8.1.0:動態功能:在 exportReleaseConsumerProguardFiles 與 extractProguardFiles 間的隱含依附元件會導致編譯錯誤
「variant.unitTest.jniLibs.addGeneratedSourceDirectory」似乎沒有任何功用
更新用於 AGP 中的 XML 剖析器,以便與 Gradle 8.4 相容
AGP 8.0.1 發布套件 jacoco 檢測未生效
HEDGEHOG REGRESSION:執行按鈕會延遲幾秒鐘 (建立規格)
AGP 8.3.0-alpha11 產生的發布 APK 在啟動時當機,並顯示 android.content.res.Resources$NotFoundException
將「android.lint.printStackTrace」AGP 屬性升級為穩定版
功能要求:將 com.android.build.api.extension.impl.CURRENT_AGP_VERSION 升級為公用 API
SDK Manager 應停止發送過多記錄資訊至 stdout
使用僅包含資源的程式庫模組時,DexArchiveBuilderTaskApproval 作業會失敗
所有擲回重複項目的 AGP7.4 自訂外掛程式變化版本 toTransform:META-INF/MANIFEST.MF 例外狀況
支援新的資訊清單標記
Studio 設定中的「decoupled Projects」連結指向錯誤位置。
請提供在 Javadoc 和 SourceJar 中納入所產生來源的選項
需要快速修正 compileSdk 與具有 minCompileSdkVersion 的依附元件之間的差異
[Gradle] tools:overrideLibrary 應支援星號 (*)
編輯資訊清單時 UI 會凍結
無法在 AGP 8.2.0 中設定 JaCoCo 版本
在使用動態功能的專案中,Android Gradle 外掛程式 8.2.0 安裝工作會失敗
在使用動態功能的專案中,Android Gradle 外掛程式 8.2.0 安裝工作會失敗
Dexer (D8)
[脫糖程式庫] 脫糖程式庫 2.1 版本與舊版 R8 不相容
是否只在 D8 中執行最佳化?
Lint
[Lint] TranslucentViewDetector 在 filterIncident 函式中異常終止,導致 Lint 產生錯誤結果
TranslucentViewDetector 應接受「後面」的值
Android Lint 在 KMP 程式庫中執行失敗,並顯示「property 'variantInputs.name' doesn't have a configured value.」。
TranslucentViewDetector 回報錯誤的資訊清單程式碼行
使用專案依附元件時,lintDebug 會誤報 UseTomlInstead 警告
其他由 Android Lint 標記的專案發生非預期的問題
Lint 檢查在繫結和點擊事件監聽器內的未使用資源時出現偽陽性偵測結果
無法載入自訂 Lint 檢查 jar 檔案:Node 無法轉換層級到 TreeNode
使用變數宣告中的註解類別時未呼叫 Lint VisitAnnotationUsage
Lint 31.0.2 執行失敗,並顯示「java.util.NoSuchElementException: Array is empty.」
未顯示關於 kotlin.text.MatchNamedGroupCollection#get(String) 需要 API 級別 26 的 Lint 警告
lint:Typographyquotes 偽陰性:忽略多個逸出的單引號
AGP 8.0.2 Lint InvalidId 偵測工具出現偽陽性
已新增至 Lint 基準的 LintError 問題
Quickfix Lint 無法運作,且會導致 IDE 錯誤
部分分析導致不一致的測試失敗
無法醒目顯示偽陽性的警告
使用變數宣告中的註解類別時未呼叫 Lint VisitAnnotationUsage
未使用的資源處理器可能會刪除 Gradle 建構檔案
NewApi Lint 檢查無法解讀「isAtleastU() && otherCondition()」最終欄位
來自「LintClient.getSdkHome」的 StackOverflow
Android Studio/Lint 不會在「platform」依附元件過舊時傳送通知
錯誤:未建議更新 Firebase-bom 依附元件
專案架構 (和 Gradle (?)) 無法找出要升級至較新版本的 Firebase BOM 依附元件。
Lint 整合
testImplementation 依附元件中的 DuplicatePlatformClasses lint 錯誤
縮減器 (R8)
從 AGP 8.0.2 升級至 8.1.0 之後 R8 無法運作
isShrinkResources 在 8.3.0-alpha11 到 alpha14 版本間有過度最佳化情形
R8 Flurry SDK 在使用 AGP 8.2.0 時當機
Android - R8 導致 LinearLayoutManager 的子類別當機
R8 第 8.2.33 版,升級後發生「java.lang.VerifyError: Bad type on operand stack」執行階段當機問題
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
[R8 8.3.21] R8 8.3.21 比 R8 8.1.56 大 1.57MB
class.getInterfaces() 傳回空白
在 kotlin_dev 機器人上測試 SimpleKotlinEnumUnboxingTest 失敗

Android Gradle 外掛程式 8.3.1 版

已修正問題
Android Gradle 外掛程式
MergeJavaResourcesTask 增量輸入處理問題
Lint 整合
Lint 無法在 AGP 8.3.0-rc02 中解析相依來源集的類型

Android Gradle 外掛程式 8.3.2 版

已修正問題
Android Gradle 外掛程式
啟用脫糖功能的 AGP 8.3 可能會發生死結
AGP 8.3 會破壞 zipApksFor 工作
Lint 整合
Lint 無法解析 KMP 依附元件