2013-07-22 17 views
5

Zastanawiałem się, jak działa system identyfikacji zasobów Androida.W jaki sposób są określane wartości identyfikatorów zasobów w systemie Android?

Tak, mam (na przykład) plik układu XML o nazwie "przykład". W moim kodzie java jest to identyfikowane przez wywołanie R.layout.example, które zwraca liczbę całkowitą.

Zastanawiam się, w jaki sposób określana jest ta liczba całkowita, a następnie w jaki sposób używana jest wartość całkowita do identyfikacji i znalezienia odpowiedniego zasobu.

Dzięki!

Odpowiedz

3

Liczby całkowite są przechowywane w wygenerowanym pliku o nazwie R.java w folderze gen projektu. Próbka z niedawnym work-in-progress kopalni jest:

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

}

Jak widać, nie ma wzór tego, jak są one generowane. Każda kategoria zasobów ma swój własny obszar do pracy.

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że są generowane w kolejności, w jakiej występują w XML/folderach/etc. Na przykład, jeśli przeniesiesz niektóre widoki do pliku XML, musisz wyczyścić projekt, aby zregenerować pełny plik R.java. W przeciwnym razie odwzorowania całkowite będą niepoprawne, a skończysz na (najprawdopodobniej) ClassCastException lub co najmniej nieoczekiwanym zachowaniu.

0

Aby zrozumieć, w jaki sposób generowane są te liczby, musisz dowiedzieć się, jak działa aapt, ponieważ to narzędzie jest odpowiedzialne za generowanie R.java. Możesz sklonować sklonowane repozytorium Androida i sprawdzić kod źródłowy, ale jest to dość skomplikowane (przynajmniej dla mnie).

Jeśli chcesz zobaczyć kod, Pierwszy klon źródło:

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

następnie przejdź do src/com/android/ide/eclipse/adt/internal/build, to gdzie AAPT źródła są powiązane.