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
SDK 版本工具 30.0.3 30.0.3
NDK 21.4.7075529
JDK 11 11

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() 中將問題設為「fatal」,現在會在主要 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 Publish 外掛程式」。

Firebase Performance Monitoring 相容性

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

已知問題

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

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

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

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