2013-07-22 4 views
5

Ich habe mich gefragt, wie das Android-Ressourcenidentifikationssystem funktioniert.Wie werden Ressourcenbezeichnerwerte in Android ermittelt?

So habe ich (zum Beispiel) eine XML-Layout-Datei mit dem Namen "Beispiel". In meinem Java-Code wird dies durch den Aufruf von R.layout.example identifiziert, der eine ganze Zahl zurückgibt.

Was ich fragte war, wie diese ganze Zahl bestimmt wird, und dann, wie ein ganzzahliger Wert verwendet wird, um eine entsprechende Ressource zu identifizieren und zu finden.

Danke!

Antwort

3

Die Ganzzahlen werden in einer generierten Datei namens R.java im Ordner gen des Projekts gespeichert. Eine Probe aus einer aktuellen Work-in-progress von mir ist:

public final class R { 
public static final class attr { 
} 
public static final class drawable { 
    public static final int cot_logo=0x7f020000; 
    public static final int cot_logo_small=0x7f020001; 
    public static final int ic_launcher=0x7f020002; 
    public static final int icon=0x7f020003; 
} 
public static final class id { 
    public static final int password=0x7f060001; 
    public static final int username=0x7f060000; 
} 
public static final class layout { 
    public static final int login_dlg=0x7f030000; 
    public static final int main=0x7f030001; 
} 
public static final class string { 
    public static final int app_name=0x7f050000; 
} 
public static final class xml { 
    public static final int config=0x7f040000; 
} 

}

Wie Sie sehen können, gibt es ein Muster, wie sie erzeugt werden. Jede Ressourcenkategorie erhält einen eigenen Arbeitsbereich.

Eine andere Sache zu beachten ist, dass sie in der Reihenfolge erzeugt werden, in der sie in den XML/Ordnern/etc angetroffen werden. Wenn Sie beispielsweise einige Ansichten im XML-Code verschieben, müssen Sie Ihr Projekt reinigen, um die vollständige R.java-Datei neu zu generieren. Andernfalls werden die Integer-Zuordnungen falsch sein und Sie werden (am wahrscheinlichsten) ein ClassCastException oder zumindest ein unerwartetes Verhalten haben.

0

Um zu verstehen, wie diese Zahlen generiert werden, müssen Sie herausfinden, wie aapt funktioniert, weil dieses Tool für die Generierung der R.java verantwortlich ist. Du kannst das Android-Repository kopieren und den aapt-Quellcode überprüfen, aber es ist ziemlich kompliziert (zumindest für mich).

Wenn Sie den Code sehen möchten, zuerst die Quelle klonen:

git clone "https://android.googlesource.com/platform/sdk" 

navigieren dann zu src/com/android/ide/eclipse/adt/internal/build, Dies ist, wo aapt wichtigsten Quellen sind.