R无法解析 - Android错误

Mau*_*bon 1056 eclipse android compiler-errors android-sdk-tools android-resources

我刚下载并安装了新的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Eclipse给了我错误

R无法解决

在线

setContentView(R.layout.main);
Run Code Online (Sandbox Code Playgroud)

为什么?

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

Mic*_*evy 836

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

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

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

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

  • 这个经典的bug已经在Eclipse中持续了YEARS,并且从未得到修复.1000多人面临同样的问题. (113认同)
  • Eclipse开发人员,请删除这个$£%&"$&/ bug!Google开发者,请给我一个类似于Xcode for iPhone的£&$"%和Android套件! (52认同)
  • 这种情况也会发生,但是一个Bunged up布局文件也可能导致它. (32认同)
  • @ 2-Stroker:这是一个错误.当我通过日食WIZARD创建一个分支新的andorid项目并且它抱怨'R无法解决'时,它发生在我身上.我不得不注释掉setContentView和getMenuInflater行,然后eclipse生成了R.java,之后我可以取消注释setContentView和getMenuInflator.Abramodj是对的,即使你的'hello world'例子没有编译,环境也会有严重的问题.修复谷歌! (18认同)
  • 谷歌如何不授予eclipse.org资金以获得这样的项目? (5认同)

Luc*_*Luc 389

每次我遇到R的问题都没有生成,甚至消失,这是由于XML布局文件中的一些问题阻止了应用程序的构建.

  • +1为此.我有一个较旧的styles.xml文件,其中parent ="android:WindowTitleBackground",它正在破坏我的构建并阻止生成任何"gen".除了在我第一次打开项目时的控制台窗口中,实际上没有报告错误. (21认同)
  • 确切地说,如果您从另一个项目中复制布局,并且正在获取此布局,则会查找缺少的drawable - 这将立即修复它! (12认同)
  • 是的,很好的解决.当一个人得到这个错误..很多时候所有的布局文件都被标记为有错误.这是因为他们都在寻找R.然而,其中一个可能有一个错误无关的中止生成.在我的情况下,缺少drawable. (5认同)
  • 我瘦了我有同样的问题,有没有办法知道女巫的布局之一? (4认同)
  • 是的,我错过了一个可绘制文件,这阻止了R文件生成.奇怪的是,我在菜单资源中的`<item>`上有一个`android:icon ="@ drawable/XXX"`声明,但是没有红色波形信号表明没有找到可绘制资源XXX.在其他情况下,"@ drawable/YYY"`_was_在未找到YYY时被标记,但在这种情况下不是.由于某些原因. (3认同)

Vas*_*asu 199

每当你得到

R无法解决

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

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

  • 你怎么检查错误?在构建/运行时,我的控制台中什么都没有 (29认同)
  • 如何找出WHICH xml文件导致错误?Eclipse没有标记它们! (4认同)

Dim*_*rov 133

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

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

import android.R;
Run Code Online (Sandbox Code Playgroud)

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

  • 当我使用大写字母命名布局时,我也遇到了类似的问题 (7认同)
  • 谢谢@Dimitar,这解决了我的问题!Eclipse和自动导入功能似乎通过自动添加导入行来获得. (5认同)

Mic*_*ł K 95

另一件可能导致这个问题的事情:

我安装了新的ADT(第22节).它停止创建gen包含的文件夹R.java.解决方案是从Android SDK Manager安装新的Android SDK Build Tools.

解决方法在此处

  • 为我工作,谢谢!它只是强化了我的口头禅:"在开发过程中永远不会更新任何东西". (5认同)

小智 87

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

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

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

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

  • 这看起来像没有参考的剪切和粘贴 (21认同)

Mau*_*bon 85

说的是对的

R是一个自动生成的类,它包含用于标识>资源的常量.如果您没有R.java文件(它将是带有1.5 SDK的Eclipse中的gen/eu.mauriziopz.gps/R.java),我建议关闭并重新打开您的项目或转到> Project> Build all (并按照> Josef的推荐选择"自动构建").如果这不是尝试创建一个新项目,如果重新创建问题而不是>再次发布这里,我们将详细介绍.

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

因此,修改权限并选择"自动构建"解决了这个问题.


Wil*_*ill 39

R是一个自动生成的类,它包含用于标识资源的常量.如果您没有R.java文件(在Eclipse中使用1.5 SDK将是gen/eu.mauriziopz.gps/R.java),我建议您关闭并重新打开项目或转到Project> Build all(和按照Josef的推荐选择"自动构建".如果这不是尝试创建一个新项目,如果问题被重新创建,而不是再次发布,我们将详细介绍.

  • 这对我有用,但我必须首先"项目 - >清洁......". (8认同)

小智 27

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

  • +1但有时它需要3次eclipse重启和7次项目清理.继续尝试;-) #rant (23认同)
  • 将其与触摸(编辑+保存).xml文件(strings.xml ...)混合. (3认同)

gre*_*een 23

值得一试AndroidManifest.xml.该属性package具有正确的值.

那是:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="your.correct.package.name"
   ...
Run Code Online (Sandbox Code Playgroud)

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


Rob*_*Rob 19

将错误添加到与包的根命名空间不同的命名空间也可能导致此错误.

例如,如果com.example.myapp是包的根命名空间,则可以向命名空间添加活动com.example.myapp.activities.

这将产生"R无法解决"的错误.

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

import com.example.myapp.R;
Run Code Online (Sandbox Code Playgroud)


sat*_*ost 19

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

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

编辑:一年后,我找到了另一个原因.我的drawable文件夹中有一个.jpg图像,其名称与.png图像相同.在我的代码中引用此图像必定使程序混淆,并且它给出了"R无法解析"错误.


Sun*_*mar 17

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

项目右键单击属性 - > Java BuildPath选择库并添加android-support.jar,按照这些步骤操作.

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

在此输入图像描述


小智 15

我第一百万次遇到这个问题,并意识到导致它的原因:我在名称中创建了一个带有大写字母的XML文件.您的所有XML文件名/res必须匹配[a-z0-9\\._].


aki*_*kim 14

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

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


Jos*_*ger 12

R是生成的类.如果您使用的是Android开发工具(ADT),则无论何时构建项目都会生成它.您可能已关闭"自动构建".


小智 12

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

还要确保所有图像资源名称都在LOWER CASE中.我的jpg文件名下有一个大写字母,它在我的项目中导致了R未解决的错误.


kpa*_*pax 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

希望这有助于某人.


Naz*_*san 10

您可能需要更新/安装SDK工具.重新启动Android SDK Manager并安装一个新项目:Android SDK Build-tools.one一次删除,修复哪一项适合您.在此输入图像描述


Edu*_*nis 9

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

在此输入图像描述


Guy*_*uck 8

我也有这个问题.事实证明,我无意中从strings.xml文件中删除了"app_name"字符串资源,这导致了一个无声错误.一旦我将其添加回来,R类就会成功生成,所有内容都会重新启动并运行.


小智 6

R.java如果您有res/drawable-hdpi,res/drawable-mdpires/drawable-ldpi等目录,则可能无法自动生成的另一个原因.

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


小智 6

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


Jai*_*ati 6

首先检查是否有任何xml布局中的错误,如果然后再解决它.

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

在此输入图像描述


小智 5

如果有人感兴趣(我可能会在这里救你一命),我有错误,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>
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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

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

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

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


小智 5

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


Gun*_*gar 5

只需转到Android顶级菜单列表.单击Build菜单,在Build下单击Rebuild Project.

在此输入图像描述