【问题标题】:R cannot be resolved - Android errorR 无法解决 - Android 错误
【发布时间】:2010-10-27 11:12:34
【问题描述】:

我刚刚下载并安装了新的 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:我在res/layout/ 下确实有一个名为main.xml 的XML 文件。

【问题讨论】:

  • 对于那些仍然遇到 Eclipse 无法更新/生成 R.java 问题的人。一个可能的解决方案是创建一个虚拟 xml 并删除该 xml。就我而言,这是解决方案
  • 老实说,这听起来很愚蠢(确实如此),但修改 AndroidManifest.xml,然后撤消该编辑,然后保存文件对我有用。如果我在那之后清理了这个项目,它又坏了。一直以来,我都认为 Xcode 是唯一有这些神秘错误的 IDE。
  • 您是否尝试右键单击项目 -> Android 工具 -> 修复项目设置?
  • 请检查你的XMl布局文件,如果xml中有错误,你不能生成R.java,错误也是在bulid和clean之后出现的。
  • 提示:当我将 IDE 从 Eclipse 切换到 Android Studio 时,我不再发生这种情况了。

标签: android eclipse compiler-errors android-resources android-sdk-tools


【解决方案1】:

在跟踪这个问题之后,我在 Android 文档中找到了这个注释:

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

*注意:Eclipse 有时喜欢在 使用资源的文件的顶部, 尤其是当你要求 Eclipse 排序或以其他方式管理进口。这 会导致你的 make 坏掉。看 针对这些错误的导入 语句并删除它们。*

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

【讨论】:

  • 这种情况也会发生,但也可能是布局文件损坏。
  • 这个经典的 bug 已经在 Eclipse 中存在了很多年,并且从未得到修复。成千上万的人面临同样的问题。
  • Eclipse 开发者,请移除这个 $£%&"$&/ 错误!Google 开发者,请给我一个 £$&$"%& 类似于 iPhone 的 Xcode 的 Android 套件!
  • @2-Stroker :这是一个错误。当我通过 eclipse WIZARD 创建一个新的分支新的 andorid 项目时,它发生在我身上,它抱怨“R 无法解决”。我不得不注释掉 setContentView 和 getMenuInflater 行,然后 Eclipse 生成了 R.java,之后我可以取消注释 setContentView 和 getMenuInflator。 Abramodj 是对的,即使您的“hello world”示例无法编译,环境也会出现严重问题。谷歌修复它!
  • Google 如何不授予 eclipse.org 资金来修复此类项目?
【解决方案2】:

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

【讨论】:

  • 为此 +1。我有一个带有 parent="android:WindowTitleBackground" 的旧 styles.xml 文件,它破坏了我的构建并阻止生成任何“gen”。除了我第一次打开项目时的控制台窗口外,实际上并没有报告该错误。
  • 没错,如果您从另一个项目中复制了布局,并且得到了这个,则寻找丢失的可绘制对象 - 这将立即修复它!
  • 我想我也有同样的问题,有没有办法知道其中一种布局?
  • 是的,我错过了一个可绘制文件,这甚至阻止了 R 文件的生成。奇怪的是,我在菜单资源中的<item> 上有一个android:icon="@drawable/XXX" 声明,但没有红色曲线表明未找到可绘制资源XXX。在其他情况下,"@drawable/YYY" 在未找到 YYY 时被标记,但在这种情况下不会。出于某种原因。
  • 是的,很好的解决方案。当一个人得到这个错误..很多时候所有的布局文件都被标记为有错误..这是因为他们都在寻找R。然而,其中一个可能有一个不相关的错误导致构建中止。就我而言,缺少可绘制对象。
【解决方案3】:

只要你得到

R 无法解析

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

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

【讨论】:

  • 我在使用示例 ApiDemos 时遇到了这个问题。 strings.xml 文件中缺少一些资源。 XML 错误列在 Eclipse 的控制台中。
  • 谢谢!这是我的问题,我的布局出错了,但没有任何消息。
  • 如何检查错误?构建/运行时,我的控制台中什么也没有
  • 如何找出导致错误的 xml 文件? Eclipse 不会标记它们!
  • 我在 hdpi 文件夹中有 2 张同名的图片(1 张使用 png 和 1 张使用 jpg 格式)删除其中 1 张解决了问题
【解决方案4】:

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

