AndroidStudioのバージョンアップ時に発生するビルドエラーと向き合う

# 経緯
AndroidStudioのバージョンを**Jellyfish**から**Ladybug**にアップデートすると既存のFlutterアプリがビルドできなくなるという噂を目にしたので次のバージョンが出るまで待機していました
次バージョンである**Meerkat**がついにリリースされたので嬉々としてアップデートしてみたら噂のビルドエラーが発生したので仕方なく対処法を探ってみたという記録になります

# エラー その１　-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バージョンに変更してあげるだけです

https://docs.gradle.org/current/userguide/compatibility.html#java

ここでJDKごとのバージョン対応表が確認できます
JDK21の場合は**Gradle8.5**とのことなので、それに合わせてコードを変更します

``` :gradle-wrapper.properties
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-all.zip
```
ついでに*com.android.application*のバージョンも古いままだったのでこちらも更新しておきます
``` gradle:settings.gradle
plugins {
    ...
    id "com.android.application" version "8.3.2" apply false
    ...
}
```
これで再度ビルドすれば最初のエラーは解消されているはずです

# エラー その２　-Namespace not specified-
最初のエラーは消えましたが次のエラーが発生しています
```
Namespace not specified. Specify a namespace in the module’s build file.
```
実際にはもう少し長いですが重要なのはこの1行です
Namespaceが見つからないみたいですが、そもそもNamespaceを設定していなかったのでそこから試してみました
``` gradle:app/build.gradle
android {
   ...
   namespace 'app.name' //AndroidManifestなどに書かれているpackageidをそのまま記述
   ...
}
```
これでいけるかと思ってビルドしましたがまだ同じエラーが出力されます
調べてみたところ、Namespaceが認識できないライブラリがあるとのこと
それらに認識してもらうために、追加で以下のように記述しました
``` gradle:android/build.gradle
subprojects {
    afterEvaluate { project ->
        if (project.hasProperty('android')) {
            project.android {
                if (namespace == null) {
                    namespace project.group
                }
            }
        }
    }
}

```
この部分の調査はこのサイトが参考になりました

https://minpro.net/namespace-not-specified

これでNamespace関連のエラーは無くなりました

# エラー その３　-Execution failed for task ':app:mapStgDebugSourceSetPaths'-
まだまだビルドはできません
次のエラーが湧いてきました
```
Execution failed for task ':app:mapStgDebugSourceSetPaths'.
```
このエラーも実際にはもう少し長いですが、検索の際にこの部分が重要だったのでこの1行のみ抜粋します
正直何が問題なのか全くわかりませんでしたが、検索したらちゃんと対策が示されていました
``` gradle:settings.gradle
plugins {
    ...
    id "com.google.gms.google-services" version "4.3.14" apply false
    ...
}
```
``` gradle:app/build.gradle
dependencies {
    ...
    classpath 'com.android.tools.build:gradle:7.3.0'
    ...
}
``` 
以下のサイトで紹介されていた変更をそのまま実装しました

https://stackoverflow.com/questions/72224454/execution-failed-for-task-appmapdebugsourcesetpaths-error-while-evaluatin

*com.android.tools.build*を複数箇所で指定している場合は、すべての場所を**7.3.0**に統一します
これでエラーが解消されました

# ようやく・・・
**ビルドが通りました！！**
変更箇所自体は少ないですが、エラーに追撃されまくったせいで体感とても長い戦いに感じました
すでに色々な資料が出回っていたことですぐに解決できました
Ladybugの時点でこの問題と向き合っていた皆さんには頭が上がりません
今後、同じ問題に直面する人は少ないと思いますが、この記事がその人の助けになればと思います