Zur Erstellungszeit sammelt das aapt-Tool alle von Ihnen definierten Ressourcen (obwohl separate Dateien oder explizite Definitionen in Dateien) und weist ihnen Ressourcen-IDs zu.
Eine Ressourcen-ID ist eine 32-Bit-Nummer des Formulars: PPTTNNNN. PP ist das Paket, für das die Ressource bestimmt ist. TT ist der Typ der Ressource; NNNN ist der Name der Ressource in diesem Typ. Für Anwendungsressourcen ist PP immer 0x7f.
Die TT- und NNNN-Werte werden von aapt willkürlich zugewiesen - grundsätzlich wird für jeden neuen Typ die nächste verfügbare Nummer zugewiesen und verwendet (beginnend mit 1); Ebenso wird für jeden neuen Namen in einem Typ die nächste verfügbare Nummer zugewiesen und verwendet (beginnend mit 1).
Wenn wir also diese Ressourcendateien von aapt in dieser Reihenfolge verarbeiten lassen:
layout/main.xml
drawable/icon.xml
layout/listitem.xml
Der erste Typ, den wir sehen, ist "Layout", also TT == 1. Der Vorname unter diesem Typ ist "main", also NNNN == 1. Die endgültige Ressourcen-ID lautet 0x7f010001.
Als nächstes sehen wir "zeichnbar", so dass TT == 2 gegeben wird. Der Vorname für diesen Typ ist "Symbol", so dass NNNN == 1 erhalten wird. Die endgültige Ressourcen-ID lautet 0x7f020001.
Zuletzt sehen wir ein anderes "Layout", das wie zuvor TT == 1 hat. Dies hat einen neuen Namen "listitem", so dass der nächste Wert NNNN == 2 erhalten wird. Die endgültige Ressourcen-ID lautet 0x7f010002.
Beachten Sie, dass aapt standardmäßig nicht versucht, diese Bezeichner zwischen Builds gleich zu halten. Jedes Mal, wenn sich die Ressourcen ändern, können sie alle neue Kennungen erhalten. Jedes Mal, wenn sie erstellt werden, wird eine neue R.java mit den aktuellen Bezeichnern erstellt, damit Ihr Code die richtigen Werte erhält. Aus diesem Grund dürfen Sie Ressourcen-IDs niemals an einem Ort beibehalten, an dem sie für verschiedene Builds Ihrer App verwendet werden können.
Sobald die Ressourcen kompiliert und Bezeichner zugewiesen wurden, generiert aapt die R.java-Datei für Ihren Quellcode und eine Binärdatei mit dem Namen "resources.arsc", die alle Ressourcennamen, Bezeichner und Werte enthält (für Ressourcen, die aus einer separaten Datei stammen Ihr Wert ist der Pfad zu dieser Datei in der APK-Datei in einem Format, das zur Laufzeit problemlos auf dem Gerät zugeordnet und analysiert werden kann.
Sie können eine Zusammenfassung der Datei resources.arsc in einer apk mit dem Befehl "aapt dump resources <Pfad-zu-apk>" erhalten.
Das Format der binären Ressourcentabelle ist in der Header-Datei für die Ressourcendatenstrukturen hier dokumentiert:
https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/include/androidfw/ResourceTypes.h
Die vollständige Implementierung zum Lesen der Ressourcentabelle auf dem Gerät finden Sie hier:
https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp