升级 Android Gradle Plugin 7.1后无法加载类 Android 组件扩展

我最近下载了 安卓工作室大黄蜂,它很有帮助地询问我是否想要升级到 Android Gradle Plugin 7.1.0,这个版本与 Android Studio Bumblebee 一起发布。

升级之后,我得到一个构建错误:

Unable to load class 'com.android.build.api.extension.AndroidComponentsExtension'.


This is an unexpected error. Please file a bug containing the idea.log file.

看看 idea.log文件,我明白了:

A problem occurred evaluating project ':main'.
at org.gradle.initialization.exception.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:103)
...
Caused by: org.gradle.api.GradleScriptException: A problem occurred evaluating project ':main'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
...
Caused by: java.lang.NoClassDefFoundError: com/android/build/api/extension/AndroidComponentsExtension
at androidx.navigation.safeargs.gradle.SafeArgsPlugin.apply(SafeArgsPlugin.kt:73)
at androidx.navigation.safeargs.gradle.SafeArgsPlugin.apply(SafeArgsPlugin.kt:42)
...
Caused by: java.lang.ClassNotFoundException: com.android.build.api.extension.AndroidComponentsExtension

这意味着我不能运行我的应用程序,我需要降低 AGP 7.0的等级,以使事情重新运行。我该如何修复这个问题并升级到 Android Gradle Plugin7.1.0?

24712 次浏览

更新导航安全 Args

这些线条是值得注意的重要线条:

Caused by: java.lang.NoClassDefFoundError: com/android/build/api/extension/AndroidComponentsExtension
at androidx.navigation.safeargs.gradle.SafeArgsPlugin.apply(SafeArgsPlugin.kt:73)
at androidx.navigation.safeargs.gradle.SafeArgsPlugin.apply(SafeArgsPlugin.kt:42)

这表明错误来自 导航安全 Args 插件

根据 Android Gradle Plugin 7.1.0发布说明:

导航安全 Args Gragle 插件所依赖的 AGP API 已被删除。AGP 7.1不适用于导航安全 Args 版本2.4.0-rc1或2.4.0,但将与版本2.5.0-alpha01和2.4.1一起使用。同时,作为解决方案,您可以使用 AGP 7.1和导航安全 Args 的快照构建,导航2.5.0-SNAPSHOT。要使用快照构建,请遵循构建 id # 8054565的 快照说明

由于 导航2.4.1现在已经可用,您可以升级到该版本的导航来获得修复:

导航 2.5.0-alpha01返回: 安全的 Args 现在取决于 Android Gradle 插件版本7.0.4。这意味着导航安全 Args 将不再兼容7.0之前的 Android Studio 版本,而是现在兼容 Android Gradle Plugin 7.1.0及更高版本。

dependencies {
classpath 'com.android.tools.build:gradle:7.1.0'


// Update this line to use 2.4.1
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.1"
}

请注意,您应该始终使用相同版本的导航库作为安全的 Args 插件(即,您的应用程序也应该使用导航2.4.1) : 您不应该尝试使用导航2.4.1 + 安全的 Args 插件与早期版本的导航(如2.3.5)。

关于 Firebase Perf 插件的注意事项

请注意,在使用以下命令时,您可能会看到同样的错误:

classpath "com.google.firebase:perf-plugin:1.4.0"

idea.log上面写着:

Caused by: java.lang.NoClassDefFoundError: com/android/build/api/extension/AndroidComponentsExtension
at com.google.firebase.perf.plugin.FirebasePerfClassVisitorFactory.registerForProject(FirebasePerfClassVisitorFactory.java:54)
at com.google.firebase.perf.plugin.FirebasePerfPlugin.perform(FirebasePerfPlugin.java:145)
at com.google.firebase.perf.plugin.FirebasePerfPlugin.lambda$apply$0(FirebasePerfPlugin.java:107)

根据 Firebase Perf 插件1.4.1发布说明:

从已经废弃的 Android Gradle 插件 API 中迁移出来。

所以你应该升级到1.4.1:

classpath "com.google.firebase:perf-plugin:1.4.1"

你能做到的,完美地为我工作

// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '7.1.0' apply false
id 'com.android.library' version '7.1.0' apply false
id 'org.jetbrains.kotlin.android' version '1.6.10' apply false
id "com.google.dagger.hilt.android" version '2.41' apply false
id 'androidx.navigation.safeargs.kotlin' version '2.4.0' apply false // use this one
//    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.4.0" (will not work now)


}


task clean(type: Delete) {
delete rootProject.buildDir
}
I fixed the issue by downgrading the version of navigation to 2.3.5


def nav_version = "2.3.5"

测试后,使用导航2.4.0和 AGP7.0.4工作正常

在我的情况下,问题是与 刀柄版本。我已经更新到最后的 2.40.5和它的工作。

如果在项目中没有 刀柄依赖项,那么查找在分级同步期间抛出异常的库的最佳方法是检查 点子,日志文件。

android studio hint

找到那样的东西。

Caused by: java.lang.NoClassDefFoundError: com/android/build/api/extension/AndroidComponentsExtension
at dagger.hilt.android.plugin.HiltGradlePlugin.configureBytecodeTransformASM(HiltGradlePlugin.kt:257)

有一个良好的编码:)

更新: 这个问题在 AGP7.1.2中已经修复。


  • Firebaseperf 插件1.4.1将只与 AGP7.1工作,如果您的项目不依赖于任何库,使用多发行版 JAR,即 MRJAR
  • 使用 MRJAR 的一个流行的依赖项是 你好
  • 问题的根源在于 Android Gradle 插件
  • Firebase Perf 团队制作了以下 声明:

以下是一些更新:

  1. AGP v7.2.0-beta01是上周提供的,将与最新的性能插件 v1.4.1一起工作。
  2. AGP v7.2 RC1定于3月1日发布,AGP v7.2决赛定于3月9日举行。

与此同时,下面是一些值得尝试的变通方法:

  1. 使用带 AGP v6.8.3的 perf 插件 v1.3.5。Perf 插件 v1.3.5及以下版本与 AGP v7.0.0+不兼容; 为了使 Perf 插件与 AGP v7.0.0+兼容,我们必须使用新的转换 API,它引入了构建失败,即使 Perf 插件从插件中过滤掉 META-INF/目录中的类,AGP 仍然试图访问该类以收集关于它的信息。然而,AGP 正在为此开发一个更为永久的修复方案,我们将有一个选项来完全过滤出失败的类。
  2. 等到3月9日集成最新的 perf 插件版本和 AGP。
  3. 尝试使用最新的 perf 插件版本的 AGP 的 beta 版本,并在3月9日之后转向生产版本。
  • 堆栈跟踪:
org.gradle.api.GradleScriptException: A problem occurred evaluating project ':app'.
at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:93)
at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.lambda$apply$0(DefaultScriptPluginFactory.java:133)
at ...
Caused by: java.lang.NoClassDefFoundError: com/android/build/api/extension/AndroidComponentsExtension
at com.google.firebase.perf.plugin.FirebasePerfClassVisitorFactory.registerForProject(FirebasePerfClassVisitorFactory.java:54)
at com.google.firebase.perf.plugin.FirebasePerfPlugin.perform(FirebasePerfPlugin.java:145)
at com.google.firebase.perf.plugin.FirebasePerfPlugin.lambda$apply$0(FirebasePerfPlugin.java:107)
at org.gradle.api.internal.plugins.DefaultPluginManager$2.execute(DefaultPluginManager.java:258)
at ...

将 Hilt 更新为“2.40.5”和 firebase: perf-plugin 更新为“1.4.1”对我来说很有用。

在我的情况下,我不得不更新地图插件. 。

Updated Maps Plugin

在我的情况下,我面临的问题秘密-级别-插件。最初我使用的是2.0.1版本(最新版本)。在我降级到1.3.0之后。这招对我很管用。

在 project 的 root build.gradle 文件中:

dependencies {
classpath 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:1.3.0'
}

在 app 级 build.gradle 文件中:

plugins {
id 'com.android.application'
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
}

升级您的导航安全措施版本,以最新的,一切都会好起来。这招对我很管用。这里是[链接](https://developer.android.com/jetpack/androidx/releases/navigation“导航安全搜索谷歌文档”) !得到最新版本的保险箱。