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

问题描述 投票:306回答:64

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

我正在使用Windows 7。

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

android eclipse r.java-file
64个回答
176
投票

This site建议:

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

...和...

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

This site建议另一种解决方案。


7
投票

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

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


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

6
投票

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


5
投票

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


4
投票

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


4
投票

确保您没有导入

android.R;


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并单击“Clean”

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

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


3
投票

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


301
投票

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

Solution

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

What to do if R doesn't regenerate

当您的XML文件损坏时,通常会发生这种情况。

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

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 not found


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中不存在的字符串,编译器似乎不会发出警告。检查菜单XML文件中的items是否引用了strings.xml中不存在的任何字符串。通常在android:title


1
投票

对我来说,当我尝试复制现有的res/menu而不是使用wizard创建一个<genDirectory>${project.basedir}/gen</genDirectory> 时,会导致此错误。


1
投票

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

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

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

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


1
投票

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

问题出在strings.xml中:

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

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

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

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

qazxswpoi

所以它无法与strings.xml通信。


40
投票

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


1
投票

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


28
投票

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


17
投票

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

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

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


10
投票

Quick fix:

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

Detailed observation:

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

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

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

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


9
投票

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

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

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


9
投票

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

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

这将解决问题。


8
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.