在Eclipse中为Android开发:R.java不能再生

我发现我的R.java从来没有更新过,所以它不包含关于新资源的信息,所以我决定删除它,并认为Eclipse会生成一个新的资源。但这并没有发生,我现在没有R.java。我怎么能再生一个?

我用的是windows。

来自其中一条评论:“执行项目 -> 清洁是导致我出现问题的原因。删除R.java…不管出于什么原因,插件没有重新生成文件。”

371067 次浏览

这个网站建议:

如果你在项目上运行一个clean,它应该重新生成所有生成的Java文件,即R。

…和…

在Eclipse的Project菜单下,是一个自动构建的选项。 这将帮助您在每次修改时构建R.java文件 制造的。清洁……项目下也有选项。< / p >

这个网站提出了另一种解决方案。

r .类可能突然丢失的一个原因是XML文件中出现错误。例如,当您添加一个名称中带有大写字母的XML文件时,例如myCoolLayout.xml,这是不允许的。或者当您的引用不指向现有文件时,等等。

我有同样的问题,我终于发现了问题:在strings.xml中,我没有保留在创建一个新的Android项目时默认存在的<string name="app_name">program-name</string>行。我以为它只用于程序HelloWord,这是原来的程序。

然而,AndroidManifest.xml引用这个值,因此:

=>编译错误;
=>没有更新R.java;
=> ID不被识别…
< / p >

如果您的R.java没有生成,解决方案之一是删除名为“blabla.out.xml”的布局文件。

删除此文件后,尝试从菜单项目 -> 清洁中清理项目。

我发现了一个解决方案,为什么R.class不被Eclipse重新创建后- 2清洁,构建等。

问题在strings.xml中:

<string name="hello">Hello World, HelloAutoComplete!</string>


<string name="app_name">HelloAutoComplete</string>

这些是Eclipse在创建项目时默认创建的。

当然,您需要根据自己的需求更改strings.xml。有时你会清除字符串。xml这两行代码:

它在AndroidManifest.xml文件中产生了一个问题:

<application android:icon="@drawable/icon"  android:label="@string/app_name">
<activity android:name=".HelloAutoComplete" android:label="@string/app_name">

所以它不能与strings。xml通信。

不要从strings.xml中删除这两行:

android:icon="@drawable/icon" android:label="@string/app_name"


android:name=".HelloAutoComplete"


android:label="@string/app_name"

我也有同样的问题。当我检查它时,我发现布局下的XML资源的名称没有正确的命名约定。上面有一些大写字母。所以我重新命名,使所有字母小写,神奇的工作。

以我为例,在无休止地关闭IDE、清理、尝试构建等之后,问题是我的“res”文件夹中的一个“未命名文件夹”,我可能错误地添加了这个文件夹。

我希望Eclipse能输出这类错误,就像蚂蚁脚本那样:

[null] invalid resource directory name: /Users/gubatron/workspace.android/my-project/res/untitled folder

我改变了我的布局XML文件名,后来发现XML文件(小部件提供程序在这种情况下)仍然引用旧的布局XML不存在,这阻止了R类的自动生成/纠正。

快速修复:

清单中的包名需要与/src文件夹中的包名相同,/gen文件夹中的包将被自动复制。

详细的观察:

观察/gen文件夹中的包的名称。在我的情况下,它与/src文件夹中的不同。

清单中引用的包是/gen文件夹的包。

我试图将一个名为/src文件夹的包添加到/gen文件夹中,看看会发生什么,但这并没有解决问题。然后,我继续删除与/src文件夹的包名不相同的包名。这个名称与/src文件夹不对应的包在我删除它时立即被重新创建。

由于清单中的包引用对应于正在被无意义地重新创建的包,并且与/src文件夹中的包不对应,这提示用package = "srcFolderPackage"重命名package = "oldPackage"

主要是R.java文件与.xml文件和Java。我们知道XML标记,但是Java呢?因此,我们需要有一个唯一的id来标识标记。

这里的R.java文件主要与使用Java获取值的XML文件相关。

概括一下Glaux的回答,如果你在res目录中有任何错误,那么R.java可能不会生成——即使你清理并重新构建。首先解决这些错误。

举个例子:当你添加一个图像文件,比如说“myimage-2.jpg”,系统会认为这是一个错误,因为文件名被限制为字母数字值。在添加任何文件后对“res”目录进行刷新,并观察控制台窗口中的输出是否有文件名警告。

