在Eclipse中开发Android:R.java不能重新生成

时间:2010-05-03 09:23:34

标签: android eclipse r.java-file

我发现我的R.java永远不会更新,因此它不包含有关我的新资源的信息,所以我决定删除它并认为Eclipse会生成一个新资源。但这没有发生,我现在没有R.java。我怎样才能重新生成一个?

我正在使用Windows 7.

从其中一条评论中说:“做项目 - > 清理是导致我出现问题的原因。清理删除R.java ......无论出于何种原因插件没有重新生成文件。“

64 个答案:

答案 0 :(得分:302)

我发现这种情况发生在我身上,布局破碎,一切都爆炸了。放松一下,这就像你第一次学习编程C时的那个老错误,你忘记了一个分号并产生了一百个错误。许多恐慌,按下所有按钮,使事情变得更糟。

解决方案

  • 确保R.链接到的任何内容都没有损坏。 修复XML文件中的所有错误。如果ADK中的任何内容被破坏,R将无法重新生成。
  • 如果您以某种方式点击了某些内容并在活动中创建了import android.R将其删除
  • 运行项目 - >清洁即可。这将删除并重新生成R和BuildConfig。
  • 确保项目 - >勾选自动构建。如果没有,请通过Menu -> Project -> Build Project手动构建。
  • 等待几秒钟,以便错误消失。
  • 如果不起作用,请删除/ gen /文件夹
  • 中的所有内容
  • 如果仍然无效,请尝试右键单击您的项目 - > Android工具 - >修复项目属性
  • 检查 *。properties 文件(在应用文件夹的根文件夹中),并确保其中的链接没有损坏。
  • 右键点击项目>属性>的Android 即可。查看页面右侧的Project Build Target和Library部分。您的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 Manager - >工具 - > Android SDK构建工具
  • 确保在更新Android SDK Tools时,您还要更新Android SDK Platform-toolsAndroid ADK Build-tools。如果它们不匹配,构建将无声地失败。
  • 如果找不到问题,右击/ gen / - >从本地历史记录恢复... - > tick R.java - >单击“恢复”。即使它没有解决问题,它也会清除额外的错误,使问题更容易找到。

答案 1 :(得分:175)

This site建议:

  

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

...和...

  

在Eclipse中,在“项目”菜单下,是一个自动构建的选项。   这将有助于您每次修改时都构建R.java文件   制作。 “清洁...”选项也在“项目”下。

This site提出了另一种解决方案。

答案 2 :(得分:40)

我有同样的问题。当我检查出来时,我发现布局下的XML资源名称没有正确的命名约定。它有一些大写字母。因此我将其重命名为使所有字母都小写,并且魔术起作用。

答案 3 :(得分:28)

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

答案 4 :(得分:17)

  

在Eclipse中,只需使用Project - >清理以清理项目。该   R.java将自动(重新)创建。

如果由于某种原因导致无效: 确保您的layout.xml文件不包含错误。 Eclipse似乎有点儿错误:有时它不标记XML中的错误,也不标记包浏览器。在这种情况下:使用“干净”后查看“控制台”或“问题”视图。应该在那里显示所有错误。修复它们并重做干净。

注意:由于缺少R文件,无需修复错误!只需修复XML文件和其他项目错误并使用干净!

答案 5 :(得分:10)

快速修复:

清单中的包名称必须与/src文件夹中的包名称相同,/gen文件夹包将自动复制。

详细观察:

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

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

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

由于清单中的包引用对应于无意义地重新创建并且与/src文件夹中的包不对应的引用,因此提示使用{{1}重命名package = "oldPackage" }}

答案 6 :(得分:9)

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

但是,AndroidManifest.xml引用了这个值,因此:

=&GT;编译错误;
=&GT; R.java没有更新;
=&GT; ID无法识别...

答案 7 :(得分:9)

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

  1. 更新Android SDK工具
  2. 更新Android SDK平台工具
  3. 更新Android SDK构建工具
  4. 将构建工具的路径添加到路径变量中。 (路径最多----你的目录-PATH \ android-sdk \ build-tools)
  5. 这将解决问题。

答案 8 :(得分:8)

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

删除此文件后,尝试从菜单 Project - &gt;清除项目。 清洁

答案 9 :(得分:7)

作为Glaux答案的概括,如果res目录中有任何错误,那么即使您清理并重建,R.java也可能无法生成。首先解决这些错误。

例如:当您添加一个像“myimage-2.jpg”的图像文件时,系统会将此视为错误,因为文件名仅限于字母数字值。添加任何文件后,在“res”目录上刷新,并在控制台窗口中观察输出是否存在任何文件名警告。

答案 10 :(得分:6)

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

答案 11 :(得分:6)

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

  1. 安装或升级ia32-lib:

    sudo apt-get upgrade ia32-libs
    
  2. 检查您是否拥有aapt文件夹的正确权限:

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

    sudo eclipse
    
  4. 运行项目 - &gt;在Eclipse中清理

答案 12 :(得分:5)

查看Eclipse中的 Problems 选项卡总是有帮助的。在我的情况下,我得到一个“ android无法解析目标'android-8'”错误消息,导致R.java无法生成。所以,我将导入的目标更正为我在 default.properties 文件中使用的那个,然后我通过Projects-&gt;清理并执行了清理! R.java是自动生成的!希望它有所帮助!

答案 13 :(得分:4)

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

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

答案 14 :(得分:4)

确保您没有导入

<强> android.R;

答案 15 :(得分:4)

我发现在res文件夹中大写字母任何文件都会产生此错误。这件事发生在我身上,我添加了一个PNG文件并忘了。

答案 16 :(得分:4)

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

答案 17 :(得分:3)

对我来说,我已经将v7 appcompat链接了两次。无论如何,在Eclipse中,右键单击Package Explorer或Navigator中的项目名称,转到Properties,Android,并取消选中Library部分中的任何重复项。您可能需要构建 - &gt;事后清理。

答案 18 :(得分:3)

在阅读了很多帖子和YouTube视频后,我发现由于各种原因,我们每个人都R.java失踪了。

以下是我在Eclipse中修复此问题的方法:

  • gen文件夹手动中创建R.java并保存。
  • 之后转到Project并单击“Clean”

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

  

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

答案 19 :(得分:2)

显然没有最终答案,但这是另一个我在这里没有看到的答案:

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

答案 20 :(得分:2)

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

我在使用Ant编译应用时发现了这一点。

答案 21 :(得分:2)

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

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

如果你发现你只是得到一个默认资源列表,那么只需检查以确保你导入的是application_package_name.R而不是android.R。

答案 22 :(得分:2)

好的,很明显这个问题可能有很多原因。如果您使用的是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 not found

答案 23 :(得分:2)

我有这个问题。我意外删除了这个

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

它开始在我的XML文件和我的Java文件中导致整个项目的构建错误。一旦我重新输入我删除的内容,它就再次起作用了:)

答案 24 :(得分:1)

即使您认为一切正常,当看似没有任何工作正常时,请逐个检查您的XML文件。错误是100%。

如果您使用XML文件的GUI,一切似乎都没问题,但是当您输入文本XML文件时,您会看到内部的混乱。对于这些东西,Eclipse有点麻烦。

同样设置BuildAutomatically,因此在修复错误之后,您将在生成的文件中包含R.java文件....祝你好运!

答案 25 :(得分:1)

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

答案 26 :(得分:1)

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

答案 27 :(得分:1)

这个问题刚刚提出来,不幸的是,这里没有任何建议对我有所帮助。在尝试了很多事情之后,我终于找到了发生的事情并希望它可以帮助别人。

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

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

在附件中,您可以看到已填充的SDK列表。虽然问题正在发生,但它是空的。

我希望这可以帮助别人!

Screen with SDKs correctly showing

答案 28 :(得分:1)

对我来说,当我尝试复制现有res/menu而不是使用wizard创建一个时,会导致此错误。

答案 29 :(得分:1)

如果您使用Maven,所有这些答案都无法解决。我的解决方案是添加

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

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

答案 30 :(得分:1)

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

