安卓 - 如何重新生成R类?

78
26个回答

47
另外一个stackoverflow问题中,有人回答说:你必须消除XML文件中的警告和错误(语法和链接)。此外还需要进行一次清理/构建项目。
项目->“清理”,并选择构建项目的选项。

10
警告:执行清理操作很可能会删除您的 R 类。由于代码中到处都引用了它,而找不到它则会导致错误。而且由于不能在有错误的情况下进行编译,因此也不会生成新的 R 类!请注意保留 R 类或谨慎执行清理操作。 - omni
3
你需要删除R类。你不必修复所有的错误,只需修复与R相关的错误即可。例如,如果在名为activity_page.xml(R.layout.activity_page)的布局中忘记关闭一个标签,R将无法重新生成。 - Muz
如果所有的尝试都失败了,打开控制台并运行:ant instrument。 - Steven

32

对于我来说,当布局出现问题并且一切都崩溃时,我也会发现这种情况。放轻松,这就像你第一次学习编程时忘记一个分号而生成了一百个错误的旧错误。许多人惊慌失措,按下所有按钮,使事情变得更糟。

解决方案

  • 确保任何 R. 链接到的内容都不是错误的。如果它是错误的,ADK 可能无法重新生成 R。请修复 XML 文件中的所有错误
  • 如果在活动中某些情况下你创建了 import android.R请删除它
  • 运行 Project -> Clean。这将删除并重新生成 R 和 BuildConfig。
  • 确保已选中 Project -> Build Automatically
  • 等待几秒钟,直到错误消失。
  • 如果它不起作用,则删除 /gen/ 文件夹中的所有内容
  • 如果仍然无法解决,请尝试 右键单击项目 -> Android 工具 -> 修复项目属性

如果 R 没有重新生成怎么办

这通常发生在您的 xml 文件损坏时。

  • 检查您的 XML 文件中的错误,尤其是 /res/ 文件夹内的错误
  • 常见的位置是 /layout/ 和 /values/,特别是如果您最近更改了其中之一
  • 检查 AndroidManifest.xml,我发现经常会更改字符串,忘记在 AndroidManifest.xml 中更改字符串名称。
  • 如果找不到问题,请右键单击 /gen/ -> 从本地历史记录中恢复... -> 选中 R.java -> 单击还原。这不能解决问题,但它将清除额外的错误以便更容易找到问题。

我知道这里已经有很多答案,但这是 Google 上的第一个链接,所以我在这里汇总所有建议,并希望它能帮助其他新手 :)


1
确保 R. 链接到的任何内容都没有损坏。+100000 - iTurki
+1 提到了 AndroidManifest.xml,我差点忘了检查那个文件。 - Aletheios
1
在我的情况下问题是,Android Studio 在活动类中自动添加了以下导入“import android.R”。无论如何清理和重建,所有 R 的引用都会失效。删除该行后,构建又正常工作了。 - georgik

15

好的,我已经修复了:

当我将清单文件(manifest)更改为目标版本1.5时,出现了许多错误,只有一个错误与R类不存在无关-在清单文件中,“targetSdkVersion”和“maxSdkVersion”属性在sdk 1.5中并不存在。

因为这个问题导致R类无法生成。


1
你应该将这个解决方案标记为已接受。 - espinchi

14

我曾经遇到类似的问题,即在添加了一些图标和布局文件后,R.java文件没有被重新生成。我尝试了清理和构建,结果变得更糟,因为原始的R.java文件消失了,而且仍未重新生成。最终,我意识到编译器生成R.java时必须存在编译器错误,但我们在控制台上看不到这些错误。幸运的是,我之前注意到:

  1. 如果一个.xml文件引用了不存在的另一个文件,则会出错;
  2. 在文件名中使用大写字母是错误的(为什么禁止这样做?我喜欢驼峰式大小写)。

无论如何,将我的图标和.xml文件重命名为全小写,并修复了.xml文件内部的所有引用后,R.java文件就重新生成了。正适时地让我在午餐时间感觉良好 :-)


+1,正好在午餐时间停下来感觉很好:-)但是肯定,R.java现在也会引起类似的麻烦! - JWL
大写字母的图像也会导致此错误。 - gkiko

8
重新生成R文件的方法如下:
  1. 修改layout->activity_main.xml文件中的内容
  2. 保存文件
  3. 选择Project->Clean...
只需删除gen目录中的R文件,然后尝试Project->Clean。之后再次构建您的应用程序即可。

7

您也可以右键单击 项目-> Android工具 -> 修复项目属性。 这应该会导致重新生成R.java类。


4
不,那样做没用。 - IgorGanapolsky

5

我重新打开了 Eclipse,编辑了其中一个 XML 文件,然后发现我的活动类引用了 android.R,而不是我的包“R” :-)


+1. 我只是在Eclipse中选择了我看到的第一个快速修复,然后继续前进。这个有点难缠。 - Ben Mosher

4

我的问题出现在Manifest文件中。 我已删除启动器图标,但忘记在Manifest文件中引用新的图标 :)


我遇到了同样的问题,清单文件出现了一个错误,导致一切都停止了进行。 - Daniel Imms

4
为了重新生成R.class,您需要尝试多种技术。
  • 从您的java源文件中删除任何R导入: import R.android
  • 确保通过转到Window->Show view->Problems打开“问题”面板
  • 如果您的xml资源中有错误,则需要纠正这些错误。 在我的情况下,我必须更改我的id属性以包括“+”符号,如下所示:android:id="@+id/grp_txt"
  • 现在继续执行Project->Clean
  • 最后执行Project->Close,Project->Open
“+”符号表示新资源ID,并强制aapt工具在R.java类中创建一个新的资源整数。

现在已经是2018年快到2019年了,你的评论刚好结束了3天的工作,试图找出问题所在。 - hamada147

2
如果您在eclipse中意外通过“项目清理”删除了R文件(不要这样做),请右键单击您的项目文件 ->从本地历史记录还原...重新创建您的R。
我的情况:
  • 破损的xml导致R中的错误(因为id中有ä, ö, ü等字母)
  • 清除项目删除了我的R。
我所做的:
  • 从本地历史记录中重新创建R
  • 检查我的类中是否存在错误的R导入(如import android.R)并将其删除
  • 修复该xml文件并将其内容保存在外部txt文件中
  • 从我的项目中完全删除该xml。
  • 运行我的项目一次
  • 将修复后的xml放回原位
最后......
  • 在像绿巨人一样发疯后,无缘无故地给我的女友一个大大的拥抱。

我和你情况类似——我继承了一个庞大的代码库,它已经是两个相当大的项目和数十个/res文件的组合。在Eclipse之外备份xml文件,重新构建项目,然后逐个添加xml文件就解决了问题。但愿我有女友可以拥抱:s - CCJ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接