看看你的进口。很可能是这条线:

import android.R;

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

【讨论】:

  • 感谢@Dimitar,解决了我的问题! Eclipse 和自动导入功能似乎通过自动添加该导入行来吸引我。
  • 我在使用大写字母命名布局时也遇到过类似的问题
  • 这是人们得到“R not found”的 5 大原因之一。我已经编译了一个问题/解决方案页面,其中包含以下链接中显示主要 5 的图像。真心希望这份清单对人们有所帮助,因为这是一个常见问题。 spragucm.wordpress.com/2014/05/13/…
  • 删除 R 后,在某些地方 R 被用作类并且现在给出错误,如何解决?
【解决方案5】:

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

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

找到解决方案here

【讨论】:

  • 我自己也是。当我选择 SDK 管理器时,你瞧,构建工具会自动检查安装,并注明它没有安装!什么给了???
  • 我遇到了同样的问题。我很高兴你分享了这个。两天后,我从自己的代码中查看了错误。我对谷歌很失望,因为这个错误信息一直很难解决,但它是由自己的错误引起的,尽管工具没有正确报告是什么原因造成的。我对我的项目进行了相同的更改,所以我认为这又是我的错。
  • 为我工作,谢谢!它只是强化了我的口头禅:“在开发过程中永远不要更新任何东西”。
  • 我一直在寻找答案,但对我没有任何帮助。我认为这是一个eclipse或sdk问题。正如你所说,我只是删除了 prev eclipse 包并重新安装它。然后它开始工作了。你的回答得到了帮助
  • 这就是我的问题!浪费了一天时间尝试修复 R 错误、添加/删除引用以及尝试其他选项。我的是一个全新的 ADT 设置,以及一个新的 android 项目创建,但仍然出现错误。最终结果是,我必须安装 Android SDK 工具、Android SDK 平台工具和 SDK 构建工具的所有可用更新:p
【解决方案6】:

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

当您更改您的 AndroidManifest.xml 文件中的包名称。它使用你的安卓 包名在“gen”目录下创建一个子目录 它存储R.java 文件。

Eclipse 可能在执行 clean 时遇到问题,因为它对以下内容感到困惑 R.java 文件在您更改 Android 包时所在的位置 姓名。您可以重命名gen 下的子目录以匹配您的 新的包名,或者你可以将你的包名改回旧的 姓名。进行清理,然后将包名称更改为新名称 你要。如果您阻止 Eclipse 尝试构建,这将最有效 在更改包名称时。在“项目”菜单下 取消选中“自动构建”选项以及当 “清理...”对话框询问是否应该“立即开始构建” 取消选中该框,这样它就不会在您更改 包裹名字。更改名称后,您可以将“Build 自动”重新开启。

注意如果你的AndroidManifest.xml文件包名不匹配 你的 Java 包名,Eclipse 最终会自动添加一个 “导入.R;”在你所有的 .java 文件中加入 对 R 有任何引用。如果您更改 AndroidManifest.xml 包名,有时 Eclipse 不会更新所有这些添加的 进口。如果发生这种情况,请使用 Eclipse 重构 (ALT + Shift + R) 将其中一个 Java 文件中的导入语句更改为 您的新 AndroidManifest.xml 包名称。最好这样做 当您禁用“自动构建”时。

【讨论】:

  • 这看起来像是没有参考的剪切和粘贴
  • 文件的多次复制/粘贴和名称重构会导致相同的问题,尽管所有文件名和内容都正常。清理项目,手动删除 R.java 和所有导入头,然后重建这些导入头(仍然使用 CTRL+SHIFT+O)工作正常。
  • 这对我有用。我已经更改了清单中的包名称。为了添加正确的导入,我必须在引用生成的 R 类值的类中使用 ctrl-shift-O。
  • 这为我解决了问题。过去也看到过导入问题,但这次的问题是清单中的包名与 src 文件夹中的包名不匹配。
  • 我的应用程序中有两个活动。一个与生成 R 的包名称不同。我不得不使用 import com.example.main.package.name.R; 之类的东西手动导入 R
【解决方案7】:

