2012-02-07 17 views
8

Byłem szczęśliwie refactoring kodu z różnych wersji tej samej aplikacji (płatne/darmowe) do projektów biblioteki Android, tak aby rzeczywiste aplikacje mogą po prostu dostosować bibliotekę i zmniejszyć powielanie kodu.Projekt biblioteki Androida - jak uzyskać kontekst?

Jedną z rzeczy, którą zacząłem się zastanawiać, jest to, co oznacza getApplicationContext() w kodzie biblioteki? Czy to samo można uzyskać z aplikacji podrzędnych, ApplicationContext? Co się dzieje, gdy uzyskuję dostęp do SharedPreferences z projektu biblioteki getApplicationContext() zamiast oryginalnej aplikacji getApplicationContext()? Czy plik SharedPreferences będzie taki sam czy inny?

Co się stanie, jeśli skorzystałem z tej funkcji, aby uzyskać dostęp do SharedPreferences? Czy ma to znaczenie, że działanie jest teraz działaniem biblioteki, a nie oryginalną aplikacją? Czy SharedPreferences jest taki sam?

Dzięki za wyjaśnienie.

Odpowiedz

13

Kiedy APK pakuje się następnie wszystkie klasy będą należą do głównego aplikacji.

wywołanie getApplicationContext(). GetPackageName() i zwróci nazwę pakietu aplikacji, a nie pakiet biblioteki.

Mam taką samą konfigurację dla aplikacji bezpłatnej/płatnej i żadnych problemów, kiedy przeniosłem swoje zajęcia do projektu bibliotecznego.

Musisz jednak sprawdzić swoje pliki XML (manifest, widżety itp.), Aby użyć pełnej nazwy pakietu projektu biblioteki.

+0

Zrobiłem kilka testów i zobaczyłem, że nie ma to wpływu na SharedPreferences. I widzę również, że getPackageName() zwraca pakiet aplikacji podrzędnej. Firma Google dostarczyła ograniczoną dokumentację bibliotek. Dziękujemy za potwierdzenie. – amit

+0

W moim przypadku wpłynęło to na właściwości SharedPreferences, a funkcja 'getPackageName()' zwracała w każdym przypadku te same wyniki. Ale była różnica w 'context.toString()' –

1

Projekt biblioteczny jest prawie jak posiadanie całego kodu w jednym projekcie. Jest kilka rzeczy, na które należy zwrócić uwagę w odniesieniu do przestrzeni nazw, ale ogólnie działa bardzo dobrze.

np. Twoja biblioteka ma własną przestrzeń nazw

Biblioteka nazwa pakiet = uk.co.lib główna App nazwę pakietu = uk.co.app

Zajęcia w bibliotece, które chcesz tro dostęp z głównej aplikacji muszą być dodano do manifestu aplikacji. A na aktywność nazwie projektu biblioteki zostanie dodana do manifestować w głównej aplikacji tak:

<activity android:name="uk.co.lib.A"> 

Dostęp wspólne preferencje itp dałoby ten sam wynik z obu nazw i wróci preferencje dla aplikacji.

Jest tylko jedna aplikacja więc istnieje tylko jeden ApplicationContext

Powiązane problemy