R.java 文件背后的魔法
Posted
技术标签:
【中文标题】R.java 文件背后的魔法【英文标题】:Magic behind R.java file 【发布时间】:2011-01-04 03:22:04 【问题描述】:最近我在使用 R.java 文件时遇到了一些问题。现在我决定做一个备份并删除文件,看看会发生什么。
什么都没有发生,所以我创建了一个空的 R.java 文件并希望一切顺利。现在 Eclipse 似乎发现文件被篡改了,甚至发出警告:
R.java was modified manually! Reverting to generated version!
仅此而已。我尝试手动构建它,但没有得到任何结果。
所以,我有两个问题:
-
我应该怎么做才能强制 Eclipse 重新生成文件
这里发生了什么?文件是如何创建的,生成文件的代码在哪里?
如果有任何帮助,我将不胜感激。像往常一样,问题发生在截止日期前几天:)
【问题讨论】:
【参考方案1】:我在编译我的 android 应用程序时遇到了问题,出现了关于无法生成 R.java 的看似莫名其妙的错误。
问题是由于我之前在构建过程中杀死了 Android 模拟器造成的。不要那样做!一个线索是出现了几个遗留的 *.out.xml 文件。
解决方法是选择项目,点击Project->Clean,然后手动删除所有*.out.xml文件。只有这样我才能单击 Run->Run 并成功构建。
还有一件事:我正在使用 Eclipse。我必须确保在包资源管理器中选择了该项目,并且不只是一些随机源文件。容易被忽视!
【讨论】:
【参考方案2】:R.java 在构建时自动生成。它的内容基于资源文件(包括布局和首选项)。
当你删除它时,它会被重新创建,但如果你自己创建它,你会遇到麻烦,因为构建系统不会替换它。
您可以简单地再次删除它(手动或通过选择 Project->Clean)并重新构建您的程序。
【讨论】:
这正是我所做的 - 首先我删除了文件,但 eclipse 甚至没有检测到它已经消失。只有在我创建了一个空的 R.java 类之后,它才检测到有问题,但它不会重新创建或以任何方式修改文件。【参考方案3】:我多次遇到这个问题,而且大多数情况下是由“res”文件中的一些错误引起的,检查所有 res 文件中的一切是否正常,主要是 XML,然后才能构建。
例如,此问题的两个常见原因可能是:
在 XML 文件的样式中没有正确拼写属性的名称。
没有正确关闭语言环境文件 XML 中的字符串。
【讨论】:
【参考方案4】:我发现了问题 - 我创建了一个 9patch 图像,其中仅在 Y 轴上定义了补丁区域(我试图阻止在另一个上调整大小)。
问题仍然存在:为什么没有关于错误的警告?或者如果有 - 它被埋在哪里?
【讨论】:
关于 9-patch 的错误应该已经出现在“问题”窗口中。 它可能存在于某个地方,但是当我将它添加到项目中时它崩溃了 R.java 并且一切都变红了,所以有点难以注意到。【参考方案5】:抱歉,请尝试检查 Eclipse 中的输出。可能是您有一些错误阻止 Eclipse 完成构建过程(检查您的 AndroidManifest.xml,是否正确?)。我的意思是,您应该检查所有资源文件(string.xml,布局,...)和接口(*.aidl),可能是有一些问题(语法不一致,或者什么....)阻止了eclipse生成R.java。
【讨论】:
是的,我有。我的问题有很多问题,希望你不要指望我删除所有类中对 R.java 的每一个引用...... 2LambergaR:我的意思是你应该先检查你的 xml/aidl/AndroidManifest.xml。可能是有些问题,那s why eclipse can
t 生成R.java。
我已经检查过了……没问题【参考方案6】:
我遇到了同样的问题,我使用大写字母命名了一个资源文件(一个 .png 图像)。 (ImageButton001.png 而不是 imagebutton001.png)。
更改文件名后,我的 R.java 又回来了。
Rgards, 娟
【讨论】:
【参考方案7】:如果可用内存不足,构建工具将静默失败(Eclipse 不会在错误日志中显示任何错误或报告任何内容)。关闭其他打开的应用程序(例如模拟器和浏览器),然后在应用程序清单文件中添加一个空格并保存。
【讨论】:
【参考方案8】:正如 ponkin 所说 - 您可能有一个问题导致 R 无法重新生成自身,因此您现在遇到了一百万零一个问题。
不要尝试自己创建 R 类。试着想想你一直在弄乱的最后一个 XML,并检查它是否有错误
我也遇到了同样的问题here
【讨论】:
【参考方案9】:确保您的清单文件没有错误。 如果删除/res/values/strings.xml中的资源字符串app_name,它不知道如何正确生成R.java。 我在做 HelloSpinner 教程时发现了这个问题。
【讨论】:
【参考方案10】:我发现不想要的资源导致了问题。我一删除资源就生成了 R.java。
【讨论】:
这有多种原因。就我而言,删除资源(xml)文件就可以了。不是我不需要那个 xml 文件,我必须重新创建它。奇怪!【参考方案11】:我遇到了这个问题,要重建 R.java
我剪切了我刚刚处理的 xml 文件中的代码(或者如果这不起作用,请尝试其他文件),删除该文件然后使用相同的名称并将代码粘贴回其中。希望这会有所帮助。
【讨论】:
【参考方案12】:值得一提的是,如果 XML 文件包含 ?,则不会重新生成 R.java
,并且错误不会显示在 XML 文件中(有时会在一段时间后显示)
我有一条类似于:
< string name="questionmark"\>?< /string> <br>
尝试改变 ?到别的东西,看看R.java
文件会发生什么 - 对我有用
【讨论】:
【参考方案13】:我遇到了类似的问题,我在 Raw 文件夹中用大写字母重命名了一个 .wav 文件。当我改为全部小写时,清理项目并重建R.java
很好。
【讨论】:
【参考方案14】:正如其他人所说,不要创建自己的 R.java
文件。我刚开始使用 Android 时遇到了同样的问题,花了一些时间才弄清楚编译错误是什么原因造成的。
您想对R.java
文件做什么?
【讨论】:
创建我自己的(空的!)R.java 文件是我做的最后一件事。当它对我完全失败时,我首先尝试清理项目,手动重建它,然后我删除了文件并重建了项目(什么也没发生)。所以最后我创建了一个新类,命名为 R.java - 首先是一个空类,然后我添加了基本类(数组、attr、drawable、id、布局和字符串),此时系统实现了 R.java。 java 已更改并试图重建它 - 在此过程中惨遭失败。【参考方案15】:我遇到了同样的问题。我刚刚去了:
Project -> Properties -> Android
并为我的项目选择了合适的模拟器,那一刻我有 3 种不同的模拟器可供选择。我意识到我在某个特定时刻改变了模拟器。所以尝试更改模拟器,这可能会有所帮助!
祝你好运
【讨论】:
你能改写这个答案吗?它实际上是一个长句子。【参考方案16】:我在 IntelliJ 上遇到了同样的问题。问题是我在strings.xml
中定义了两次 app_name 出于某种原因,IDEA 检查没有自动检测到它。
【讨论】:
【参考方案17】:我在另一个网站上读到了这篇文章,它对我有帮助:
“如果这不能解决您的问题,请尝试修改您的 AndroidManifest.xml
(只需添加一个空格并保存)。我听说这会强制 R.java
重建。”
所以只需在清单文件中添加一个空格,然后重新构建!
【讨论】:
【参考方案18】:附带说明一下,通常这些 *.out.xml 文件是通过尝试构建您的项目而生成的,而 xml 文件集中在编辑器中
【讨论】:
【参考方案19】:我有类似的问题。清理项目没有解决问题,代码或文件名中的大写或空格没有错误。
当您选择 PROJECT-->CLEAN 然后取消选中“立即开始构建”选项时,解决方案将出现一个弹出窗口。清理项目。关闭并重新打开 Eclipse,然后构建项目(PROJECT-->BUILD)。
问题仍然是为什么简单的清理和构建而不关闭 Eclipse 不起作用。
【讨论】:
以上是关于R.java 文件背后的魔法的主要内容,如果未能解决你的问题,请参考以下文章