R无法解析-Android错误


1070

我刚刚下载并安装了新的Android SDK。我想创建一个简单的应用程序来测试驱动器。

向导创建了以下代码:

package eu.mauriziopz.gps;

import android.app.Activity;
import android.os.Bundle;

public class ggps extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

但是Eclipse给了我错误

R无法解析

在线

setContentView(R.layout.main);

为什么?

PS:我有一个名为XML文件main.xmlres/layout/


对于那些仍然对eclipse仍然遇到问题而无法更新/生成R.java的人。一种可能的解决方案是创建一个虚拟xml,然后删除该xml。就我而言,这就是解决方案
否认2012年

老实说,这听起来很愚蠢(确实如此),但是修改AndroidManifest.xml,然后撤消该编辑,然后保存对我有用的文件。如果此后我清理了该项目,它会再次崩溃。一直以来,我一直认为Xcode是唯一出现此类神秘错误的IDE。
iwasrobbed 2012年

3
您是否尝试过右键单击项目-> Android工具->修复项目设置?
谢尔盖(Sergei)

6
请检查您的XMl布局文件,如果xml中存在任何错误,则无法生成R.java,并且该错误是在bulid和clean之后产生的。
swiftBoy 2014年

1
提示:当我将IDE从Eclipse切换到Android Studio时,这一切就停止了。
马塔

Answers:


840

在也解决了这个问题之后,我在Android文档中找到了以下说明:

http://source.android.com/source/using-eclipse.html

*注意:Eclipse有时喜欢在使用资源的文件顶部添加“ import android.R”语句,尤其是当您要求Eclipse对导入进行排序或管理时。这将导致您的品牌受损。请注意这些错误的导入语句并删除它们。*

在阅读Android示例教程时,我经常会使用Ctrl+ Shift+ O命令“组织导入”并生成任何缺少的导入语句。有时这会生成不正确的import语句,该语句会隐藏在R.java生成时自动生成的类。


32
同样也会发生这种情况,但是捆绑的布局文件也可能导致这种情况。
GHz

113
这个经典的错误已经在Eclipse中使用了几年,并且从未得到修复。成千上万的人面临着同样的问题。
卡罗尔2012年

52
Eclipse开发人员,请删除此$£%&“ $&/错误!! Google开发人员,请给我一个类似于iPhone Xcode的£$&$”%&Android套件!
Abramodj 2012年

18
@ 2-Stroker:这是一个错误。当我通过Eclipse向导创建一个分支新的andorid项目时,它发生了,它抱怨“ R无法解析”。我不得不注释掉setContentView&getMenuInflater行,然后eclipse生成了R.java,之后我可以取消注释setContentView&getMenuInflator。Abramodj是正确的,即使您的“ hello world”示例无法编译,环境也存在严重问题。修复它的谷歌!
CF_Maintainer 2013年

5
Google如何不授予eclipse.org资金来解决此类问题?
Cris 2013年

391

每当我遇到R的问题时,都不会生成R甚至消失,这是由于XML布局文件中的某些问题导致无法构建应用程序。


21
为此+1。我有一个较旧的styles.xml文件,其parent =“ android:WindowTitleBackground”,它破坏了我的构建,并阻止了生成为“ gen”的任何内容。我刚打开项目时,实际上没有在控制台窗口中报告该错误。
Scott Persinger 2012年

12
确切地说,如果您从另一个项目复制了布局,并且正在获取此布局,则寻找缺失的可绘制对象-将立即修复它!
加博

4
我也有同样的问题,有什么办法可以知道其中一种布局吗?
谢尔盖·库彻

3
是的,我缺少一个可绘制的文件,这甚至阻止了R文件的生成。奇怪的是,我在菜单资源中有一个的android:icon="@drawable/XXX"声明<item>,但是没有红色的花样表示未找到可绘制资源XXX。在其他情况下,当未找到YYY时会"@drawable/YYY" 标记,但在这种情况下不会标记。由于某些原因。
taylor 2013年

