AndroidのクラスRとは何ですか?


90

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ですか?

回答:


117

R特定のアプリケーションパッケージのすべてのリソースの定義を含むクラスです。これは、アプリケーションパッケージの名前空間にあります

たとえば、マニフェストでパッケージ名をとするcom.foo.barと、Rクラスはのすべてのリソースのシンボルで生成されcom.foo.bar.Rます。

一般に、扱うクラスは2つ ありRます。

  1. フレームワークのリソースandroid.R
  2. 自分の名前空間

これはRソースRを表すために名前が付けられており、人々が何かを長く入力しても意味がありません。特に、その後にかなり長いシンボル名が付けられることが多いため、大量の行ラッパーが発生する可能性があります。


10
すべての問題を解決して本を読み終えたら、(本から)追加できます。これは、プロジェクト内のリソースへの参照を提供する自動生成ユーティリティクラスです。名前がR.javaであるため、「Rクラス」と呼ばれます。これは、resフォルダー内で定義されたリソースからAAPTによって生成されます。
Androidのイヴ

1
なにandroid.R
Malwinder Singh 2015

12
人々が何かを長くタイプすることには意味があります。それはクリーンなコードと呼ばれ、まだ誰にも届いていないかもしれません。1文字のクラス、拡張子、変数は、ローカルのコンテキストでは問題ないかもしれませんが、グローバルではありません。このような醜い名前は、このような冗長な質問につながります。
ブレインレイ

23

Rとは何ですか: Rにはそれほど神秘的なものはありません。これは、多くの静的サブクラスを持つクラスであり、Eclipseで開き、(gen /の下で)調べます。

このクラスのすべてのメンバーは、1)静的最終クラス、または2)クラスの他のメンバーに関して一意である静的最終整数の2つのうちの1つです。

なぜそれがとても不可解なのですか: 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 /フォルダーを開きます。そこに1つのパッケージがリストされ、マニフェストで指定した名前が付いています。それを削除してみてください。すべてのリソースが正しい命名規則に従っており、すべてのxmlファイルが正しいxml規則に従っている場合、およびEclipseでビルドが自動的に有効になっている場合に戻ってきます。

Rファイルを理解するための鍵は、「メイン」パッケージに属する他のファイルとは異なるディレクトリにあるにもかかわらず、他のクラスと同じパッケージにあることを認識することです。これを理解し、リソースファイルの構文と名前を理解すれば、Rに関する問題のトラブルシューティングは簡単です。


3

Rはリソースの名前です。アクセスするリソースR.$FOLDER.$RESOURCEまたは非常に類似したリソース。

解決できない場合は、パスが正しく、参照されるリソースが存在することを確認してください(大文字と小文字が区別されます。拡張子を含めます)。

また、(とにかく)混乱している部分は、2つの異なるRがあるということです。 「解決できません」というエラーが多数発生する場合は、インポート対象を確認してください。変更または削除してみてください。または、プロジェクトのクリーンアップを試すこともできます(警告:場合によっては、状況が悪化することがあります)。


はい、私のプロジェクトの掃除は毎日のように見えます-日食は常に問題を抱えて忘れていますが、良い掃除は修理をしているようです(ジョンが言及しているように、私はこれまでよりも悪いことを経験したことはありません) 。
ブライアンD

@ブライアン:プロジェクトをクリーンアップすると、EclipseがRファイルを破棄して再生成します。たまには、それはせずに(または空で)私を残し、「再生成」ステップをミスRし、R自動的にプログラムされている手で行われた変更を元に戻します。
ジョン

@ジョン:好奇心から、あなたはどんなOSを使っていますか?
ブライアンD

@ジョン、クリーニングは私の場合には役に立ちません。:あなたは(まだ回答されていません)このスレッドでのエラーの実際のリストを参照することができますstackoverflow.com/questions/4928784/...
アンドロイドイブ

1

Android R.javaは、AAPT(Android Asset Packaging Tool)によって自動生成されたファイルで、res / directoryのすべてのリソースのリソースIDが含まれています。activity_main.xmlファイルにコンポーネントを作成すると、対応するコンポーネントのIDがこのファイルに自動的に作成されます。このIDをアクティビティソースファイルで使用して、コンポーネントに対して任意のアクションを実行できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.