Android:什么是R? 为什么这么神秘?

我一直在试图复制NotePad示例项目,以便如果我修改源文件以通过实验学习,原始示例文件将不会受到影响。

唉,尽pipe在一个原始的环境中进行了非常干净的步骤 , R 再次反对我!

我得到了大约20“ R不能解决一个variables”的错误… … –

现在,这就像catch 22:我正在研究NotePad示例,以便我有机会了解R是什么。 但是R并不喜欢我,所以它没有给我一个机会来研究NotePad示例。

为了增加侮辱,当我为R ,我得到完全不相关的结果。

  1. 什么是R
  2. 为什么这么神秘?
  3. 为什么总是第一个无法解决的问题?

更新:我注意到,在HelloAndroid项目(XML布局版本)中,有一个生成的 Java文件,名为R.java 。 这是项目build设者抱怨的臭名昭着的R吗?

R是一个包含特定应用程序包的所有资源定义的类。 它位于应用程序包名称空间中

例如,如果你在你的清单中说你的包名是com.foo.bar ,那么R类是用com.foo.bar.R中所有资源的符号生成的。

通常有两个 R类你会处理

  1. android.R
  2. 你自己的名字空间

它被命名为R因为它代表了资源,而且让人们input更长的时间是没有意义的,特别是因为后面常常会有相当长的符号名称,这会导致大量的行封装。

什么是R:R没有什么非常神秘的地方。它只是一个有许多静态子类的类,在eclipse中打开它并查看它的下面。

这个类的每个成员都是以下两件事之一:1)静态的最终类或2)对于其他类的成员是唯一的静态最终整数。

为什么如此神秘:由于R是由ant自动生成的, 所以很容易混淆。 它的神秘,因为你不应该手动“触摸”(当然你可以,但你的改变将被自动擦除再生)。 它更加神秘,因为有时候eclipse自动导入androids标准R文件(如上面的答案中所讨论的)

为什么它始终是第一个无法解决的问题: R严格遵循Java类和包的规则,R对于input的行为没有什么特别之处 。 R将自动放入清单文件中的包条目指定的包中

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1"> <uses-sdk android:minSdkVersion="13" /> 

要查看你的R文件属于哪个软件包,只需在eclipse(packages视图)中打开gen /文件夹即可。 您将看到一个包列在那里,它将具有您在清单中指定的名称。 尝试删除它,如果所有的资源都遵循正确的命名规则,并且所有的xml文件都遵循正确的xml规则,并且在eclipse中启用了自动构build ,则它会回来。

理解R文件的关键是要认识到它和其他类是在同一个包中,即使它在不同的目录中,那么属于你的“主”包的其他文件也是如此。 理解了这一点之后,了解资源文件的语法和命名问题用R来解决问题很简单。

R是你的资源的名字。 您访问您通过R.$FOLDER.$RESOURCE访问的任何资源或类似的东西。 如果无法解决,请确保path正确并且引用的资源存在(区分大小写;包含扩展名)。 另外,混乱的部分(对我来说)是有两个不同的R 's。 如果您收到很多“无法解决”的错误,请尝试查看您要导入的内容。 尝试更改或删除它。 或者你可以尝试清理你的项目(警告:有时候会让事情变得比以前更糟糕)。