Android中的R类是什么?

Android中的R类是什么?,android,Android,在AndroidStudio中,当我使用空活动创建项目时,我会在MainActivity.java文件中获得以下代码: package my.company.my_proj; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected vo

在AndroidStudio中,当我使用空活动创建项目时,我会在
MainActivity.java
文件中获得以下代码:

package my.company.my_proj;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

其中使用了名为
R
的神秘类。此类
R
的目的是什么?

R是资源的名称。通过
R.$FOLDER.$resource
或类似方式访问的任何资源

如果无法解决,请确保路径正确且引用的资源存在(区分大小写;包括扩展名)


另外,(无论如何,对我来说)令人困惑的是,有两种不同的
R
。如果您遇到很多“无法解决”的错误,请尝试查看您导入的内容。尝试更改或删除它。或者您可以尝试清理您的项目(警告:有时这会使事情变得更糟)。

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

例如,如果您在清单中说您的包名是
com.foo.bar
,则会生成一个
R
类,其中包含
com.foo.bar.R
中所有资源的符号

通常,您将处理两个
R

  • 和中的框架资源
  • 您自己的,在您的命名空间中

  • 它之所以被命名为
    R
    ,是因为它代表Resources,而且让人们键入更长的内容是没有意义的,特别是因为后面通常有相当长的符号名,这可能会导致相当多的行包装。

    什么是R: 关于R并没有什么神秘的地方。它只是一个有许多静态子类的类,在eclipse中打开它并看一看(在gen/下)

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

    为什么这么神秘: 很容易混淆,因为R是由ant自动生成的。它很神秘,因为你不应该手动“触摸”它(当然你可以,但你的更改会在再生时自动删除)。另外,它还很神秘,因为有时eclipse会自动导入androids标准R文件(如上面的答案所述)

    为什么它总是第一个无法解决的问题:R完全遵循Java类和包的规则,关于R如何处理导入,没有什么特别的问题。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中打开gen/文件夹(packages视图)。您将看到其中列出了一个包,它将具有您在清单中指定的名称。尝试删除它,如果您的所有资源都遵循正确的命名规则,所有xml文件都遵循正确的xml规则,并且在eclipse中启用了build automatically,那么它将返回


    理解R文件的关键是认识到它与其他类位于同一个包中,即使它与属于“主”包的其他文件位于不同的目录中。理解了这一点并理解了资源文件的语法和命名之后,就很容易解决R的问题。

    Android R.java是由AAPT(Android资产打包工具)自动生成的文件,其中包含res/directory所有资源的资源ID。
    如果在activity_main.xml文件中创建任何组件,则会在此文件中自动创建相应组件的id。这个id可以在活动源文件中用于对组件执行任何操作。

    是的,清理我的项目似乎是一项日常工作——eclipse总是乱成一团,忘记了一些事情,但是一次好的清理似乎可以解决问题(尽管我从来没有经历过比现在更糟糕的事情,正如John提到的)@Brian:当我清理我的项目时,Eclipse会销毁并重新生成我的
    R
    文件。偶尔,它会错过“重新生成”步骤,使我没有(或有一个空的)
    R
    R
    被编程为自动撤消手动所做的任何更改。@John:出于好奇,你在使用什么操作系统?@John,在我的情况下,清理没有帮助。您可以看到该线程中的实际错误列表(尚未回答):在解决所有问题并继续阅读本书之后,我可以(从本书中)添加:这是一个自动生成的实用程序类,提供对项目中资源的引用。它被称为“R类”,因为它的名称是R.java。它是由AAPT从res文件夹中定义的resourced中生成的。有一点需要人们输入更长的内容:它被称为clean code,可能还没有到达每个人。单字母类、扩展名和变量在局部环境中可能很好,但在全局环境中永远不会。像这样难听的名字会导致像这样多余的问题。