2013-07-22 15 views
5

Mi stavo chiedendo come funziona il sistema di identificazione delle risorse Android.Come vengono determinati i valori dell'identificatore di risorse in Android?

Quindi, ho (per esempio) un file di layout XML con il nome "esempio". Nel mio codice java, questo viene identificato chiamando R.layout.example che restituisce un numero intero.

Quello che mi chiedevo era come questo numero intero è determinato, e quindi come un valore intero viene utilizzato per identificare e trovare una risorsa corrispondente.

Grazie!

risposta

3

Gli interi sono memorizzati in un file generato denominato R.java nella cartella gen del progetto. Un campione da un recente lavoro in corso di mine è:

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; 
} 

}

Come potete vedere, c'è un motivo per il modo in cui vengono generati. Ad ogni categoria di risorse viene assegnata una propria area con cui lavorare.

Un'altra cosa da notare è che vengono generati nell'ordine in cui vengono rilevati in XML/cartelle/ecc. Ad esempio, se si spostano alcune viste nell'XML, è necessario pulire il progetto per rigenerare il file completo R.java. In caso contrario, i mapping interi non saranno corretti e ti ritroverai (molto probabilmente) uno ClassCastException, o almeno un comportamento imprevisto.

0

Per capire come vengono generati quei numeri, è necessario sapere come funziona aapt perché tale strumento è responsabile della generazione di R.java. Puoi clonare il repository Android e controllare il codice sorgente di aapt, ma è piuttosto complicato (almeno per me).

Se volete vedere il codice, primo clone la fonte:

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

quindi passare alla src/com/android/ide/eclipse/adt/internal/build, questo è dove aapt fonti correlati sono.

Problemi correlati