我遇到过几次这样的问题。我发现,如果我没有通过应用程序的名称导入包R,例如,如果我的应用程序有包名称示例。然后我发现我必须导入example.test.R才能访问任何资源。

如果没有导入,那么返回的资源是默认资源,不包括我自己的资源。

也就是说,如果你发现你只是得到一个默认资源的列表,然后检查,以确保你导入application_package_name。R而不是android。

清理项目,关闭Eclipse,重新打开并启动我的项目,最终使我的R.java重新出现…希望能有所帮助

我想强调糞_爺的答案。

我重命名了一个颜色从“listcolor”到“color_list”,但我没有抓住其他布局之一是引用它。所以(突然)我所有的R.string. x和R.layout. x在'R'上都失败了。

最后,我查看了控制台窗口并查看了错误。我认为它们都是R没有被发现的引用,但实际上,其中一个是'listcolor'没有被发现。一旦我修复了这个,其他错误就都消失了。

也许将来的Eclipse插件版本将允许你重命名这些XML文件中的资源,并将其传播到对它的所有引用中。

在Eclipse中,只需使用Project——> clean来清理项目。的 R.java将被自动(重新)创建

你的layout.xml文件不包含错误。Eclipse在这里似乎有点bug:有时它不会在XML或包资源管理器中标记错误。在这种情况下:在使用“clean”后查看“console”或“problems”视图。所有错误都应该显示在那里。修好它们,重新清理。

注意:没有必要修复因为缺少R文件而导致的错误!只是修复XML文件和其他项目错误和使用清洁!

当我试图从SDK源代码构建Support4Demos时,这个问题也发生在我身上。

在修复了资源文件中的一些问题(例如,“fill_parent”重命名为“match_parent”)后,我发现问题在清单文件中:我通过试错检查了“在AndroidManifest.xml中定义一个<应用程序>标签”复选框,保存了更改,R.java神奇地重新出现。然后,我重新选中了该框,保存了该文件,重新生成了R.java。

我想我遇到了Eclipse的一个缺点。

对于这个问题,显然没有一个最终答案,但这里有另一个我还没有看到的答案:

我已经有R.java在(尝试)团队同步后消失,并且在项目中有冲突解决文件(即thingy.xml.minethingy.xml.r35等)。删除它们/解决冲突重新生成R

如果你的AndroidManifest.xml文件引用了你在strings.xml中存储的String常量,并且你在strings.xml中重命名了这些String常量,你需要在清单中更改它们,以使构建的一切都符合要求。

同样的情况也适用于任何引用您所更改的常量的布局.xml文件。不幸的是,Eclipse中的标记视图和问题视图都不会告诉你需要去哪里修复问题——只是他们找不到R.java。正如在其他答案中提到的,查看控制台,看看需要在哪里修复常量引用,然后再次清理项目。

对我来说,问题在于我的res文件夹中有一张大写字母的图像,即image .png。放image。png。

全部小写,就是这样!

看看Eclipse中的问题选项卡总是有帮助的。在我的情况下,我得到了一个“Android无法解析目标“Android -8””错误消息,使R.java无法生成。因此,我将导入的目标更正为我在default.properties文件中使用的目标,然后通过Projects-> clean执行清理,瞧!自动生成R.java !希望能有所帮助!

  1. 确保您的XML文件没有任何问题
  2. 确保你的舱单上没有错误
  3. 确保你的琴弦没有问题
如果其中任何一个有问题,Eclipse可能无法构建R类… 解决问题,清洁&重建. . < / p >

今天下午我第一次遇到这个问题。即使当我创建一个新项目时,也不会生成R.java。我改变了工作场所,一切都恢复正常了。

我也有同样的问题。原来我有一个循环参考;我更改了在布局中引用的字符串名称。

我做了一个清洁和重建和R.Java文件没有被重新创建。我浪费了两个小时想弄清楚是怎么回事。我最终将布局项更改为一些临时文本,做了一个干净的项目,并创建了R.Java文件。

我也有同样的问题。结果发现,原因是我的一些资源的文件名中有大写字母。我知道这听起来很琐碎,但只是把它们都改成小字母,修复了它,重新检索了我的R.java文件。

希望这能有所帮助。

几乎可以肯定插入到genfile中的内容有问题。Eclipse不够聪明,无法显示问题是什么,甚至无法指出存在问题!

考虑一下您对任何XML或图像内容所做的最后一次编辑-并尝试“回滚”您的更改,如果需要可以手动进行。

我发现Eclipse有时出于某种原因不喜欢我的文件名,我必须更改它们。