威尔说的是对的

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>。然后在aaptaidldexdumpdx 等文件上设置chmod a+xANDROID_SDK_ROOT 应该在您的环境中设置,它将指向您的 SDK 安装。例如,/opt/android-sdk。设置ANDROID_SDK_ROOTANDROID_NDK_ROOT 很重要,因为Android 工具在内部使用它们。请参阅 NDK 用户列表中的Recommended NDK Directory?
  • @Lewis.. 我已经选择了“自动构建”,但错误仍然存​​在。
【解决方案8】:

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

【讨论】:

  • 这对我有用,但我必须先“项目 -> 清理...”。
【解决方案9】:

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

【讨论】:

  • +1 但有时它需要 3 次 Eclipse 重启和 7 次项目清理。继续尝试 ;-) #rant
  • 将其与触摸(编辑+保存).xml 文件(strings.xml ...)混合。
【解决方案10】:

值得关注AndroidManifest.xmlpackage 属性的值正确。

即:

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

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

【讨论】:

  • 我原来的包名是com.xxxxdroid.router。我创建了我的应用程序 com.xxxxdroid2.router 的新版本。完成此操作后,我必须更新 AndroidManifest.xml 中的包名称,但只是在我开始复制和粘贴旧类之后很久。谢谢指点!
  • 这解决了我的问题,我在一个 xml 文件中工作,很高兴我记得是哪一个,我有很多...谢谢...
【解决方案11】:

此错误也可能是由于将活动添加到与您的包的根命名空间不同的命名空间。

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

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

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

import com.example.myapp.R;

【讨论】:

  • 这对我有帮助,我已将我的活动移到根目录下的包中,将根包添加为导入 (import com.example.myapp.R;) 解决了问题。
【解决方案12】:

除了前面答案中的好建议外,请确保您的 Android 目标已设置:

  1. 右键单击您的项目
  2. 选择属性
  3. 在左侧菜单中选择 Android
  4. 勾选相应项目构建目标旁边的框。
  5. 点击应用和确定

编辑:一年后我找到了另一个原因。我的可绘制文件夹中有一个与 .png 图像同名的 .jpg 图像。在我的代码中引用此图像一定会混淆程序,并给出“R 无法解析”错误。

