Android Studio突然无法解析符号R。

12

我正在使用Android Studio打开一个项目,该项目通过向导生成并正常运行。

我对activity_main.xml进行了一些小更改,然后切换回MainActivity.java时,在多个位置遇到了“无法解析R”的错误。我可能做了一些引起此问题的事情,但是我不确定是什么,因为它出现在我编辑xml时。

有人知道可能的解决方法吗?我可以在 r/release/packege/com/ 中找到R.java,看起来没问题。


1
你尝试过清理你的项目吗? - Anila
4
这可能是因为XML文件中存在错误。为了以防万一,请检查一下您所更改的内容。有时候,只需要清理一下就可以解决问题。我自己也遇到过这两种情况。 - laminatefish
谢谢。我都做了。我的xml文件有一个小错误,我也重新构建了项目。现在它可以工作了。奇怪的是,IDE仍然警告说有些东西不对。 - Einar Sundgren
15个回答

35

大多数情况下是由于糟糕的XML文件导致的。 XML文件可以是布局文件、值文件或清单文件。请检查您的XML文件并尝试重新构建项目。有时清理项目并重新构建也会起作用。


还要确保没有文件夹被复制。特别是在 /res 目录中。 - Wenger
1
我并不完全确定这是否是我提问时问题的原因。但由于在我的经验中,这是AS和eclipse解析R文件出现问题最常见的原因,因此我认为这是正确的答案。 - Einar Sundgren
这种情况经常发生在我身上。通常是XML注释中的一些未转义字符。我希望Android Studio能够指出问题,而不是要求你查看所有以前的XML更改。 - codingjeremy
AndroidManifiest.xml 中存在一些字符串不存在。 - shareef
还有,这一点应该不用说但我曾经犯过这个错误,注意错误信息。当问题出现在你的XML文件之一时,编辑器不会引导你去解决问题 - 它甚至不会带你到XML文件中。但是它可能会在错误消息中给出导致问题的XML条目的名称。 - jwehrle
注意:有时候仅仅清理/重建等操作是不够的,对我有效的方法是关闭AndroidStudio并重新打开它。 - Mercury

6

此外,请确保您没有使用无效名称的可绘制资源。我曾经使用了一个数字文件名作为可绘制资源,这对Android不友好,导致编译R.java失败。


5

降低Gradle插件版本

对于我来说,无论如何清理、重建和重新启动都没用。

唯一有效的方法是将我们的Gradle版本从3.4.0-alpha02降级到3.2.1

因此,不要使用:

dependencies {
    classpath 'com.android.tools.build:gradle:3.4.0-alpha02'
}

我们使用了:
dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'
}

在进行了这些更改并进行Gradle同步后,一切都正常了。

不确定它是否与alpha版本或该版本相关,或者更改Gradle版本是否只是强制刷新,否则其他命令无法完成,但是就是这样。


降级可能是一个很好的建议,适用于那些在工具链中使用任何 alpha 版本的人。只需降级到生产版本即可。由于这个问题是在2014年提出的,当时整个 Android Studio 还处于 alpha 阶段,我也应该这样做。 - Einar Sundgren
1
@EinarSundgren 同意。通常我会避免使用Alpha版本,特别是在生产环境中,但这是由另一位开发者设置的。尽管如此,我还是很惊讶这最终成为罪犯。当然,一个指示问题所在的良好错误信息会更好。 - Joshua Pinter

3
确保在你的AndroidManifest.xml文件中,包名是正确的。当我的R.whatever被标记为红色时,这个方法解决了我的问题!

对我来说,这是一个非常明显的错误。由于存在旧文件路径,我还不得不重新启动工作室。 - TheRealJAG

2
尝试按以下步骤清理项目:
如果您使用的是Windows操作系统,请打开命令提示符(CMD),切换到您的项目目录,并运行“gradlew clean”命令。

1
这可能是一个不错的建议。原始问题发生在一个 pre gradle 项目中,所以那时候那不会是解决方案。似乎当前的 Eclipse 工作空间存在一些错误,可能是由于 Aptana 安装导致的。当我把项目移到另一个工作空间时,问题消失了。 - Einar Sundgren
你也可以通过GUI界面来进行清理,方法是 Build > Clean Project 或者 Build > Rebuild Project。另外,你也可以通过注释掉可能出错的代码行来进行清理。一旦成功清理,就把它取消注释即可。 - Nuhman

1
我刚遇到了这个问题,原因是在编辑布局后,Android Studio自动向源文件添加了一个导入(import)。
import android.R

当然,主要的R类中没有你布局文件中所有的符号,这使得一切都变成了一团红色的混乱。 删除那行代码对我来说解决了问题。
编辑: 似乎eclipse早期也遇到了同样的问题

1
我也遇到了同样的问题(最近在午餐时,回来后出现了什么鬼?)。由于这只是一个简单的Hello World程序,错误不可能隐藏在很多地方。XML文件看起来很好,我甚至没有碰过清单。尝试清理并没有什么效果。
所以我注释掉了我的layout.xml的一部分,试图缩小问题的范围。果然,错误消失了。
然后我只是取消注释我之前注释掉的内容……一切都很顺利。奇怪!也许还有一些潜在的问题需要解决,才能重建布局文件。你会认为这种基本的东西现在不会发生,但它们确实会发生。
还有一件事情!Java也可能会出现问题。很难知道Java运行时环境的状态;重新开始可能更容易。所以这里还有一件事要尝试:重新启动计算机、重新启动Android Studio,然后使缓存无效并重新启动。没错,全面重启。

2
作为补充,我还记得编程的旧日子,当你在打字时不小心按下控制键时,你很容易就会在代码中插入一个隐藏的控制字符。虽然你看不到这些字符,但编译器肯定能看到!80年代的许多程序员花费了很长时间来追踪这些错误。也许在Eclipse中偶尔会出现类似的情况?有什么评论吗? - SMBiggs

1
我有时在更新Android Studio后会遇到这个问题。并不总是立即出现,而是在一段时间后(可能是在重启程序后)。
以下是对我有用的方法:工具 - Android - 与Gradle文件同步项目。
由于某种原因,仅仅点击更改build.gradle文件后显示的“立即同步”链接对我没有任何影响。即使消息大致相同。

1
我遇到了同样的问题,因为在我的strings.xml文件中,我忘记转义一个撇号。在xml文件中,使用"\'"而不是"'"!

0

当其他方法都无效时,重新启动Android有时会有所帮助。在启动过程中,文件会被重新加载,从而使R的检测变得可能。


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