所以,一个接一个地增加资源,确保一切都“有效”。当出现问题时,只需尝试对其进行一些更改,直到Eclipse接受它。

当genfile出现时,你知道它正在工作-如果没有问题,它会自动这样做。

在我的例子中,R文件没有生成,因为我的res/文件夹中有同名的XML文件(例如,res/layout/filename.xmlres/values/filename.xml)。

在我更改了其中一个文件名后,我的R文件再次由建立自动选项生成。

你可以再试一件事。

进入C:\Program Files (x86)\Android\android-sdk\tools>,运行adb kill-server,然后运行adb start-server。这对我有用,我不知道原因:-)。

确保你没有导入

android.R;

如果res文件夹中有任何错误,R.java将永远不会生成。例如,在可绘制的子文件夹中有两个文件具有相同的名称,一个是icon.png,另一个是icon.html。

您可以在Eclipse控制台日志窗口中看到一些错误,显示“资源条目图标已经定义”。在删除icon.html之后,你可以清空或直接删除gen文件夹。您将发现创建了R.java。

在阅读了许多帖子和YouTube视频后,我发现我们每个人都有R.java缺失的原因不同。

下面是我在Eclipse中修复这个问题的方法:

  • gen文件夹手动中创建R.java并保存。
  • 然后进入项目,点击“清洁”

将显示以下消息,您的文件将被自动重写:

手动修改了R.java !恢复到生成版本!

我有这个问题。我不小心把这个删了

xmlns:tools="http://schemas.android.com/tools"

在我的XML文件和Java文件中,这开始导致整个项目的构建错误。当我重新输入我删除的内容时,它又工作了:)

当您认为一切正常,但似乎没有任何事情可以正常工作时,请逐个检查XML文件。错误就在那里。

如果您使用XML文件的GUI,一切似乎都没问题,但当您输入文本XML文件时,您会看到里面的混乱。Eclipse在这方面有点bug。

也要设置BuildAutomatically,这样在你修复了错误之后,你的R.java文件就会在生成的....中祝你好运! !

我也遇到了这个问题,不幸的是,这里的建议对我没有任何帮助。在尝试了很多事情之后,我终于发现了发生了什么,希望它能帮助到其他人。

昨天我用Android SDK管理器下载了很多新东西。之后,我更新了Android Eclipse插件。今天,在Eclipse“清理”之后,R文件消失并停止生成。

原因是,不知为何,可用sdk的列表(在首选项-> android下)是空的。在再次将其指向正确的目录后,它将重新加载并显示可用的sdk。当我关闭首选项并尝试另一个构建时,一切都恢复正常。

在附件的图片中,你可以看到已经填满的sdk列表。当问题发生时,它是空的。

希望这能对别人有所帮助!

屏幕上正确显示sdk

尝试检查project.properties文件。这可能是你的Android JAR文件在构建路径不匹配的情况下,在那里提到的版本。

它解决了我的问题,因为我改变了我的目标。

我发现在res文件夹中有大写字母任何文件会产生这个错误。这发生在我的PNG文件,我添加和忘记了。

我的AndroidManifest.xml文件有一个问题,没有生成R.java。

我认为解决方案是检查所有的XML文件,到处都是!

很明显,这个问题有很多原因。如果你在64位的linux机器上,你第一次设置ADT,你可能会遇到这个问题,R不能自动生成。检查控制台选项卡,你可能会看到类似的错误:

 'No such file or directory' while attempting to get adb version from '/home/patrick/code/android-sdks/platform-tools/adb'

如果是这种情况,你需要安装ia32-libs,使用如下代码:

 sudo apt-get install ia32-libs

详细信息请参见这里:Android adb未找到

我忘记在可声明样式的标记上设置name属性

<declare-styleable>
<attr name="myView" format="reference"></attr>
</declare-styleable>

我用

<declare-styleable name="Theme">
<attr name="myView" format="reference"></attr>
</declare-styleable>

我没有得到任何错误

我也有同样的问题。

在检查线头警告之后,我看到了警告The resource R.string.app_name appears to be unused…,所以我删除了R.string.app_name

这个资源在AndroidManifest.xml中是必需的,尽管Lint警告我有一个未使用的资源。我在清单中添加了“未使用的资源”,一切恢复正常。

我希望这能对某些人有所帮助。

我不能看到它列在这里,但我遇到了我的R.java被删除的问题,而不是自动重建。

我在处理switch语句和字符串时遇到了这种情况。Eclipse建议我将项目的遵从性更改为1.7,这立即将项目(R.java)破坏为Android 不能使用这种遵从性

