Android Gradle 外掛程式 7.1.0 (2022 年 1 月)

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

7.1.3 (2022 年 4 月)

這項次要更新修正了下列錯誤:

  • R8 回報的類別重複問題

如要查看此版本的完整修正錯誤清單,請參閱 Android Studio Bumblebee 修補程式 3 網誌文章

7.1.2 (2022 年 2 月)

這項次要更新修正了下列錯誤:

  • Android Gradle 外掛程式 7.1.0-rc01 在單元測試期間 無法執行 ASM 位元碼轉換作業
  • Gradle 同步處理失敗,並顯示 「無法載入類別 'com.android.build.api.extension.AndroidComponentsExtension'」
  • 無法在 Android Gradle 外掛程式 7.0.0 中 透過 Groovy DSL 使用部分新的 DSL 區塊
  • AGP 7.1 新發布的 API:已建立的 javadoc jar 未成功簽署
  • ClassesDataSourceCache 應該可以使用最新 Asm 版本了
  • Android Studio BumbleBee 不一定能夠部署最新變更項目

此版本的 完整修正錯誤清單 請參閱 Android Studio Bumblebee 修補程式 2 網誌文章

7.1.1 (2022 年 2 月)

本次要更新 配合 Android Studio Bumblebee 修補程式 1 版本。

此版本的 修正錯誤清單 請參閱 Android Studio Bumblebee 修補程式 1 網誌文章

相容性

最低版本 預設版本 附註
Gradle 7.2 7.2 詳情請參閱「更新 Gradle」一節。
SDK 版本工具 30.0.3 30.0.3 安裝設定 SDK 版本工具。
NDK 不適用 21.4.7075529 安裝設定 NDK 其他版本。
JDK 11 11 詳情請參閱「設定 JDK 版本」相關說明。

Lint 分析工作現已可供快取

AndroidLintAnalysisTask 現在可以與 Gradle 建構快取相容。如果您是透過在 gradle.properties 檔案中設定 org.gradle.caching=true 的方式啟用建構快取,Lint 分析工作就會盡可能從這類快取中取得輸出內容。

透過 Android Gradle 外掛程式執行 Lint 時,最大的瓶頸通常在於 Lint 分析工作,因此在多數情況下,啟用建構快取可提升執行 Lint 時的建構速度。舉例來說,如果您的專案含有多個模組,而且您在持續整合伺服器執行 Lint 前清除版本目錄,應該會發現效能大幅提升。

C/C++ 模組現在可以參照相同專案內的其他 C/C++ 模組

您現在可以設定使用 C/C++ 程式碼的 Gradle Android 模組,以便參照其他 Gradle 模組中的標頭檔案和程式庫程式碼。不同 Gradle 模組之間的標頭和程式庫需使用 Prefab 通訊協定。

需求條件

  • 「消耗」模組必須為 CMake,而非 ndk-build。ndk-build 支援功能須使用日後推出的 NDK 更新。發布模組可能是 CMakendk-build

  • 「消耗」模組必須在 build.gradle 檔案中啟用 prefab

android {
  buildFeatures {
    prefab true
  }
}
  • 發布模組必須在 build.gradle 檔案中啟用 prefabPublishing
android {
  buildFeatures {
    prefabPublishing true
  }
}
  • 「消耗」模組必須在 build.gradle 檔案的 dependencies 區塊中加入一行,藉此參照「發布」模組。例如:
dependencies {
  implementation project(':mylibrary')
}
  • 「發布」模組必須使用 prefab 區段公開顯示封裝。例如:
android {
  prefab {
    mylibrary {
      libraryName "libmylibrary"
      headers "src/main/cpp/include"
    }
  }
}
  • 消耗模組的 CMakeLists.txt 檔案可能會使用 find_package() 尋找由生產模組發布的封裝。例如:
find_package(mylibrary REQUIRED CONFIG)
target_link_libraries(
  myapplication
  mylibrary::mylibrary)
   android {
      defaultConfig {
        externalNativeBuild {
          cmake {
            arguments '-DANDROID_STL=c++_shared'
          }
        }
      }
    }

如需進一步瞭解如何用 AGP 設定原生 AAR 消耗與生產模組,請參閱「具有 AGP 的原生依附元件」。

settings.gradle 檔案內的存放區設定

透過 Android Studio Bumblebee 建立新專案後,頂層 build.gradle 檔案會包含 plugins 區塊,後方則是用於清理版本目錄的程式碼:

plugins {
    id 'com.android.application' version '7.1.0-beta02' apply false
    id 'com.android.library' version '7.1.0-beta02' apply false
    id 'org.jetbrains.kotlin.android' version '1.5.30' apply false
}
task clean(type: Delete) {
  delete rootProject.buildDir
}

之前在頂層 build.gradle 檔案內的存放區設定現在已移到 settings.gradle 檔案內:

pluginManagement {
  repositories {
    gradlePluginPortal()
    google()
    mavenCentral()
  }
}
dependencyResolutionManagement {
  repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
  repositories {
    google()
    mavenCentral()
  }
}
rootProject.name = 'GradleManagedDeviceTestingNew'
include ':app'

模組層級 build.gradle 檔案並未變更。因此,請使用頂層 build.gradle 檔案和 settings.gradle 檔案,定義適用於專案中所有模組的建構設定,或是適用於 Gradle 本身的存放區和依附元件;使用模組層級 build.gradle 檔案,定義專案中特定模組的建構設定。