5
是的,出色的解决方案。当一个出现此错误时..很多时候所有的布局文件都被标记为有错误..这是因为它们都在寻找R。但是,其中一个可能与错误无关,因此中止了构建。就我而言,缺少可绘制对象。
Todd Painton

201

每当你得到

R无法解析

然后检查/res目录,并且其中必须有一些错误的文件,这将阻止构建应用程序。例如,它可能是布局文件,或者可能是由于缺少某些资源,但是您已经在XML文件中定义了它。

如果在res / drawables-mdpi之类的文件夹中还有其他不符合文件命名约定(甚至仅包含[a-z0-9_。])的图像,甚至是未使用(!)或未引用(!)的图像, R.java类可能不会生成,从而导致所有其他所引用帖子的事件链。希望能帮助到你!


我在示例ApiDemos中遇到了这个问题。strings.xml文件中缺少一些资源。XML错误在Eclipse的控制台中列出。
lemotdit

谢谢!这是我的问题,我的布局出错了,但是没有任何消息。

29
如何检查错误?在构建/运行时,控制台没有任何内容
Vincent

4
如何找出WHICH xml文件导致错误?Eclipse不会标记它们!
2014年

1
我在hdpi文件夹中有2张相同名称的图像(其中1张具有png,1张具有jpg格式),删除其中的1张可以解决此问题
Haseeb Jadoon 2014年

134

我的项目一开始就包含一个r.java。,R.layout.main正常工作。但是,在添加一些代码后它不起作用,并且错误是R.layout.main无法解决。这是什么问题?

看你的进口。该行可能是:

import android.R;

将在那里。如果是这种情况,请将其删除,以便您的项目将不使用默认的Android Resources类来解析R,而是使用从/ res /文件夹自动生成的R来解析。


5
谢谢@Dimitar,它解决了我的问题!Eclipse和自动导入功能似乎是通过自动添加该导入行来吸引我的。
史蒂芬

7
使用大写字母命名布局时,我也遇到过类似的问题
Travis 2010年

这是人们获得“未找到R”的5大原因之一。我已经编译了一个问题/解决方案页面,其中的图像在下面的链接中显示了主要的5个。真正希望该列表对人们有所帮助,因为这是一个普遍的问题。spragucm.wordpress.com/2014/05/13/…–
克里斯·斯普拉格

删除R后,在某些地方R被用作类&现在给出错误,如何解决?
Narendra Jaggi,2015年

96

还有可能导致此问题的另一件事:

我安装了新的ADT(v。22)。它停止创建gen包含的文件夹R.java。解决方案是从Android SDK Manager安装新的Android SDK构建工具。

解决方案在这里找到


我自己也。当我选择SDK Manager时,请放心,构建工具会自动检查是否已安装,并注意安装!是什么赋予了???
HotspotOffice的David 13年

我遇到过同样的问题。很高兴您分享了此信息。两天后,我从自己的代码中发现了错误。我对Google感到非常失望,因为很难解决此错误消息,但它是由自己的错误引起的,尽管工具无法正确报告导致错误的原因。我同时对项目进行了更改,因此我认为这又是我的错。
Reijo Korhonen 2013年

5
为我工作,谢谢!它只是强化了我的口头禅:“开发时千万不要更新任何东西”。
罗德里戈·迪亚斯

我在四处寻找答案,但对我没有任何帮助。我认为这是一个日食或SDK问题。正如您所说,我只是删除prev eclipse软件包并重新安装。然后它正在工作。您的回答得到了帮助
初学者

这就是我的问题!浪费一天的时间来尝试修复R错误,添加/删除引用以及尝试其他选项。我的是ADT的全新设置,并且创建了新的android项目,并且仍然出现错误。最终,我不得不安装Android SDK工具,Android SDK平台工具和SDK生成工具的所有可用更新:p
Saurabh Kumar 2013年

87

