経緯
AndroidStudioのバージョンをJellyfishからLadybugにアップデートすると既存のFlutterアプリがビルドできなくなるという噂を目にしたので次のバージョンが出るまで待機していました
次バージョンであるMeerkatがついにリリースされたので嬉々としてアップデートしてみたら噂のビルドエラーが発生したので仕方なく対処法を探ってみたという記録になります
エラー その1 -Flutter Fix-
とりあえずそのままビルドしようとしてみた時に発生したエラー
詳細は以下の通り
┌─ Flutter Fix ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ [!] Your project's Gradle version is incompatible with the Java version that Flutter is using for Gradle. │
│ │
│ If you recently upgraded Android Studio, consult the migration guide at https://flutter.dev/to/to/java-gradle-incompatibility. │
│ │
│ Otherwise, to fix this issue, first, check the Java version used by Flutter by running `flutter doctor --verbose`. │
│ │
│ Then, update the Gradle version specified in /Users/***/***/android/gradle/wrapper/gradle-wrapper.properties to be compatible with that │
│ Java version. See the link below for more information on compatible Java/Gradle versions: │
│ https://docs.gradle.org/current/userguide/compatibility.html#java │
│ │
│ │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Gradleのバージョンに互換性がないみたいなことが書かれています
というのも、AndroidStudioのバージョンアップ時にOpenJDKのバージョンが21に変更されていたみたいで、今まで17で開発していたアプリだとGradleのバージョンが古い可能性があるためこのエラーが発生しがちなようです
対処法は簡単で、今のJDKバージョンに合わせたGradleバージョンに変更してあげるだけです
ここでJDKごとのバージョン対応表が確認できます
JDK21の場合はGradle8.5とのことなので、それに合わせてコードを変更します
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
ついでにcom.android.applicationのバージョンも古いままだったのでこちらも更新しておきます
plugins {
...
id "com.android.application" version "8.3.2" apply false
...
}
これで再度ビルドすれば最初のエラーは解消されているはずです
エラー その2 -Namespace not specified-
最初のエラーは消えましたが次のエラーが発生しています
Namespace not specified. Specify a namespace in the module’s build file.
実際にはもう少し長いですが重要なのはこの1行です
Namespaceが見つからないみたいですが、そもそもNamespaceを設定していなかったのでそこから試してみました
android {
...
namespace 'app.name' //AndroidManifestなどに書かれているpackageidをそのまま記述
...
}
これでいけるかと思ってビルドしましたがまだ同じエラーが出力されます
調べてみたところ、Namespaceが認識できないライブラリがあるとのこと
それらに認識してもらうために、追加で以下のように記述しました
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
}
この部分の調査はこのサイトが参考になりました
これでNamespace関連のエラーは無くなりました
エラー その3 -Execution failed for task ':app:mapStgDebugSourceSetPaths'-
まだまだビルドはできません
次のエラーが湧いてきました
Execution failed for task ':app:mapStgDebugSourceSetPaths'.
このエラーも実際にはもう少し長いですが、検索の際にこの部分が重要だったのでこの1行のみ抜粋します
正直何が問題なのか全くわかりませんでしたが、検索したらちゃんと対策が示されていました
plugins {
...
id "com.google.gms.google-services" version "4.3.14" apply false
...
}
dependencies {
...
classpath 'com.android.tools.build:gradle:7.3.0'
...
}
以下のサイトで紹介されていた変更をそのまま実装しました
com.android.tools.buildを複数箇所で指定している場合は、すべての場所を7.3.0に統一します
これでエラーが解消されました
ようやく・・・
ビルドが通りました!!
変更箇所自体は少ないですが、エラーに追撃されまくったせいで体感とても長い戦いに感じました
すでに色々な資料が出回っていたことですぐに解決できました
Ladybugの時点でこの問題と向き合っていた皆さんには頭が上がりません
今後、同じ問題に直面する人は少ないと思いますが、この記事がその人の助けになればと思います