Android Studio 中出现“无法解析符号 R”的问题

784
在我所有的课程中,每当提到 R.id.something 时,R 都会变成红色,并显示 "无法解析符号 R"。同样,每当有 R.layout.something 时,它都会被用红线标注并显示 "无法解析方法 setContentView(?)”。项目总是能够成功构建,但这种情况影响了我的使用体验。我在这里看到了很多类似的问题,但大部分都涉及从 Eclipse 导入项目。我正在使用我认为是最新版本的 Android Studio,并且该项目是使用 Android Studio 创建的,在没有任何 "无法解析 R" 的问题下正常工作。如果有人知道是什么原因导致这种情况,请告诉我。

我指的是我改变了TextView的ID。我确实不得不从先前有太多错误无法处理的文件中完全创建一个新的XML文件。 - ez4nick
3
在提出这个问题之前,我搜索了很多次,并找到了许多类似的问题,包括你提到的那个。我确实阅读了那个问题中的建议,在我的任何Java文件中都没有导入Android.R。 - ez4nick
2
大家好,我忘记问这个问题了,因为它是很久以前问的。一年前我应该接受自己的答案,现在这个评论就是我的答案。问题很简单,当时Android Studio处于早期阶段,作为一个新开发者,我永远不应该使用它。现在一切都正常工作了。如果可能的话,请恢复我的原始答案,这样我就可以接受它。 - ez4nick
3
找不到 R 不是你的错误,而是由编译错误导致的。解决其他错误就可以了。 - Just_someone
1
在我的清单文件中粘贴了别人的代码后,发生了这种事情,哈哈。 - agenis
显示剩余13条评论
102个回答

737

我也遇到了这个问题。只需要运行'gradlew clean'和'gradlew build'就可以解决了。


点击Build->Clean Project,这将执行gradle清理操作。


59
有时你也需要重新启动Android Studio,至少对我来说是这样。 - Foo Bar User
24
对于那些对使用命令行感到不适的人,可以点击“构建->清理项目”,这将执行“gradlew clean”。;) - Mr. Concolato
26
运气不好,清洁和重建对我没用。 - CandleCoder
8
如果清理、重建、清空缓存和重启无法解决问题,可以尝试导入包R。请注意,翻译时不得添加解释或其他内容,只需保证翻译准确、通顺即可。 - Sudip Bhandari
7
对我来说,这是问题的原因:Gradle中的ApplicationId与清单文件中的包名不匹配(尽管自动导入为R文件添加了错误的地址)。我建议阅读这篇文章,以澄清两者之间的区别。 blog.stylingandroid.com/package-name-vs-application-id - Fatima
显示剩余15条评论

236
在最新版本的Android Studio中(至少对我而言),以下操作有效:
"工具" -> "Android" -> "与Gradle文件同步项目"
在最新的Android Studio 3.1.3中(2018年7月),"Sync Project with Gradle Files"(与Gradle文件同步项目)可在主菜单栏中找到。 输入图片描述

对我不起作用(Android Studio 0.8.14)。 但是,Build > Clean project 很好用。 - Phat H. VU
仍然适用于Android 1.2.1。如果第一次不起作用,请记得多试几次。 - 0xC0DED00D
这是唯一对我起作用的方法。我先尝试了所有其他的解决方案。 - Mac
6
在Android Studio 3.1.1中,此选项位于文件 -> 与Gradle文件同步项目。 - Hrishikesh Kadam
在Android Studio 3.2稳定版本中,这是唯一对我有效的方法,谢谢。 - TapanHP
显示剩余6条评论

162

我使用的是Gradle 3.3.0版本,它是主要原因。浪费了我6.5个小时的时间。换成Gradle 3.2.1版本后,问题解决了。

classpath 'com.android.tools.build:gradle:3.2.1'

在更改Gradle版本后问题得到解决。详细历史记录可在此处找到。


11
Android studio 开发人员又有了惊人的表现。回到 3.2.1 版本实际上是我找到的唯一有效的解决方法… - Vucko
1
惊人的是,两个月后这仍然是一个问题。最新版本(3.3.2)没有修复它,但3.2.1可以。 - Jake Lee
你可以升级Android Studio到版本3.3,而不是回到gradle 3.2.1。请参阅我的答案此处 - arne.z
它在将3.3.0更改为3.2.1后工作了,但我的问题是,在3.3.0上它运行得很好,我只是重构和更新了清单XML文件和Gradle文件,并同步了Gradle。请问可能的原因是什么? - insoftservice
谢谢。我也遇到了这个问题。但现在已经解决了。 - P113305A009D8M
显示剩余2条评论

112

我有一个类似的问题,这是我所做的:

清理项目并与Gradle同步项目,

输入图像描述

在我的sdk中检查buildTools版本 输入图像描述

从构建gradle(模块)中将minSdkVersion从8更改为9

defaultConfig {
        applicationId "PackageName"
        minSdkVersion 9
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }

但这些都没有帮助。

最终我找到了答案(在我的情况下有效)

从build.gradle(module:app)中进行更改

android {
    compileSdkVersion 21
    buildToolsVersion '21.0.1'
......
....
}

或者

选择文件 | 项目结构,将构建工具版本更改为21.1.1

输入图像描述