R.java是Android Eclipse插件在构建应用程序时创建的文件。R.java在“ gen”目录下创建。该文件是根据“ res”目录中的信息生成的。如果运行,请在Eclipse菜单上选择“项目”->“清洁...”,它将删除并重新生成R.java文件。

当您在AndroidManifest.xml文件中更改软件包名称时,会出现“ R无法解决”问题。它使用您的Android包名称在“ gen”目录下创建一个子目录,用于存储R.java文件。

Eclipse执行干净时可能会遇到问题,因为R.java当您更改了Android包名称时,它对文件的位置感到困惑。您可以重命名下面的子目录gen以匹配您的新软件包名称,也可以将软件包名称改回旧名称。进行清理,然后将包名称更改为所需的新名称。如果您在更改程序包名称时阻止Eclipse尝试构建,则此方法最有效。在“项目”菜单下,取消选中“自动构建”选项,并在“清除...”对话框询问是否应“立即开始构建”时取消选中该框,以便在更改时不尝试构建包名称。更改名称后,可以重新打开“自动构建”。

请注意,如果您的AndroidManifest.xml文件包名称与Java包名称不匹配,Eclipse将最终自动添加“ import <您的Android包名称> .R;”。在所有.java具有R引用的文件中,如果您更改AndroidManifest.xml 包名,则Eclipse有时不会更新所有这些已添加的导入。如果发生这种情况,请使用Eclipse重构(ALT+ Shift+ R)将其中一个Java文件中的import语句更改为新的AndroidManifest.xml程序包名称。最好在禁用“自动构建”的情况下执行此操作。


21
这看起来像是没有参考的剪切粘贴
Casebash

1
尽管所有文件名和内容都可以,但文件的多次复制/粘贴和名称重构导致相同的问题。清理项目,手动删除R.java和所有导入标头,然后重建这些导入标头(仍然使用CTRL + SHIFT + O)可以正常工作。
hornetbzz 2012年

这对我有用。我已在清单中更改了包名称。我必须在引用生成的R类值的类中使用ctrl-shift-O才能添加正确的导入。
Chuck Krutsinger 2012年

这为我解决了。还可以看到导入问题在过去发生过,但是这次的问题是清单中的软件包名称与src文件夹中的软件包名称不匹配。
Jim Range

我的申请中有两项活动。一个与生成R所使用的软件包名称不同。我必须手动输入R,例如import com.example.main.package.name.R;
Oliver Moran 2014年

85

威尔说的是对的

R是一个自动生成的类,其中包含用于标识资源的常量。如果您没有R.java文件(使用1.5 SDK在> Eclipse中为gen / eu.mauriziopz.gps / R.java),建议关闭并重新打开项目,或转到> Project> Build all (并按照> Josef的建议选择“自动构建”)。如果那不如尝试创建一个新项目不起作用,那么如果重新创建了问题,然后再>在此发布,我们将进行更详细的介绍。

但我发现还有另一个问题导致了第一个问题。SDK目录中的工具没有执行权限,因此就好像Eclipse不存在该工具一样,因此它没有构建R.java文件。

因此,修改权限并选择“自动构建”即可解决该问题。


@Jignesh- cd $ANDROID_SDK_ROOT/build-tools/<version>。然后chmod a+x上的文件一样aaptaidldexdumpdx,等ANDROID_SDK_ROOT应该在你的环境中设置,它会指向你的SDK安装。例如,/opt/android-sdk。设置两者都非常重要ANDROID_SDK_ROOTANDROID_NDK_ROOT因为Android工具在内部使用它们。看到推荐的NDK目录?在NDK用户列表中。
jww 2014年

@Lewis ..我已经选择了“自动生成”,但是错误仍然存​​在。
d_unknown

39

