Android Studioで突然ビルドエラーが起きた際の対処法
皆さん、こんにちは!又はこんばんは!初めての方は初めまして!
Androidアプリに関する記事を書いている「りおん」です。
今回は、Android Studioで突然ビルドエラーが起きた際の対処法に関する記事です。具体的には、今までビルドエラーも起きず実行できていたアプリが突然実行どころかビルドエラーが起きた際の対処法となります。
私の経験も踏まえての記事となっていますので同じエラーが起きた時に参考になると嬉しいです。
結果だけが知りたい場合はエラー解決の試行その2を参照してください。
今回の環境はAndroid Studio Ladybug | 2024.2.1 Patch 2です。また、Windowsの画面となります。
経験論となりますが、バージョンGiraffeを以前使っていたのですが、その時はこのエラーに遭遇しませんでした。単に運が良かっただけなのかもしれません。
本記事を作成するにあたって、以下のサイトを参考にしました。
なるべく丁寧に説明していますが最終的な解決法は下のサイトと同様となっています。
エラーコード
エラーコードと画像は以下の通りとなります。
.gradle\caches\とmetadata.bin(指定されたファイルが見つかりません。)という部分が一致していれば同じエラーです。
C:\Users\UserName\.gradle\caches\8.9\transforms\98092df30d823e226ea68b5146d779a6\metadata.bin (指定されたファイルが見つかりません。)
エラーの解説
このエラーはエラーコードに書いている通り、metadata.binというファイルが無いことによるものです。
実際に確認したところ1つ下の画像のようにフォルダーが空になっています。通常は2つ下の画像のようにファイルが含まれています。
そもそもGradleのcachとは?
ここで、このエラーの起きている場所に関する解説を行います。
そもそもGradleとは何か?という問題です。
ひとことで言うとGradleとは、JavaやKotlinなどのプログラミング言語でのプロジェクトのビルド、依存関係管理、テスト、デプロイメントなどを自動化するためのオープンソースのビルドツールです。
一番実感しやすい恩恵は依存関係の管理です。
アプリ開発をしたことのある方なら、build.gradle.ktsというファイルに依存関係を書いたことがあると思います。これを書いただけで私たちがそのライブラリを使えるのは、Gradleというビルドツールが自動でインストールしてくれているおかげなのです。
//依存関係の例
implementation("androidx.navigation:navigation-compose:$nav_version")
次にGradleのcashの解説です。
キャッシュの意味は以下の通りです。
つまり、GradleのキャッシュとはGradleのビルドや依存関係などの情報を一時保存することで後続のビルドを高速化させる仕組みです。
これも体感しやすいところで言いますと、アプリを実行する時に初回以降はすぐに実行できるのはキャッシュがあるからです。
エラー解消の試行その1(失敗)
上のようにキャッシュに原因があるなら、キャッシュを破棄すれば解決すると考え、File -> Invalidate Cashes -> Invalidate and Restartでキャッシュを排除し再度生成することを考えました。オプションはすべて選択します。
(余談ですが、Invalidateとは無効化という意味で破棄では無くない?と私同様に疑問に思った方もいると思います。どうやら、キャッシュは無効化されると全てのキャッシュファイルを破棄して、次回これらのプロジェクトを開いたときに、ファイルが再作成されるようです)
結果として、この方法の後も同じエラーが表示され解決できませんでした。
原因として、この方法だとGradleのキャッシュを排除できていないからだと考えます。その根拠は以下の通りです。
1月10日にInvalidate and Restartを押したため、キャッシュが排除され再生成されるならキャッシュファイルの更新日時が1/10になるはずです。しかし、実際のところ12/27となっておりInvalidate and Restartする前と変わりませんでした。
エラー解決の試行その2(成功)
上の方法でキャッシュが排除できなかった為、次は直接排除するという手段を取りました。方法としては、Android Studioを閉じ、エクスプローラーからgradleのcashesフォルダ-を右クリック->排除というシンプルなものです。
結果としてエラーは解消されました。
また、cashesフォルダーの更新日時も1/10となり正常に機能したことも分かります。
さいごに
何もしていないのに突然エラーが起きた時ほど慌てる時は無いと思います。
しかし、そういう時に限って、エラー文を読むと思ったほど重大なことが起きていないことが多いです。エラーが出たから後回しにする前にエラーコードで検索しエラーと一度冷静に向き合ってみてください!
この記事がそういう人の一助となることを願っています。