改善資源縮減器

Android Studio Bumblebee 內含改良過的資源縮減器,有助於縮減應用程式大小。

支援具有動態功能的應用程式

在 Android Gradle 外掛程式 7.1.0-alpha09 版中,我們更新了 Android 資源縮減器的預設實作方式。這項新實作方式可縮減具有動態功能的應用程式。

進一步縮減應用程式大小功能實驗

新的資源縮減器實作方式可修改資源表格,藉此移除未使用的值資源和未使用的檔案資源參照,進一步精簡縮減過的應用程式。新的資源縮減器則可完全刪除未使用的檔案資源,進一步縮減應用程式大小。目前系統尚未預設啟用此行為,但您可以在專案的 gradle.properties 檔案中新增實驗選項 android.experimental.enableNewResourceShrinker.preciseShrinking=true,自行選擇啟用並試用該功能。

如果發現新的資源縮減器或實驗旗標有任何問題,請不吝回報。在專案的 gradle.properties 中加入 android.enableNewResourceShrinker=false,即可改回先前的實作方式,協助診斷問題或做為暫時性解決方案。新的縮減器會將未使用的檔案型資源替換為最小化的檔案,這類檔案與舊版資源縮減器提供的檔案有些微差異,但應該不會對執行階段造成任何影響。

舊的實作方式預計會在 Android Gradle 外掛程式 8.0.0 中移除。

建構變化版本發布功能

Android Gradle 外掛程式 7.1.0 以上版本可讓您設定要將哪個建構變化版本發布至 Apache Maven 存放區。AGP 會根據新的發布 DSL 設定,建立具有單一或多個建構變化版本的元件,您可以用此元件自訂要發布至 Maven 存放區的內容。與先前的版本相較,由於系統不會根據預設建立任何元件,因此也能避免執行不必要的作業。詳情請參閱發布程式碼範例

發布 Javadoc JAR

您可以利用 AGP 7.1.0 以上版本,透過 Java 與 Kotlin 來源產生 Javadoc,並發布 Javadoc JAR 檔案和程式庫專案 AAR。POM 與 Gradle 模組中繼資料檔案內已新增此 Javadoc。在 singleVariantmultipleVariants 發布區塊內新增 withJavadocJar() 即可啟用此功能。詳情請參閱發布選項程式碼範例

發布來源 JAR

您可以利用 AGP 7.1.0 以上版本,發布 Java 與 Kotlin 來源 JAR 檔案,以及程式庫專案 AAR。POM 與 Gradle 模組中繼資料檔案內已新增這些來源。您只須在 singleVariantmultipleVariants 發布區塊內新增 withSourcesJar() 即可啟用此功能。詳情請參閱發布選項程式碼範例

Lint 區塊語意變更

用於覆寫特定問題嚴重性等級 (enabledisable/ignoreinformationalwarningerrorfatal) 的 Lint 方法,現在都會遵守設定順序。舉例來說,在 finalizeDsl() 中將問題設為嚴重錯誤,現在會在主要 DSL 中覆寫問題的「disable」等級。詳情請參閱 lint{} 區塊參考文件與「Android 建構流程和擴充點」。

我們已移除 Navigation Safe Args Gradle 外掛程式所依附的 AGP API。AGP 7.1 無法搭配 Navigation Safe Args 2.4.0-rc1 及 2.4.0 等版本使用,但是可以搭配 2.5.0-alpha01 及 2.4.1 等版本。目前如要解決此問題,您可以使用 AGP 7.1 搭配 Navigation Safe Args 的快照版本:Navigation 2.5.0-SNAPSHOT。如要使用快照版本,請參考快照操作說明,並將該頁面上程式碼中的 [buildId] 替換成版本 ID #8054565。

另外,Navigation Safe Args 2.4.1 和 2.5.0 版本將無法再與 AGP 4.2 搭配使用,如需使用這些 Safe Args 版本,您必須使用 AGP 7.0 以上版本。

停用自動元件建立功能

從 AGP 8.0 開始,系統預設會停用自動元件建立功能。目前,AGP 7.1 會自動為每個建構變化版本建立元件,這些元件的名稱與建構變化版本相同,且內含所有建構變化版本的 all 元件。之後,我們會停用這項自動元件建立功能。如果要改用新行為,您應該將 android.disableAutomaticComponentCreation 設為 true.,以便手動停用自動元件建立功能。詳情請參閱「使用 Maven 發布外掛程式」。

Firebase Performance Monitoring 相容性

AGP 7.1 與 Firebase Performance Monitoring Gradle 外掛程式 1.4.0 以下版本不相容。AGP Upgrade Assistant 不會自動將外掛程式更新至 1.4.1 版本,因此,如果您使用 firebase-perf 並想升級至 AGP 7.1 版,則需手動進行這項升級作業。

已知問題

本節說明 Android Gradle 外掛程式 7.1.0 的已知問題。

應用程式專案使用 Hilt 外掛程式造成的單元測試問題

單元測試類別路徑內含未檢測的應用程式類別,表示 Hilt 並未檢測應用程式類別,無法在執行單元測試時處理依附元件插入內容。

此問題會在 7.1.1 版本中修正,詳情請參閱問題 #213534628