R是一个自动生成的类,其中包含用于标识资源的常量。如果您没有R.java文件(在带有1.5 SDK的Eclipse中为gen / eu.mauriziopz.gps / R.java),则建议您关闭并重新打开您的项目,或转到“项目”>“全部构建”(然后按照Josef的建议选择“自动构建”。如果那不如尝试创建一个新项目不起作用,那么如果重新创建了问题然后再在此处发布,我们将进行更详细的介绍。


8
这对我有用,但是我必须先“ Project-> Clean ...”。
马特·康诺利

27

关闭所有文件,清理项目,重新启动Eclipse。


23
+1,但有时它需要3次Eclipse重新启动和之间的7次项目清理。继续尝试;-) #rant
Matthias Bauch 2011年

3
将其与触摸(编辑+保存).xml文件(strings.xml ...)混合。
Ali Shakiba 2012年

24

值得签入AndroidManifest.xml。该属性package具有正确的值。

那是:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...

更改后,R.java将重新生成。


我原来的软件包名称是com.xxxxxdroid.router。我创建了应用com.xxxxxdroid2.router的新版本。完成此操作后,我必须更新AndroidManifest.xml中的程序包名称,但是直到我开始复制并粘贴旧类之后很久以后。感谢您的指导!
Eugene van der Merwe,2012年

这解决了我的问题,我正在处理一个xml文件,很高兴我记得有一个文件,我有很多...谢谢...
GHz

19

通过将活动添加到与包的根名称空间不同的名称空间也可能导致此错误。

例如,如果com.example.myapp是包的根名称空间,则可以将活动添加到com.example.myapp.activities名称空间。

这将产生“ R无法解析”错误。

要修复导入,您活动中默认名称空间中的R应该是:

import com.example.myapp.R;

这对我有帮助,我将活动移到根目录下的程序包中,将根程序包作为导入添加(import com.example.myapp.R;)解决了该问题。
eageranalyst,2013年

19

连同先前答案中的好建议,请确保已设置您的Android目标:

  1. 右键点击您的项目
  2. 选择属性
  3. 在左侧菜单中选择Android
  4. 在适当的项目构建目标旁边打勾。
  5. 单击“应用”,然后单击“确定”。

编辑:一年后,我发现了另一个原因。我的可绘制文件夹中有一个.jpg图片,其名称与.png图片相同。在我的代码中引用此图像必须使程序混淆,并且给出了“ R无法解析”错误。


17

确保您安装了Android构建工具表单SDK管理器

在项目上,右键单击属性-> Java BuildPath,选择库,然后按照以下步骤添加android-support.jar。

转到“项目”->“属性”->“ Java构建路径”,然后选择“顺序和导出”选项卡。将android-support .jar库设置为选中状态,并将其放在列表顶部。并清理和重建。它适用于大多数情况

在此处输入图片说明


15

我只是遇到了百万分之一的问题,然后才意识到是什么原因:我创建了一个XML文件,名称中包含大写字母。中的所有XML文件名都/res必须匹配[a-z0-9\\._]


另外,我只是注意到堆栈溢出要求我们转义所有反斜杠。

14

最简单的解决方案-有时,您只需要保存正在处理的XML文件,即可启动自动生成器。

保存文件(例如main.xml),然后删除R.java文件,并查看重新生成的R.java是否解决了R resolve问题。


真正。有时,如果它说您的XML中没有问题(红色波浪线或黄色感叹号),则删除有问题的行,保存XML文件,将其粘贴回,然后再次保存。如果您不是自动构建,请在那之后再次构建,它可能会起作用。Eclipse有时很愚蠢。:)
hotshot309

尽管上面列出了其他答案,但事实证明这个答案对我来说是正确的。当我去编译一些示例代码时,最初收到“找不到APK”消息,然后执行Clean生成大量“ R无法解决”错误,然后只是打开.xml文件并手动将其保存为错误被清除,我可以编译。
sXe 2012年

确实如此:清理项目后,R.java消失了-编辑并保存strings.xml解决了该问题。
BurninLeo 2012年

12

检查XML文件名。确保它们全部为小写。

