2013-03-02 9 views

答えて

6

R.javaをANSは、プロジェクト内の各リソースの静的定数を持つクラスファイル以外の何ものでもありません。定数は、効果的にファイルシステムとなるインデックス番号です。したがって、myicon.pngにはファイル番号12345が与えられます。リソース・マネージャーは、実行時にこの索引を使用してリソースをロードします。それを開く。見てみましょう。例R.javaで

見てみましょう:

public final class R { 
    public static final class id { 
     public static final int myTextView=0x7f090008; 
    } 
} 

は、私が使用してmyTextviewを参照することができます。

findViewById(R.id.myTextView) - constant 
findViewById(0x7f090008) - hex 
findViewById(2131296264) - decimal 
findViewById(017702200010) - octal 
findViewById(0b1111111000010010000000000001000) - binary 

は、彼らはすべて同じです。

同様に、私はこのように私のR.javaファイルをコーディングすることができます:それはまだ動作します

public final class R { 
    public static final class id { 
     public static final int myTextView=0b1111111000010010000000000001000; 
    } 
} 

を。

何も変換されていません。インデックス番号を参照するために定数を使用するだけです。コンパイラはそれを処理します。あなたはちょうど16進数としてそれを見ているが、最終的には、あなたのアプリのすべてであるように、それはちょうど1と0です。

これを行う唯一の理由は、が定数を使用するためです。 R.javaを再構築するたびに実際のインデックス値を使用しなければならない場合は、コードを維持することを想像してください。

インデックス番号は、メモリアドレス、オフセット、または特別な種類のチーズではありません。コンパイラによって生成された単純な定数で、人間にやさしい名前でリソースにアクセスすることができます。

2

R.javaファイルは、AndroidリソースマネージャーAndroid資産管理パック(aapt.exe)によって生成され、アプリのすべてのリソースへの参照を含んでいます。各参照は一意のID(public static final int)です。これらの定数は、R.javaファイルに16進形式で書き込まれます。

+0

うーん...この奇妙な.exeは何ですか? – ElefantPhace

+0

@ElefantPhaceそれについては何も変わっていません。それはAndroidのアセットマネージャパッカーです。 – Simon

+0

ねえダニー。私はあなたを誤って落とした(間違ったクリックを眠る)。私の間違いを訂正できるように、あなたの答えを編集してください(スペースを追加しても)。 – Simon

-1

これはアンドロイドの視点から建築的なものです。あなたがアンドロイドアプリケーションを開発し、その時にコード(デバイス/エミュレータにインストールされていない)をビルドすると、DVMは私たちが設計したリソースにメモリを割り当てます。実際のメモリアドレスが割り当てられており、リソースのサイズに応じて次のメモリアドレスが割り当てられます。そのロジックをコードに入れて同じものにアクセスすると、その場所を直接参照してリソースを取得しようとします。解析や他のものは必要ありません。

・ホープこれはあなたの質問

+0

しかし、あなたはこれについて考えますか?単一ビットのaddressic_action_search = 0x7f020000; ic_launcher = 0x7f020001; 差分を作成するには、1ビットのアドレスで十分です。 – user2125918

+2

私のPC上のコンパイラが私の電話でDVMを使ってこれらの "メモリアドレス"を構築する方法についてのあなたの説明を聞くのを待つことはできません。それは私の携帯電話を接続していないときにも動作するようです!素晴らしい! – Simon

+0

@ user2125918:メモリのもう片方が格納されているアドレスだけがヒープから与えられます。コンパイル時にすべてのものが割り当てられていればアプリケーションサイズは巨大なサイズになります –

関連する問題