【讨论】:

    【解决方案13】:

    确保您安装了 Android 构建工具表单 sdk manager

    项目右键属性-> Java BuildPath 选择Library 并按照这些步骤添加android-support.jar。

    转到 Project->Properties->Java Build Path,然后选择 Order and export 选项卡。选中 android-support .jar 库并将其置于列表顶部。并清理和重建..它适用于大多数情况

    【讨论】:

      【解决方案14】:

      我刚刚第 100 万次遇到这个问题并意识到是什么原因造成的:我创建了一个名称中包含大写字母的 XML 文件。 /res 中的所有 XML 文件名必须与 [a-z0-9\\._] 匹配。

      【讨论】:

      • 另外,我刚刚注意到堆栈溢出要求我们转义所有反斜杠。
      【解决方案15】:

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

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

      【讨论】:

      • 是的。有时,如果它说您的 XML 中没有问题(红色波浪线或黄色感叹号),请删除有问题的行,保存 XML 文件,重新粘贴该行,然后再次保存。如果您没有自动构建,请在此之后再次构建,它可能会起作用。 Eclipse 有时很愚蠢。 :)
      • 尽管上面列出了其他答案,但这个答案对我来说是正确的。当我去编译一些示例代码时,我最初收到“找不到 APK”的消息,然后做了一个 Clean,它产生了大量的“R 无法解决”错误,然后只是打开 .xml 文件并手动保存错误被清除了,我可以编译了。
      • 确实如此:清理项目后,R.java 消失了 - 编辑和保存 strings.xml 解决了问题。
      【解决方案16】:

      检查 XML 文件名。确保它们都是小写的。

      还要确保任何图像资源名称也都使用小写。我的 jpg 文件名中有一个大写字母,它在我的项目中导致了 R 未解决的错误。

      【讨论】:

      • +1 这是我的问题。您必须将图像命名为:eicon.png 而不是 eIcon.png。我通过查看控制台发现了错误。它在文件上返回错误,文件名无效:...
      【解决方案17】:

      R 是一个生成的类。如果您使用Android Development Tools (ADT),它会在项目构建时生成。您可能已关闭“自动构建”。

      【讨论】:

        【解决方案18】:

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

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

        在这篇文章中检查 #4 和 #5: http://crunchbang.org/forums/viewtopic.php?pid=277883#p277883

        希望这对某人有所帮助。

        【讨论】:

        • 值得注意的是,如果您安装的是 64 位 Linux,您将需要 ia32-libs。如果你没有它,尝试执行 adb 命令会导致一条奇怪的消息,说它找不到文件或目录。
        【解决方案19】:

        您可能需要更新/安装 SDK 工具。重新启动Android SDK Manager并安装一个新项目:Android SDK Build-tools。一个一个删除,修复哪个适合你。

        【讨论】:

          【解决方案20】:

          我也有这个问题。原来,我无意中从strings.xml 文件中删除了“app_name”字符串资源,导致出现静默错误。一旦我添加回来,R 类就成功生成了,一切都恢复正常运行了。

          【讨论】:

            【解决方案21】:

            您可能需要更新 SDK 工具。再次重新启动 Android SDK Manager 并安装一个新项目:Android SDK Build-tools。

            【讨论】:

              【解决方案22】:

              尝试使您的新 XML 布局文件名小写。例如,使用my_file.xml 而不是myFile.xml

              【讨论】:

              • +1 是的!确保它遵循正确的命名约定... [a-z0-9_.]
              【解决方案23】:

              R.java 可能无法自动生成的另一个原因是您是否有像 res/drawable-hdpires/drawable-mdpires 这样的目录/drawable-ldpi

              1.6+ 似乎对这些目​​录没问题,但 1.5 不想要它们。当我删除这些目录时,R.java 再次开始为我自动生成。

              【讨论】:

                【解决方案24】:

                这通常是因为您在创建项目时提供的 MinSDK 版本号。示例:

                如果你希望 2.1 是最低的,Android 2.1 实际上是 API Level 7。

                当您浏览您下载并安装的 SDK 时,您可以看到我在说什么。导航到您安装 SDK 的位置(例如C:\android-sdk-windows)并打开名为“platforms”的文件夹。你会看到类似“android-7”的东西被列为一个文件夹,如果你打开有一个source.properties文件,当你用文本编辑器打开时,会显示相应的平台版本。

                当您创建项目并且必须选择“构建目标”API 时,该列表中名为“API 级别”的最后一列会显示您在填充 MinSDK 设置时要查找的数字。

                这可能是导致 R.java 文件未在 Project > gen > packagename > R.java 下创建的最常见错误之一。

                【讨论】:

                  【解决方案25】:

                  删除main.out.xml。我是新手,还不知道这个文件的用途,但删除它可以解决问题。

                  【讨论】:

                    【解决方案26】:

                    只需转到 Android 顶部菜单列表。点击Build菜单,在Build下点击Rebuild Project

                    【讨论】:

                      【解决方案27】:

                      首先检查xml布局是否有错误,如果有则先解决。

                      否则从项目中删除junit依赖并重建项目。

                      【讨论】:

                        【解决方案28】:

                        如果有人感兴趣(我可能会在这里救你的命),我遇到了错误,R.xml 无法解决,在 GLS 项目中略有不同。嗯。在查看R.java 之后,我发现一个自动生成的类XML.java,(我认为)不存在。

                        解决方案?它需要res 中的一个新文件夹:res\xml 和一个名为default_values.xml 的文件 在那里。然后一切正常。

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

                        <?xml version="1.0" encoding="utf-8"?>
                        <PreferenceScreen
                            xmlns:android="http://schemas.android.com/apk/res/android">
                        </PreferenceScreen>
                        

                        【讨论】:

                          【解决方案29】:

                          所以我在切换构建目标时多次遇到这个问题。通常做一个项目>>清洁对我有用。然而,这最后一次并没有。最后,我尝试打开位于根项目文件夹下的 default.properties 文件。我收到一条错误消息,指出它与文件系统不同步。我实际上删除了它并复制了一个允许 Eclipse 重建我的 R 文件的同事版本。我将在下面粘贴它的样子。它被命名为“default.properties”。

                          # This file is automatically generated by Android Tools.
                          # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
                          # 
                          # This file must be checked in Version Control Systems.
                          # 
                          # To customize properties used by the Ant build system use,
                          # "build.properties", and override values to adapt the script to your
                          # project structure.
                          
                          # Indicates whether an apk should be generated for each density.
                          split.density=false
                          # Project target.
                          target=android-3
                          

                          【讨论】:

                            【解决方案30】:

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

                            【讨论】: