在Eclipse中为Android开发:R.java无法重新生成


309

我发现我的R.java从未更新过,因此它不包含有关新资源的信息,因此我决定删除它,并认为Eclipse会生成一个新资源。但这没有发生,而且我现在没有R.java。如何重新生成一个?

我正在使用Windows 7。

从其中一项评论中:“执行项目 -> 清理对我造成了问题。清理会删除R.java ...,并且无论出于何种原因,插件都不会重新生成文件。”


清洁时我的解决方案不起作用:我需要在SDK Manager中下载Build Tools,然后重新启动系统。我有ADT 22.3.0。
莫拉德尼贾德(Moradnejad)2015年

Answers:


177

该网站建议:

如果在项目上运行干净,它将重新生成所有生成的Java文件,即R。

...和...

在Eclipse中,“项目”菜单下的选项自动生成。这将有助于您在每次进行修改时构建R.java文件。“清洁...”选项也位于“项目”下。

该站点提出了另一种解决方案。


1
谁会想到的,谢谢+1在这里,我的布局出现问题,因此未创建R.Java。伟大的抬头!干杯。

101
对我造成问题的原因是执行Project-> Clean。清理会删除R.java ...,并且无论出于何种原因,插件都不会重新生成文件。
塞林2012年

7
当我链接到需要与安装的Android版本不同的Android支持API的库时,会弹出此窗口。依赖项不起作用,并且此后也没有生成我的R。正如其他人所说,它显示在错误日志中,因此请在此处检查。
mikebabcock 2012年

1
就我而言,清理项目只是删除 R.java,而不是重新生成它。stackoverflow.com/questions/13065425/...
RobinJ

96
如果res目录中有一些错误,则R.java不会重新生成。消除了错误->在我的情况下解决了问题:)
JavaRunner 2012年

300

我发现这种情况发生在我的布局破裂,一切都炸毁了。放松,这就像是您第一次学习C语言时忘记了一个分号并产生一百个错误的古老错误。许多人惊慌失措,按下所有按钮,使情况变得更糟。

  • 确保R.链接的所有内容均未损坏。修复XML文件中的所有错误。如果ADK中的任何内容损坏,R将不会重新生成。
  • 如果您以某种方式击中某个东西并import android.R在您的活动中创建了请将其删除
  • 运行Project-> Clean。这将删除并重新生成R和BuildConfig。
  • 确保选中项目->自动构建。如果不是,请通过手动构建Menu -> Project -> Build Project
  • 等待几秒钟,错误消失。
  • 如果不起作用,请删除/ gen /文件夹中的所有内容
  • 如果仍然无法使用,请尝试右键单击您的项目-> Android工具->修复项目属性
  • 检查您的* .properties文件(在您的应用程序文件夹的根文件夹中),并确保其中的链接没有损坏。
  • 右键单击您的项目>属性> Android。查看页面右侧的“项目构建目标”和“库”部分。您的构建目标应与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 /->从本地历史记录还原...->勾选R.java->单击还原。即使无法解决问题,它也会清除额外的错误,使问题更容易找到。

21
这应该是最佳答案!
john.k.doe 2013年

6
确实,这使我意识到我的环境仍然需要对工具进行更新。
woodleg.as 2013年

11
窗口-> Android SDK管理器->工具-> Android SDK Build-tools这是我的解决方案,已批准

1
我读了几十个答案,只有这个答案提到了检查SDK Build-tools。我盲目地让eclipse下载并安装了我所有的Android工具。它完全错过了那部分。
Justin Aquadro 2014年

1
检查控制台,可能会给您提供需要修复的详细错误,然后可以进行构建。就我而言
很有帮助

40

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


2
tnx ...让我觉得我可以在布局名称中使用大写字母
凯文

也为我工作:控制台报告此:[2010-09-22 16:19:40-myproject] res \ drawable-ldpi \ downloadNow.png:无效的文件名:必须仅包含[a-z0-9_。]
sami

1
谢谢,这是我的问题。我在布局文件夹中有一个带有大写字母的.xml文件,并且我的整个R.java文件都丢失了/由于该原因而不会生成。唯一了解这一点的方法是认识到命名约定不允许使用大写字母。没有错误产生。
Lemmings 2012年

1
在命名资源文件或属性时,请尝试像在Java中为变量命名一样命名。R.class将资源(即id,drawable,xml文件名)与公共静态最终常量放在一起,因此放置“-”,“特殊字符”将导致停止生成R,因为这些符号可能具有其他算术方式。
IronBlossom,2012年

1
是的,这是我的问题。我的res / xml中的一个文件引用了一个不存在的布局文件,这显然导致未生成R.java,因此,如果我运行Clean,则会导致缺少R.java,从而导致数百个导入错误...
塞林(Cerin)2012年

28

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


17

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

如果由于某些原因不起作用: 确保您的layout.xml文件不包含错误。Eclipse在这里似乎有点漏洞:有时它没有标记XML或包资源管理器中的错误。在这种情况下:使用“干净”后查看“控制台”或“问题”视图。所有错误都应显示在此处。修复它们并重做一次清洁。

注意:不必修复由于缺少R文件而导致的错误!只需修复XML文件和其他项目错误并使用clean!


确保您的资源文件命名约定正确。@Masi感谢您提示清理后发现“控制台”中的错误。这帮助了我。
巴拉斯·布山

10

快速解决:

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

详细观察:

观察/gen文件夹中的软件包名称。就我而言,它不同于/src文件夹中的文件夹。

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

我试图将一个带有/src文件夹名称的软件包添加到该/gen文件夹中,以便查看会发生什么,但这并不能解决问题。然后,我继续删除与/src文件夹的软件包名称不同的软件包名称。/src我删除该文件夹后,便立即重新创建了名称与该文件夹不对应的软件包。

由于在清单对应于一个正被无谓重新创建,并且不与包中对应的包参考/src文件夹,这提示重命名package = "oldPackage"package = "srcFolderPackage"


9

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

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

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


string.xml中的行是“ <string name =“ app_name”>程序名称</ string>”。抱歉,我的帖子有问题。
Glaux

9

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

  1. 更新Android SDK工具
  2. 更新Android SDK平台工具
  3. 更新Android SDK生成工具
  4. 将构建工具的路径添加到path变量。(路径到----您的目录路径\ android-sdk \ build-tools)

这样可以解决问题。


我的答案是唯一与这个问题有关的。仍然只有3票。奇怪!
印度先生

8

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

删除此文件后,尝试从菜单Project- > Clean清洁项目


7

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

例如:当添加一个名为“ myimage-2.jpg”的图像文件时,由于文件名限制为字母数字值,系统将认为此错误。添加任何文件后,在“ res”目录上进行刷新,并在控制台窗口中查看输出,以获取任何文件名警告。


究竟!当我在strings.xml中重命名字符串时,偶尔会发生这种情况。这可以在我的布局文件中创建悬空参考。并且那抑制了R.java的产生。太糟糕了,无法重构XML ID。
Scott Biggs 2012年

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. 在Eclipse中运行Project-> Clean


优秀的。这也使adb工作。只是提醒我,我应该在重新安装ubuntu时安装它。

对于Debian amd64,同样的解决方案是正确的
MarkusPeröbner2013年

这个答案stackoverflow.com/questions/19523502/…提供了更新的说明,ia32-libs在Elementary
Singagirl

6

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


5

在Eclipse中查看“ 问题”选项卡总是有帮助的。以我为例,我收到了“ android无法解析目标'android-8' ”错误消息,该消息阻止了R.java的生成。因此,我将导入的目标更正为default.properties文件中使用的目标,然后通过Projects-> Clean and voila执行了清除操作!R.java是自动生成的!希望能帮助到你!


感谢您指向问题标签。我是android和eclipse的新手,所以以前没有使用过它而感到沮丧。遇到此错误时,它是第一要看的地方。
Maadinsh



4

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

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


4

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


3

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

这是我在Eclipse中解决此问题的方法:

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

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

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


1
Anup ..我做到了///但是只有在清理它时才能将其取出...问题仍然对我来说还没有解决!
ejjyrex

3

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


2

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

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


2

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

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

这开始在我的XML文件和Java文件中的整个项目中引起构建错误。重新输入删除的内容后,它又可以正常工作了:)


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


2

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

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

这样说来,如果您发现只获取默认资源列表,则只需检查以确保您要导入的是application_package_name.R而不是android.R。


2

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

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


1

另外,请确保您拥有最新版本的ADT插件,然后打开Android SDK管理器以将所有SDK工具更新为最新版本。还要在Eclipse本身中检查更新。版本不匹配对我造成了问题。


1

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


1

对我来说,此错误是由于我尝试复制现有内容res/menu而不是使用创建一个错误而引起的wizard


1

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

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

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


1

我找到了一个解决方案,为什么在重新创建Eclipse之后不创建R.class-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通信。


1

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

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.