Android Gradle Plugin 7.1 にアップグレードした後、クラス AndroidComponentsExtension をロードできません 質問する

Android Gradle Plugin 7.1 にアップグレードした後、クラス AndroidComponentsExtension をロードできません 質問する

最近ダウンロードしたAndroid Studio バンブルビーそして、Android Studio Bumblebee と一緒に出荷されたバージョンである Android Gradle Plugin 7.1.0 にアップグレードするかどうかを親切に尋ねられました。

アップグレード後、ビルド エラーが発生します。

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 Plugin 7.1.0 にアップグレードするにはどうすればよいですか?

ベストアンサー1

ナビゲーションセーフ引数の更新

注目すべき重要な行は次のとおりです。

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)

これはエラーがナビゲーションセーフ引数プラグイン

によるとAndroid Gradle プラグイン 7.1.0 リリースノート:

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でも動作します。その間、回避策として、Navigation Safe Args、Navigation 2.5.0-SNAPSHOTのスナップショットビルドでAGP 7.1を使用することができます。スナップショットビルドを使用するには、スナップショットの手順ビルド ID #8054565。

としてナビゲーション 2.4.1が利用可能になりました。Navigation のそのバージョンにアップグレードして修正を入手できます。

バックポート元ナビゲーション2.5.0-alpha01: Safe Args は Android Gradle プラグイン バージョン 7.0.4 に依存するようになりました。つまり、Navigation Safe Args は Android Studio バージョン 7.0 より前とは互換性がなくなりますが、Android Gradle プラグイン 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"
}

Safe Args プラグインと同じバージョンの Navigation ライブラリを常に使用する必要があることに注意してください (つまり、アプリでも Navigation 2.4.1 を使用する必要があります)。Navigation 2.4.1+ Safe Args プラグインを以前のバージョンの Navigation (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"

おすすめ記事