1. ホーム
  2. android

[解決済み] Android Gradle Plugin 7.1へのアップグレード後、AndroidComponentsExtensionクラスがロードされない

2022-09-13 12:25:20

質問

最近ダウンロードした Android Studio Bumblebee をダウンロードしたところ、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 にアップグレードすればよいのでしょうか。

どのように解決するのですか。

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

これらの行は、見るべき重要なものです。

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)

これは、エラーの発生元が Navigation Safe Args プラグイン .

のように Android Gradle Plugin 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 が利用可能になったので、そのバージョンのナビゲーションにアップグレードすると、この修正が適用されます。

バックポート元 ナビゲーション 2.5.0-alpha01 : Safe Args は、Android Gradle Plugin バージョン 7.0.4 に依存するようになりました。これは、Navigation Safe 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"
}

Navigation ライブラリーは常に Safe Args プラグインと同じバージョンを使用する必要があることに注意してください (つまり、アプリは 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 Plugin 1.4.1 のリリースノートです。 :

非推奨のAndroid GradleプラグインAPIから移行しました。

そのため、1.4.1 にアップグレードする必要があります。

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