更改其中一个文件名后,我的R文件再次由 Build Automatically 选项生成。

答案 31 :(得分:1)

对我来说,问题是我的res文件夹中有一个带有大写字母的图像,即Image.png。只需把image.png。

全部为lowerCase,就是这样!

答案 32 :(得分:1)

我想强调粪_爷的答案。

我已经将一个颜色从“listcolor”重命名为“color_list”,但我没有发现其他一个布局正在引用它。所以(突然)我的所有R.string.X和R.layout.X都在'R'上失败了。

最后,我查看了Console窗口并查看了错误。我以为它们都是R没有找到的引用,但实际上,有一个是'找不到'listcolor'。一旦我解决了这个问题,其他错误就会消失。

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

答案 33 :(得分:1)

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

答案 34 :(得分:1)

我遇到了同样的问题。事实证明我有一个循环引用;我更改了布局中引用的字符串名称。

我做了一个干净的重建,并且没有重新创建R.Java文件。我浪费了两个小时试图找出问题所在。我最终将布局项更改为一些临时文本,执行了一个干净的项目并创建了R.Java文件。

答案 35 :(得分:1)

我找到了一个解决方案,为什么R.class在再次制作后不是由Eclipse制作的 - 2清理,构建等等。

问题在于strings.xml:

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

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

默认情况下,这些是在创建项目时由Eclipse创建的。

您肯定要根据自己的要求更改strings.xml。有时您从代码中清除string.xmls这两行:

它在AndroidManifest.xml文件中出现问题:

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

因此它无法与strings.xml通信。

答案 36 :(得分:0)

请勿从strings.xml删除这两行:

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

android:name=".HelloAutoComplete"

android:label="@string/app_name"

答案 37 :(得分:0)

在我的情况下,在无休止地关闭IDE,清理,尝试构建等之后,问题是我的“res”文件夹中的“无标题文件夹”,我可能错误地添加了它。

我希望Eclipse能够以Ant脚本的方式输出这些错误:

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

答案 38 :(得分:0)

如果使用Lint错误检查程序,它将识别&#34; R&#34;的虚假导入。 一旦XML系统得到了错误的结束,一切都会丢失!!!

答案 39 :(得分:0)

首先,检查控制台输出 然后,检查您的xml布局文件名称是否仅为小写 纠正xml错误 检查项目属性 - &gt; Android用于不熟悉的东西

答案 40 :(得分:0)

主要是R.java文件与.xml文件和Java有关。我们知道XML标签,但是Java也是如此,因此我们需要一个唯一的ID来识别标签。

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

答案 41 :(得分:0)

这对我有用,其他答案没有:

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

    完成。希望这会有所帮助。

答案 42 :(得分:0)

在之前的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文件。

我的解决方案是我的特定问题。

我希望它有助于某人...

答案 43 :(得分:0)

你可以尝试一件事。

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

答案 44 :(得分:0)

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

答案 45 :(得分:0)

我在AndroidManifest.xml文件中有一个错误,因此在修复该错误并点击

后,
  

运行->清洁

它产生了R.java

答案 46 :(得分:0)

似乎所有答案都在不断重复,以检查XML中的错误并清理项目。做吧!但是,如果这不起作用怎么办?这对我有用:

如果您构建了一个生成错误R的项目而您将其删除,则它将不会重新生成,因此请删除此项目并创建新项目,确保不检查“自动构建”,然后您可以将文件夹复制到工作区,然后你清理项目或检查“自动构建”,这样它将正确生成你的。

答案 47 :(得分:0)

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

在修复资源文件中的一些问题后(例如,“fill_parent”重命名为“match_parent”)我发现问题出现在清单文件中:我通过试验取消选中“定义&lt; application&gt; ;在AndroidManifest.xml中的标签“复选框,保存更改并且R.java神奇地重新出现。然后我重新检查了该框,保存了文件,并再次重新生成了R.java。

我想我遇到了Eclipse的缺点。

答案 48 :(得分:0)

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

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

通过更改撇号来修复另一种类型的撇号,例如´

答案 49 :(得分:0)

如果你有一个与另一个文件同名的scale9 drawable,那么这也会导致这种情况:

  • img_file.9.png
  • img_file.png

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

答案 50 :(得分:0)

如果您的AndroidManifest.xml文件引用了strings.xml中存储的字符串常量,并且您在strings.xml中重命名了这些字符串,则需要在清单中更改它们一切都是犹太人。

对于引用您更改的常量的任何布局.xml文件,也是如此。不幸的是,Eclipse中的 Markers 视图和 Problems 视图都不会告诉您需要去哪里解决问题 - 只是他们找不到{{1 }}。如其他答案中所述,请查看控制台以查看修复常量引用所需的位置,然后再次清理项目。

答案 51 :(得分:0)

如果所有答案都失败,您可以从命令行运行资源生成: 进入Eclipse项目目录。 然后运行

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

只需使用适当的值更改ANDROIRD_HOME和XXX即可。 您应该获得错误所在的屏幕信息。

答案 52 :(得分:0)

通过更改文件project.properties解决问题:我添加了android-17的目标。

答案 53 :(得分:0)

请参阅博文 Android Developer Tip: Regenerating R.java

我没有继续发现在野外发现的所有可能的问题,我决定利用盯着代码的经过验证的方法。这样做了一段时间后,我在res文件夹下发现了一些红人。他们是我目前的重新设计工作的遗留物,在出现问题之前我将要删除它。果然,只要我点击 Del ,就会自动重新出现这个糟糕的东西。

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

答案 54 :(得分:0)

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

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

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

因此,只要其中一个 XML 文件中出现任何错误/警告,它就会一直发生在我的机器/ Eclipse上。

IntelliJ IDEA 警告没有此问题。

答案 55 :(得分:0)

  1. 确保您的XML文件没有任何问题
  2. 确保您的清单中没有错误
  3. 确保您的字符串没有任何问题
  4. 如果其中任何一个有问题,Eclipse可能无法构建R类...... 解决问题,清洁&amp;重建..

答案 56 :(得分:0)

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

当我处理switch语句和字符串时,这发生在我身上。 Eclipse建议我将项目合规性更改为1.7,这会立即将项目(R.java)作为Android can't use this compliance打破。

<强>控制台:

[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暂时替换它们。当它被修复时,bam再次出现(如果“自动构建”打开)。然后,如果没有错误,我可以更改XML文件。

答案 57 :(得分:0)

我遇到了同样的问题。

检查 Lint警告后,我看到警告The resource R.string.app_name appears to be unused ...,因此我删除了R.string.app_name

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

我希望这对某人有帮助。

答案 58 :(得分:0)

我忘了在declare-styleable标签

上设置name属性
<declare-styleable>
        <attr name="myView" format="reference"></attr>
</declare-styleable>

我用

修复了它
<declare-styleable name="Theme">
        <attr name="myView" format="reference"></attr>
</declare-styleable>

我没有任何错误

答案 59 :(得分:0)

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

答案 60 :(得分:0)

我的AndroidManifest.xml文件出现问题,并且没有生成R.java。

我认为解决方案是检查所有XML文件,无处不在!

答案 61 :(得分:0)

尝试检查project.properties文件。可能是构建路径中的Android JAR文件与那里提到的版本不匹配。

当我改变目标时,它解决了我的问题。

答案 62 :(得分:0)

我有同样的问题。原因是我的一些资源在他们的文件名中有大写字母。我知道这听起来微不足道,但只是将它们改成所有小字母修复它并再次检索我的R.java文件。

希望有所帮助。

答案 63 :(得分:0)

几乎可以肯定的是,插入到genfile中的内容有问题。 Eclipse不够智能,无法显示问题所在,甚至表明存在问题!

考虑您对任何XML或图像内容所做的最后一次编辑 - 并尝试在必要时手动“回滚”您的更改。

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

因此,逐一添加资源,确保一切都“有效”。当某些东西中断时,只需尝试稍微更改它,直到Eclipse接受它为止。

你知道它在genfile出现时有效 - 如果没有问题,它会自动执行。