控制台:

[2013-03-12 17:26:33 - CrimeAtlas] Android requires compiler compliance level 5.0 or 6.0. Found '1.7' instead. Please use Android Tools > Fix Project Properties.

我通过使用“修复项目属性”修复了这个错误,然后像建议的那样查看日志。我注释掉了文件中的XML,提到用LinearLayout临时替换它们。当它被修复,砰,它重新出现(如果“自动构建”是打开的)。然后,如果没有任何错误,我可以将XML文件更改回来。

我发现这发生在我与一个破碎的布局和一切爆炸。放松,这就像你第一次学习编程时犯的错误一样,你忘记了一个分号,它就会产生100个错误。许多人惊慌失措,按下所有的按钮,使事情变得更糟。

解决方案

  • 确保R.链接到的任何东西都没有损坏。修复XML文件中的所有错误。如果adk中有任何损坏,R将不会重新生成。
  • 如果你以某种方式击中了一些东西,并在你的活动中创建了import android.R删除它.;
  • 项目->清洁运行。这将删除并重新生成R和BuildConfig。
  • 确保Project ->自动生成已勾选。如果不是,通过Menu -> Project -> Build Project手动构建。
  • 等待几秒钟错误消失。
  • 如果它不起作用,删除/gen/文件夹中的所有内容
  • 如果仍然不工作,尝试右击你的项目-> Android工具->修复项目属性
  • 检查你的* . properties文件(在你的app文件夹的根文件夹中),并确保其中的链接没有损坏。
  • 右键单击你的项目>属性> Android。查看页面右侧的项目构建目标和库部分。Build Target应该与AndroidManifest.xml中的目标相匹配。因此,如果它在AndroidManifest中设置为目标17,请确保目标名称为Android 4.2。如果您的库在引用下有一个X,删除并重新添加库,直到有一个绿色的标记。如果您移动了一些文件和文件夹,可能会发生这种情况。

如果R不能再生怎么办

这通常发生在XML文件损坏时。

  • 检查XML文件中的错误,主要是/res/文件夹中的错误
  • 常见的位置是/layout//values/,特别是如果你最近改变了其中一个
  • 检查AndroidManifest.xml。我发现我经常改变一个字符串,而忘记从AndroidManifest.xml改变字符串名称。
  • 检查Android SDK Build-tools是否已经安装。窗口-> Android SDK管理器->工具-> Android SDK构建工具
  • 确保在更新Android SDK Tools时,也更新了Android SDK Platform-toolsAndroid ADK Build-tools。如果它们不匹配,构建会默默地失败。
  • 如果你找不到问题,右键单击/gen/ ->从本地历史恢复…—> tick R.java—>单击“恢复”。即使它不能解决问题,它也会清除额外的错误,使问题更容易被发现。

没有错误三个警告,其中我在我的main.xml中为button文本属性使用了硬编码文本。 就像这样:

<Button
android:id="@+id/scan"
.....
android:text="Scan" />

text属性更改为android:text="@string/scan_device"后,立即生成R.java。

因此,每当其中一个XML文件中出现任何错误/警告时,它总是发生在我的机器/Eclipse上。

不过,IntelliJ IDEA对于警告没有这个问题。

参见博客文章Android开发者提示:再生R.java .java

我没有继续发现在野外发现的所有可以想象的问题,而是决定利用经过验证的方法盯着代码。这样做了一段时间后,我在res文件夹下发现了一些红色的家伙。它们是我当前重新设计工作的剩余部分,我打算在事情出错之前删除它们。果然,当我在他们上击中时,该死的R东西自动神奇地重新出现。

语句中:从项目中删除所有不需要的文件,从清单文件中删除不需要的代码。

通过更改文件项目来解决问题。属性:我添加了一个android-17目标。

还要确保您拥有最新版本的ADT插件,并打开Android SDK管理器将所有SDK工具更新到最新版本。还要检查Eclipse本身中的更新。不匹配的版本给我带来了问题。

如果全部应答失败,可以从命令行执行资源生成: 进入Eclipse项目目录。 然后运行< / p >

aapt.exe package -f -v -m -S res -J src -M AndroidManifest.xml -I ANDROID_HOME/platforms/android-XXX/android.jar

只需将ANDROIRD_HOME和XXX更改为适当的值。 你应该在屏幕上得到错误所在的信息

