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 更新。發布模組可能是CMake
或ndk-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)
- 整個應用程式內必須有一個 STL。舉例來說,消耗模組和發布模組都可以使用 C++ 共用的 STL。
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。在 singleVariant
或 multipleVariants
發布區塊內新增 withJavadocJar()
即可啟用此功能。詳情請參閱發布選項程式碼範例。
發布來源 JAR
您可以利用 AGP 7.1.0 以上版本,發布 Java 與 Kotlin 來源 JAR 檔案,以及程式庫專案 AAR。POM 與 Gradle 模組中繼資料檔案內已新增這些來源。您只須在 singleVariant
或 multipleVariants
發布區塊內新增 withSourcesJar()
即可啟用此功能。詳情請參閱發布選項程式碼範例。
Lint 區塊語意變更
用於覆寫特定問題嚴重性等級 (enable
、disable
/ignore
、informational
、warning
、error
、fatal
) 的 Lint 方法,現在都會遵守設定順序。舉例來說,在 finalizeDsl()
中將問題設為嚴重錯誤,現在會在主要 DSL 中覆寫問題的「disable」等級。詳情請參閱 lint{}
區塊參考文件與「Android 建構流程和擴充點」。
Navigation Safe Args 相容性
我們已移除 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。