Під час побудови інструмент aapt збирає всі визначені вами ресурси (хоча окремі файли або явні визначення у файлах) і призначає їм ідентифікатори ресурсів.
Ідентифікатор ресурсу - це 32-бітове число форми: PPTTNNNN. PP - пакет, для якого призначений ресурс; TT - тип ресурсу; NNNN - це ім'я ресурсу цього типу. Для ресурсів додатків PP завжди дорівнює 0x7f.
Значення TT та NNNN присвоюються aapt довільно - в основному для кожного нового типу присвоюється та використовується наступний доступний номер (починаючи з 1); так само для кожного нового імені в типі присвоюється і використовується наступний доступний номер (починаючи з 1).
Отже, якщо у нас ці файли ресурсів обробляються aapt у такому порядку:
layout/main.xml
drawable/icon.xml
layout/listitem.xml
Перший тип, який ми бачимо, - це "макет", тому йому надається TT == 1. Перше ім'я під цим типом є "основним", тобто NNNN == 1. Кінцевий ідентифікатор ресурсу - 0x7f010001.
Далі ми бачимо "drawable", що отримує TT == 2. Першим ім'ям цього типу є "icon", що дає NNNN == 1. Кінцевий ідентифікатор ресурсу - 0x7f020001.
Нарешті ми бачимо ще один "макет", який має TT == 1, як і раніше. Це має нову назву "listitem", що отримує наступне значення NNNN == 2. Кінцевий ідентифікатор ресурсу - 0x7f010002.
Зверніть увагу, що aapt за замовчуванням не намагається зберегти ці ідентифікатори однаковими між збірками. Щоразу, коли ресурси змінюються, всі вони можуть отримувати нові ідентифікатори. Щоразу, коли вони будуються, створюється новий R.java з поточними ідентифікаторами, щоб ваш код отримував правильні значення. Через це ви ніколи не повинні зберігати ідентифікатори ресурсів у будь-якому місці, де вони можуть використовуватися в різних збірках вашого додатка.
Після компіляції ресурсів та присвоєння ідентифікаторів aapt генерує файл R.java для вашого вихідного коду та двійковий файл із назвою "resources.arsc", що містить усі імена ресурсів, ідентифікатори та значення (для ресурсів, що надходять з окремого файлу , їх значенням є шлях до цього файлу в .apk) у форматі, який можна легко зіставити та проаналізувати на пристрої під час виконання.
Ви можете отримати резюме файлу resources.arsc в apk за допомогою команди "aapt скинути ресурси <шлях- до- apk>".
Формат таблиці двійкових ресурсів задокументований у файлі заголовка для структур даних ресурсів тут:
https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/include/androidfw/ResourceTypes.h
Повна реалізація для читання таблиці ресурсів на пристрої знаходиться тут:
https://github.com/android/platform_frameworks_base/blob/master/libs/androidfw/ResourceTypes.cpp