Android在SDK构建工具ADT 22中添加了构建机制。您只需要执行以下步骤。

  1. 更新Android SDK工具
  2. 更新Android SDK平台工具
  3. 更新Android SDK构建工具
  4. 将构建工具的路径添加到path变量中。(路径到---- YOUR DIRECTORY-PATH\android-sdk\build-tools)

这将解决问题。

同样会导致这种情况的是,如果你有一个scale9可绘制文件与另一个文件具有相同的名称:

  • img_file.9.png
  • img_file.png

只需删除其中一个文件就可以修复它。

还有另一种情况发生在我身上。当我在strings.xml资源文件中添加了一个撇号的字符串时,就像

<string name="Today">Returns Today’s date</string>

它是通过将撇号更改为另一种类型的撇号来修复的,比如´

如果你的操作系统是Ubuntu,我可以提供一些建议:

  1. 安装或升级ia32-lib:

    sudo apt-get upgrade ia32-libs
    
  2. Check if you have the right permission on the aapt folder:

    cd ANDROID/adt-bundle-linux-x86_64-20130522/sdk/build-tools/android-4.2.2
    chmod 777 aapt
    
  3. Start Eclipse:

    sudo eclipse
    
  4. Run Project -> Clean in Eclipse

似乎这里的所有答案都在重复检查XML中的错误并清理您的项目。做到!但如果这行不通呢?以下是对我有效的方法:

如果你创建的项目生成了一个错误的R,你删除了它,它不会重新生成,所以删除这个项目并创建一个新的项目,确保你没有勾选“自动生成”,然后你可以将你的文件夹复制到工作区,然后清理项目或勾选“自动生成”,这样它就会正确地生成你的R。

在我的情况下,我检查了所有以前的解决方案,但没有生成r。我只是从菜单文件夹中删除了我的main.xml文件,并重新生成它。我不知道为什么,但它现在对我有用……

我的问题是appcompat与我的项目不在同一个目录中。

我在用蚂蚁编译我的应用程序时发现了这一点。

这是我发现的又一个答案,之前的30个答案都没用。

我在strings.xml文件中发现了我的问题,尽管它非常非常奇怪。 我把我的应用精简到最低限度,这是唯一发现的东西。我甚至可以在一个全新的空应用上复制它

在strings.xml文件中,它编译(并生成R.java文件):

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Test_My_App</string>
<string name="action_settings">Settings</string>
<string name="hello_world">Hello world!</string>
</resources>

然而,这不是:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello_world">Hello world</string>
<string name="app_name">My_App</string>
<string name="action_refresh">Refresh</string>
</resources>
“有趣”的事情是我几天前删除了action_settings。从那以后,我已经清理了我的代码,再也没有出现过任何问题。今天,我在strings.xml文件中添加了额外的字符串,在清理代码后,车轮脱落了。 此外,如果我重新排列相同的3个字符串行,并清理我的代码,R.java文件不会重新生成

这是我解决问题的方法。

我希望它能帮助到一些人……

以下是对我有效而其他答案无效的答案:

  1. 创建 Android应用程序项目
  2. 复制所有文件和文件夹从旧目录(除了/gen)和替换!
  3. 刷新项目根在包资源管理器。
  4. 如果仍然存在,再次清洁 !

    完成了。

我的问题在一个菜单文件。 如果菜单文件中引用了strings.xml中不存在的字符串,编译器似乎不会警告你。检查菜单XML文件中的__abc1是否引用了任何在strings.xml中不存在的字符串。通常在android:title中。

对我来说,我已经链接了v7 appcompat两次。无论如何,在Eclipse中,右键单击包资源管理器或导航器中的项目名称,转到属性,Android,并取消选中库部分中的任何重复项。你可能需要构建->清洁之后。

如果你使用Lint错误检查器,它将识别虚假的“R”导入。 一旦XML系统抓住了错误的一端,一切都完了!!< / p >

对我来说,这个错误是在我试图复制一个现有的res/menu而不是用wizard创建一个时引起的。

如果使用Maven,所有这些答案都不能工作。我的解决方案是

<genDirectory>${project.basedir}/gen</genDirectory>

到android-maven-plugin的配置部分。

xml文件中100%有错误,但是XML验证不会显示错误。这就是为什么需要首先检查XML文件的原因!

首先,检查Console输出。
然后,检查xml布局文件名称是否只使用小写。
纠正xml错误。
检查项目属性-> Android的一些不熟悉的东西

我在AndroidManifest.xml文件中有一个错误,所以在修复这个错误后,点击

运行- >清洁

它产生了R.java