PC パソコン

Android Studio「Cannot resolve symbol ‘R’」の原因と解決方法

Android StudioでJavaやKotlinのコードを記述していると、「Cannot resolve symbol ‘R’」というエラーが表示されることがあります。

このエラーは、Androidプロジェクトで自動生成されるRクラスをAndroid Studioが正しく認識できない場合に発生します。

Rクラスには、レイアウト、文字列、画像、色、IDなど、resフォルダ内のリソースへアクセスするための情報がまとめられています。

そのため、「Cannot resolve symbol ‘R’」が発生した場合は、JavaやKotlinのコードだけではなく、XMLファイル、リソース名、import、namespace、Gradle設定、ビルドエラーなども確認する必要があります。

この記事では、Android Studioで「Cannot resolve symbol ‘R’」が表示される主な原因と、基本的な解決方法を紹介します。

「Cannot resolve symbol ‘R’」とは

Androidアプリでは、resフォルダ内に配置したリソースをコードから参照するためにRクラスが使用されます。

例えば、レイアウトを指定する場合は次のように記述します。

setContentView(R.layout.activity_main);

また、ViewのIDを参照する場合は次のように記述します。

Button button = findViewById(R.id.button);

Android StudioがこのRを認識できない場合、次のようなエラーが表示されることがあります。

Cannot resolve symbol 'R'

Rクラスは通常、Androidプロジェクト内のリソース情報をもとにビルド時に自動生成されます。

そのため、リソースのコンパイルやプロジェクトのビルドに問題があると、Rクラスが正常に生成されなかったり、Android Studioが正しく認識できなかったりすることがあります。

原因1:XMLファイルに構文エラーがある

「Cannot resolve symbol ‘R’」の代表的な原因の一つが、resフォルダ内にあるXMLファイルの構文エラーです。

例えば、レイアウトXMLのタグを閉じ忘れている場合があります。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello"

このようにXMLの構文が正しくないと、Androidのリソース処理が失敗し、Rクラスの生成に影響することがあります。

タグを正しく閉じます。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Hello" />

エラーが突然表示された場合は、直前に編集したXMLファイルを確認すると原因を見つけやすくなります。

原因2:strings.xmlやthemes.xmlなどにエラーがある

レイアウトXMLだけでなく、strings.xmlcolors.xmlthemes.xmlなどのリソースXMLにエラーがある場合も、Rクラスの生成に影響することがあります。

例えば、strings.xmlで閉じタグを忘れている場合です。

<string name="app_name">My App

正しくは、次のように閉じタグを記述します。

<string name="app_name">My App</string>

一つのリソースXMLにエラーがあるだけでも、複数のソースファイルで一斉にRが認識されなくなる場合があります。

原因3:リソース名が命名規則に違反している

resフォルダ内のリソースファイル名には、Androidで使用できる文字に制限があります。

例えば、次のような名前は問題になる場合があります。

MyImage.png
button-icon.png

Androidのリソース名では、基本的に小文字の英字、数字、アンダースコアを使用します。

例えば次のように変更します。

my_image.png
button_icon.png

不正なリソース名が存在すると、リソースのコンパイルに失敗し、その影響でRクラスを正しく生成できない場合があります。

原因4:存在しないリソースを参照している

コード内で、実際には存在しないレイアウトやIDを参照している場合があります。

setContentView(R.layout.activity_home);

このとき、res/layoutフォルダ内にactivity_home.xmlが存在しなければ、そのリソースを参照することはできません。

実際に存在するリソース名へ修正します。

setContentView(R.layout.activity_main);

レイアウト名やIDを変更した直後にエラーが発生した場合は、変更前の古い名前がコード内に残っていないか確認します。

原因5:誤ったRクラスをimportしている

ソースコードの上部で、意図しないRクラスをimportしている場合があります。

特に次のようなimportには注意します。

import android.R;

android.RはAndroidシステム側のリソースを参照するためのクラスであり、自分のアプリのRクラスとは異なります。

自分のアプリのリソースを使用する場合は、誤ったimportを削除します。

// import android.R; を削除する

必要に応じて、アプリ側の正しいRクラスをimportします。

import com.example.myapp.R;

Android Studioの自動importによって意図しないRクラスが追加される場合もあるため、R関連のエラーが発生したときはimport文も確認します。

原因6:packageやnamespaceの設定に問題がある

Androidプロジェクトでは、ソースコードのpackageとGradleで設定されているnamespaceによって、生成されるRクラスの名前空間が決まります。

例えば、build.gradle.ktsで次のように設定されているとします。

android {
    namespace = "com.example.myapp"
}

通常は、このnamespaceに対応するRクラスが生成されます。

パッケージ名やディレクトリ構成を変更した後にエラーが発生した場合は、ソースファイルのpackage宣言、namespace、importが正しいか確認します。

原因7:Gradle Syncが失敗している

Gradleの設定変更後に同期が正常に完了していないと、Android Studioがプロジェクト構成や生成コードを正しく認識できない場合があります。

依存関係、Android Gradle Plugin、SDK、namespaceなどの設定を変更した後に発生することがあります。

Gradle Syncを実行し、同期処理中に別のエラーが表示されていないか確認します。

Gradle Syncが失敗している場合は、「Cannot resolve symbol ‘R’」を直接修正しようとする前に、Gradle Syncで最初に表示されているエラーを解決する必要があります。

原因8:別のビルドエラーが発生している

