PC パソコン

Android Studio「Unresolved reference: R」の原因と解決方法

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

このエラーは、Androidプロジェクトで自動生成されるRクラスをコードから参照できない場合に発生します。

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

そのため、「Unresolved reference: R」が発生した場合は、Kotlinコードそのものだけではなく、XMLファイルのエラー、リソース名、パッケージやnamespace、Gradleの設定なども確認する必要があります。

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

「Unresolved reference: R」とは

Androidアプリでは、resフォルダ内に配置されたレイアウトや文字列、画像などをコードから利用するためにRクラスが使用されます。

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

setContentView(R.layout.activity_main)

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

val button = findViewById<Button>(R.id.button)

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

Unresolved reference: R

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

そのため、リソースファイルやビルド設定などに問題があると、Rクラスが正常に生成されずエラーにつながることがあります。

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

「Unresolved reference: 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" />

「Unresolved reference: R」が突然表示された場合は、直前に編集したXMLファイルにエラーがないか確認します。

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

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

例えば、次のようなファイル名は問題になることがあります。

MyImage.png
button-icon.png

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

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

my_image.png
button_icon.png

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

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

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

setContentView(R.layout.activity_home)

このとき、res/layoutactivity_home.xmlが存在しなければ、そのリソースを参照することはできません。

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

setContentView(R.layout.activity_main)

ファイル名やIDを変更した直後にエラーが発生した場合は、古いリソース名がコード内に残っていないか確認します。

原因4:誤った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によってandroid.Rが追加されることもあるため、「Rは認識されるが目的のリソースが見つからない」という場合にもimportを確認します。

原因5:packageとnamespaceの設定が一致していない

Androidプロジェクトでは、ソースコードのpackageとGradleで設定されているnamespaceの関係によって、参照するRクラスが変わる場合があります。

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

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

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

パッケージ構成を変更した後に「Unresolved reference: R」が発生した場合は、namespaceやimport、ソースファイルのpackage宣言を確認します。

原因6:Gradle Syncが正常に完了していない

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

例えば、依存関係やAndroid Gradle Plugin、SDKなどの設定変更後にエラーが発生することがあります。

Android StudioでGradle Syncを実行し、同期時に別のエラーが発生していないか確認します。

Gradle Syncそのものが失敗している場合は、「Unresolved reference: R」より先に、同期エラーの原因を解決する必要があります。

原因7:ビルドエラーによってRクラスが生成されていない

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

その結果、KotlinファイルではRにエラーが表示されていても、実際の原因は別のファイルに存在することがあります。

「Unresolved reference: R」は原因そのものではなく、別のビルドエラーによって発生した結果として表示されている場合があります。

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

原因8:strings.xmlなどのリソースXMLに記述ミスがある

レイアウトファイルだけでなく、strings.xmlcolors.xmlthemes.xmlなどのリソースXMLに問題がある場合も、リソース生成に失敗することがあります。

例えば、XMLのタグが正しく閉じられていない場合です。

<string name="app_name">My App

正しくは閉じタグが必要です。

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

XMLファイルの一部にエラーがあるだけでも、複数のKotlinファイルで一斉にR関連のエラーが表示されることがあります。

原因9:リソースIDの記述を間違えている

XMLでViewにIDを設定する際の記述を間違えている場合があります。

通常、新しいIDを定義するときは次のように記述します。

android:id="@+id/button_submit"

Kotlin側では次のように参照できます。

R.id.button_submit

XML側のID名とKotlin側で指定しているID名が一致しているか確認します。

原因10:別モジュールのRを参照しようとしている

複数のモジュールを使用しているAndroidプロジェクトでは、リソースが定義されているモジュールとコードが存在するモジュールが異なることがあります。

それぞれのモジュールには異なるRクラスが生成されるため、別モジュールのリソースを使用する場合は、依存関係やimportが正しく設定されている必要があります。

マルチモジュール構成で「Unresolved reference: R」が表示された場合は、どのモジュールのRを参照しようとしているのか確認します。

原因11:BuildConfigや生成コードの設定変更後に問題が発生している

GradleやAndroid Gradle Pluginの設定を変更した直後に、生成コード周辺の認識が崩れることがあります。

この場合は、Gradle Syncやプロジェクトの再ビルドを行い、設定ファイルにエラーがないか確認します。

特にAndroid Gradle Pluginのバージョン変更後などは、古い設定が現在の構成と合っていない場合があります。

まずXMLやリソースのエラーを確認する

「Unresolved reference: R」が表示されたときに重要なのは、Rが赤く表示されているKotlinファイルだけを確認しないことです。

Rはプロジェクト内のリソースから生成されるため、原因がresフォルダ内にある可能性があります。

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

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

これらのファイルに赤いエラー表示がある場合は、先にそのエラーを修正します。

Gradle Syncを実行する

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

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

ただし、同期時にエラーが表示された場合は、単純にSyncを繰り返すのではなく、そのエラー内容を確認して原因を修正します。

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

Gradle Syncが正常に完了している場合は、プロジェクトを再ビルドすることでRクラスが再生成され、エラーが解消することがあります。

Android StudioのBuildメニューからプロジェクトのビルドや再ビルドを実行し、最初に表示されるエラーを確認します。

再ビルドに失敗する場合は、そのビルドエラーを先に修正します。

Clean Projectを試す

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

ただし、「Unresolved reference: R」がリソースXMLやGradle設定の記述ミスによって発生している場合、Clean Projectだけでは解決しません。

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

Android Studioのキャッシュが原因の場合

コードやリソース、Gradle設定に問題がなく、ビルドも正常に完了するにもかかわらずAndroid Studio上だけでRが認識されない場合は、IDE側のインデックスやキャッシュが影響している可能性があります。

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

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

Unresolved reference: Rが表示されたときの確認ポイント

「Unresolved reference: R」が表示された場合は、次の項目を順番に確認します。

  • resフォルダ内のXMLに構文エラーがないか
  • 画像やXMLなどのリソース名が命名規則に違反していないか
  • 参照しているレイアウトやIDが実際に存在するか
  • import android.Rなど誤ったRクラスをimportしていないか
  • アプリ側のRクラスを正しく参照しているか
  • namespacepackage周辺の設定に問題がないか
  • Gradle Syncが正常に完了しているか
  • プロジェクト内に別のビルドエラーがないか
  • strings.xmlthemes.xmlなどにエラーがないか
  • マルチモジュールの場合、正しいモジュールのリソースを参照しているか

特に、複数のKotlinファイルで突然Rがすべて赤くなった場合は、それぞれのファイルに問題があるのではなく、一つのXMLエラーやGradleエラーによってRクラス全体が正常に生成されていない可能性があります。

まとめ

Android Studioの「Unresolved reference: R」は、Androidプロジェクトで使用するRクラスをコードから参照できない場合に表示されるエラーです。

代表的な原因には、XMLの構文エラー、不正なリソース名、存在しないリソースの参照、誤ったRクラスのimport、namespaceやGradle設定の問題などがあります。

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

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

「Unresolved reference: R」が表示されたときは、Rが赤く表示されている行だけを見るのではなく、「Rクラスの生成を妨げているエラーがプロジェクト内のどこかにないか」という視点で確認することが重要です。