还要确保所有图像资源名称也全部以小写形式出现。我的jpg文件名中有一个大写字母,这会在我的整个项目中引起R无法解决的错误。


+1是我的问题。您必须这样命名图像:eicon.png而不是eIcon.png。我通过查看Consol发现了错误。它在文件名无效的文件上返回错误:...
jasonflaherty 2012年


10

这个错误出现在我的x64 Linux Mint安装上。原来,结果是ADB二进制文件中的失败,因为ia32-libs未安装该软件包。只需运行apt-get install ia32-libs并重新启动Eclipse即可修复该错误。

如果您的x64发行版没有ia32-libs,则必须使用Multiarch。

在此帖子上检查#4和#5:http : //crunchbang.org/forums/viewtopic.php?pid=277883 # p277883

希望这对某人有帮助。


值得注意的是,如果您安装的是64位Linux,则将需要ia32-libs。如果您没有该文件,则尝试执行adb命令将导致出现一条奇怪的消息,提示它找不到文件或目录。
rs_atl 2012年



8

我也有这个问题。原来,我无意中从strings.xml文件中,这导致了静默错误。一旦将其添加回去,R类就可以成功生成,并且所有内容都可以备份并运行。


6

尝试使新的XML布局文件名小写。例如,使用my_file.xml代替myFile.xml


+1是!确保它遵循正确的命名约定... [a-z0-9_。]
jasonflaherty 2012年

6

R.java可能无法自动生成的另一个原因是,如果您具有res / drawable-hdpires / drawable-mdpires / drawable-ldpi之类的目录

对于这些目录,1.6 +似乎可以,但是1.5不需要它们。当我删除这些目录时,R.java再次为我开始自动生成。


6

首先检查任何xml布局中是否存在任何错误,如果可以,请先解决。

否则,请从项目中删除junit依赖性,然后重新生成项目。

在此处输入图片说明


5

通常,这是由于创建项目时提供的MinSDK版本号。例:

如果您希望2.1最低,那么Android 2.1实际上是API级别7。

浏览下载并安装的SDK时,您可以看到我在说什么。导航至安装SDK的位置(C:\android-sdk-windows例如),然后打开名为“ platforms”的文件夹。您会看到类似“ android-7”的内容作为文件夹列出,并且如果打开该文件夹,source.properties文件,则在使用文本编辑器打开文件时会向您显示相应的平台版本。

创建项目时,必须选择“构建目标” API,该列表中名为“ API Level”的最后一列显示在填充MinSDK设置时要查找的编号。

这可能是最常见的错误之一,导致R.java未在“项目”>“ gen”>“程序包名称”>“ R.java”下创建文件。


5

删除main.out.xml。我对此并不陌生,尚不知道此文件的用途,但是删除它可以解决问题。


5

只需转到Android顶部菜单列表。单击“ 构建”菜单,在“构建”下,单击“ 重建项目”

在此处输入图片说明


4

我有Android 8的示例,并尝试使用Android 7 SDK。当我关闭项目并重新打开应用程序文件夹并选择使用Android 8 SDK时,它能够找到R文件。希望这可以帮助。


4

就我而言,我有一个错误AndroidManifest.xml。其他人已经说过,您的XML文件必须没有错误,但是我只在res /文件夹中查找。查找并修复尽可能多的错误,该问题可以很好地解决。


这就是我的罪魁祸首。如果尚未构建R.java,则manifest.xml文件中的任何错误都可能导致此问题。
Scott Biggs 2012年

4

如果有人感兴趣(我可能会在这里拯救您的性命),则我有一个错误,R.xml无法解决,在GLS项目上稍有不同。嗯 进入后R.java,我发现没有一个自动生成的类XML.java,(我认为)。

解?它需要在一个新的文件夹resres\xml和一个名为文件default_values.xml 在那里。然后一切都很好。

以防万一您没有该文件,它是:

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android">
</PreferenceScreen>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.