Rクラスはビルド処理の中で生成されるため、プロジェクト内に別のビルドエラーがあると正常に生成されない場合があります。

そのため、JavaやKotlinのファイルでRだけが赤く表示されていても、実際の原因は別のXMLファイルやGradle設定に存在することがあります。

Android StudioのBuildウィンドウを確認し、最初に発生しているエラーから順番に修正します。

原因9:リソースIDの名前が一致していない

XMLで定義したIDとコード側で指定しているIDの名前が一致していない場合があります。

例えば、XML側で次のようにIDを設定したとします。

android:id="@+id/button_submit"

コード側では同じ名前を使用します。

findViewById(R.id.button_submit);

コード側で異なる名前を指定している場合、そのリソースを参照することはできません。

XML側とコード側のID名が一致しているか確認します。

原因10:マルチモジュール構成で別のRを参照している

複数のモジュールを使用しているAndroidプロジェクトでは、それぞれのモジュールに対応したRクラスが生成されます。

そのため、リソースが存在するモジュールとコードが存在するモジュールが異なる場合は、依存関係やimportが正しく設定されている必要があります。

マルチモジュール構成で「Cannot resolve symbol ‘R’」が発生した場合は、現在参照しようとしているRがどのモジュールのものなのか確認します。

原因11:Android Studioのインデックスやキャッシュに問題がある

コードやリソースに問題がなく、プロジェクトのビルドも正常に完了しているにもかかわらず、Android Studio上だけでRが赤く表示されることがあります。

この場合は、Android Studioのインデックスやキャッシュの状態が影響している可能性があります。

Android Studioを再起動したり、必要に応じてキャッシュの再構築を行ったりすることで改善する場合があります。

キャッシュの再構築はXMLの構文エラーやGradle設定の問題を修正する方法ではありません。まずプロジェクト内に実際のエラーがないことを確認してから試します。

まずresフォルダ内のエラーを確認する

「Cannot resolve symbol ‘R’」が表示された場合は、最初にresフォルダ内のファイルを確認します。

特に、直前に次のようなファイルを編集していないか確認します。

  • activity_main.xmlなどのレイアウトファイル
  • strings.xml
  • colors.xml
  • themes.xml
  • DrawableのXMLファイル
  • MenuのXMLファイル
  • Navigation関連のXMLファイル

これらのリソースファイルに一つでもエラーがあると、Rクラス全体に影響することがあります。

Gradle Syncを実行する

XMLやリソース名に明らかな問題がない場合は、Gradle Syncを実行します。

Gradle Syncによってプロジェクト設定が再読み込みされ、生成クラスや依存関係が再認識されることでエラーが解消する場合があります。

ただし、Sync中にエラーが表示された場合は、そのエラーを無視してSyncを繰り返すのではなく、表示された原因を先に修正します。

プロジェクトを再ビルドする

Gradle Syncが正常に完了している場合は、プロジェクトを再ビルドします。

再ビルドによってリソースが再処理され、Rクラスが再生成されることでエラーが解消する場合があります。

再ビルドに失敗する場合は、Buildウィンドウに表示された最初のエラーを確認します。

Clean Projectを実行する

古いビルド結果が残っていることが原因と考えられる場合は、Clean Projectを実行してから再度ビルドすると改善する場合があります。

ただし、XMLやGradleの設定自体にエラーがある場合は、Clean Projectを実行しても問題は解決しません。

まず実際の構文エラーや設定エラーがないか確認することが重要です。

Cannot resolve symbol ‘R’が表示されたときの確認ポイント

「Cannot resolve symbol ‘R’」が表示された場合は、次の項目を順番に確認します。

  • resフォルダ内のXMLに構文エラーがないか
  • strings.xmlthemes.xmlなどに記述ミスがないか
  • リソースファイル名がAndroidの命名規則に違反していないか
  • 参照しているレイアウトやIDが実際に存在するか
  • import android.Rなど誤ったRクラスをimportしていないか
  • アプリ側の正しいRを参照しているか
  • packagenamespaceの設定に問題がないか
  • Gradle Syncが正常に完了しているか
  • 別のビルドエラーが発生していないか
  • マルチモジュールの場合、正しいモジュールのRを参照しているか
  • Android Studioのインデックスやキャッシュに問題がないか

特に、複数のJavaやKotlinファイルで突然Rがすべて赤く表示された場合は、それぞれのファイルに問題があるのではなく、一つのリソースエラーやGradleエラーが原因になっている可能性があります。

まとめ

Android Studioの「Cannot resolve symbol ‘R’」は、Androidプロジェクトで自動生成されるRクラスをAndroid Studioが正しく認識できない場合に表示されるエラーです。

代表的な原因には、XMLの構文エラー、リソース名の命名ミス、存在しないリソースの参照、誤ったRクラスのimport、packagenamespaceの設定、Gradle Syncやビルドの失敗などがあります。

また、Rそのものに問題があるのではなく、別のリソースエラーやビルドエラーによってRクラスが正常に生成されていない場合もあります。

基本的には、まずresフォルダ内のXMLやリソース名を確認し、その後にimport、packagenamespace、Gradle Sync、ビルドエラーの順で確認すると原因を特定しやすくなります。

「Cannot resolve symbol ‘R’」が表示されたときは、Rが赤くなっている行だけを見るのではなく、プロジェクト全体の中でRクラスの生成や認識を妨げているエラーがないか確認することが重要です。