59
  1. 检查您的XML文件。
  2. 清理项目。

就是这样。

例如,我的strings.xml中有一个条目:

<string name="A">Some text</string>

activity_main.xml中,我使用了这个字符串条目

<TextView
android:id="@+id/textViewA"
android:text="@string/A"/>

在我处理这个项目的过程中,我不小心将其删除了。

 <string name="A">Some text</string>

因此,activity_main.xml文件变得无效。结果是:无法解析 R。

因此,请检查您的 *.xml 文件并清理项目。


我的一个XML文件引用的图片丢失导致了这个问题。将图片放入文件夹中,清理一下,R现在又正常了。 - Casey Murray
我不小心在strings.xml中定义了两次字符串。但是Studio没有显示出来。X-( 谢谢你的回答。 - codingjeremy
7
为什么IDE没有反馈来强调坏的XML文件? - Fuhrmanator
当像你提到的那样发生时,问题会在xml中突出显示。我尝试了互联网上能找到的一切,但是没有解决我的问题,尽管应用程序正常运行。 - Aliton Oliveira

58
如果您在将Java文件或目录移动到其他位置后看到此错误,那么您可以肯定Android Studio已经变得混乱了。撤销这些操作并不能解决问题。
因此您尝试进行清理,但那也不起作用。
重启也不行。
但是请尝试“文件->无效缓存/重新启动...->无效和重新启动”。
Android Studio维护有关哪些文件依赖于其他文件的信息。由于移动文件时实现不正确,因此移动文件会导致错误。而且,这些依赖项的缓存被用于尝试加快构建速度。
这意味着您不仅需要重启,还需要使这些缓存失效,以恢复(更准确地说是重新构建)正常状态。

没有帮助。还尝试了清理/重建。将Java包移动到另一个包后发生错误。有趣的是,在一个包中可以访问R类,但在我移动的包中无法访问。 - rint
在更近版的Android Studio中,使无效并重启现已成为默认菜单选择。这至少可以帮助一些人。(可惜他们并没有修复所有导致此错误的疯狂问题!) - SMBiggs
2
我在移动和重命名项目后遇到了这个错误。这解决了所有清理和重新启动都无法解决的R问题。谢谢。 - FrankKrumnow
1
如果你已经尝试过以下两个步骤:1)清理和重建 2)确保你的XML文件是有效的,那么这绝对是正确的答案。 - Machine Tribe

50

我认为如果你将Activities文件放置在非默认文件夹中,那么你需要在所有使用R的Activities中导入com.example.yourproject.R文件(这是你的项目R文件,而不是Android.R文件)。例如,在MainActivity文件中插入以下行:

import com.example.yourproject.R;
import com.example.yourproject.R;

1
啊,第一次构建之前仍会出现错误消息。但是,您只需按下构建按钮,Android Studio将生成R文件,构建应该成功。 - ninjahoahong
我认为最好的做法是在修复后清理项目,然后再进行构建。或者按Shift + F9键使用您的设备或模拟器进行调试。我更喜欢在真实设备上进行调试。 - ninjahoahong

29

这个问题似乎有很多原因。最近我添加了一个名为NewActivity的测试活动,这创建了一个名为res/menu/new.xml的文件,但是Gradle不喜欢这个名称,因为"new"是一个保留字。

gradlew clean

或者

"工具" -> "Android" -> "与Gradle文件同步项目"

这些是值得尝试的好方法,但在执行这些命令之前,您可能需要解决其他一些问题。


谢谢,这对我也有用。 小问题 - 如果我想这样做(我做了“工具”->“Android”->“与Gradle文件同步项目”),我应该在哪里输入gradlew clean? - Sergii
打开命令终端,切换到项目目录并执行"./gradlew clean"。 - chawkinsuf
这种方法比“重建项目”更好地解决了问题,具体是如何实现的? - IgorGanapolsky
是的,在我的情况下,我添加了一个名为“import.png”的png文件。我不得不将其重命名,在我的情况下是“import_icon.png”,然后项目编译正常。 - mihai71

24

你需要做两件事情,首先要清理项目(在“构建”菜单中)-它会删除可能是罪魁祸首的构建目录:

构建 -> 清理项目

其次,将项目与Gradle文件同步(在文件下):

文件 -> 与Gradle文件同步

这是Windows 10上Android Studio 3.6.1中项目的位置。

如果所有其他方法都失败了,“使缓存无效并重启”(在文件下)通常是解决问题的方法。这将关闭整个程序,并花费最长时间,我认为。

文件 -> 使缓存无效

需要澄清的是,我是在Windows 10上运行这个程序,但它应该在MacOS和Linux上也能工作。


1
绝对惊人,救了我的一天。 - Ido Barnea
@IdoBarnea 很高兴能帮忙! - A P
2
清除缓存并重启解决了这个问题。 - serif

17

R.java文件包含xml和Java页面之间的链接。"R无法解析"只有在某些资源文件出现问题时才会出现。因此,最好和有效的方式是删除res文件中最后完成的xml或drawable文件,然后根据Android编码规范重新开始。这是唯一的方法。是有效和正确的方式。

另外,使用Git进行代码跟踪。


在我的情况下,不仅XML存在问题,而且PNG(在drawable中)也存在问题。 - CoolMind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接