Witam w kolejnym wydaniu „Weekendu z modowaniem”. Android zaczyna mieć przed nami coraz mniej tajemnic, czas zgłębić kolejną ich garść. W poprzednich odcinkach poznawaliśmy strukturę custom ROM-ów, tworzyliśmy też prostą paczkę zmieniającą czcionki na naszym smartfonie.

Jak dobrze wiecie, aplikacje w systemie Android posiadają formę plików APK. W dzisiejszym odcinku to im przyjrzymy się bliżej, poznamy strukturę oraz dowiemy się jakie jest przeznaczenie ich poszczególnych elementów. Do czego jest nam to potrzebne? Wiedza ta będzie niezbędna, gdy zaczniemy zajmować się modyfikacją poszczególnych elementów systemu i przyswojenie jej zawczasu ułatwi poruszanie się wśród tych plików w przyszłości.

Plik APK, czyli Android PacKage w swojej istocie jest bardzo zbliżony do znanego formatu JAR, a w zasadzie jest jego wariantem. Każda aplikacja przeznaczona dla systemu Android jest kompilowana i pakowana w jeden plik o rozszerzeniu .apk. W nim umieszczone zostają wszystkie zasoby niezbędne do działania programu; jego kod, szczegółowe informacje konfiguracyjne i inne elementy. Efekt kompilacji, czyli gotowy plik APK, można otworzyć i podejrzeć za pomocą dowolnego menadżera archiwów, jak na przykład WinRAR. W tej postaci odbiega on tego, co programiści widzą pracując na kodzie aplikacji.

Po otworzeniu dowolnego pliku APK naszym oczom ukazuje się podstawowa struktura, której elementy mogą się różnić w zależności od wybranej aplikacji:
/assets – Zbiór luźnych plików ogólnego przeznaczenia; umieszczone tutaj elementy nie są rozpoznawane przez aplikację i nie mają identyfikatorów zasobów. Nie są kompresowane i nie ma co do nich żadnych limitów.

/META-INF – Przechowywane są tu certyfikaty i sygnatury, które (między innymi) podczas instalacji sprawdzają poprawność zasobów wewnątrz pliku APK względem tego, co było wynikiem kompilacji i jeżeli natrafią na niespójność przerywają instalację. Ma to uchronić przed wirusami i modyfikacjami mogącymi przynieść szkodę.

/res – Zasoby aplikacji, przyjrzymy im się za moment.

AndroidManifest.xml – Wymagany w każdej aplikacji, są w nim zapisane aktywności, szczegółowe informacje konfiguracyjne i inne elementy związane z działaniem programu. Zdeklarowane są też uprawnienia wymagane przez aplikację (wyświetlane podczas instalacji) oraz uprawnienia dla innych aplikacji korzystających z usług oferowanych przez program.

classes.dex – Kod aplikacji w formacie Dalvik Executable, generowany podczas kompilacji z kodu Java. Wirualna maszyna Dalvik, z której korzysta Android, różni się od wirtualnej maszyny Java, więc struktura pliku .dex odbiega od tego, co znamy z plików .class. Osoby zainteresowane w pakiecie AndroidSDK mogą znaleźć program dexdump pozwalający na dekompilację plików DEX, nie będziemy się w to zagłębiać na tym etapie.

resources.arsc – Skompilowany plik, w którym znajdują się informacje o wykorzystywanych zasobach, między innymi znajdują się też w nim tłumaczenia.

Najciekawszym dla nas jest folder /res, w którym znajdują się zasoby aplikacji, które nadają się do prostej modyfikacji. Na tym etapie najciekawsze wydają się być elementy graficzne, których zmiana może uatrakcyjnić wygląd części oprogramowania naszego urządzenia z Androidem.

W folderze /res znajdziemy szereg podfolderów, omówimy je pokrótce:

/drawable – pliki i ustawienia niezależne od rozmiaru ekranu

/drawable-hdpi – pliki przeznaczone dla urządzeń o dużych rozdzielczościach ekranu 

/drawable-mdpi – pliki przeznaczone dla urządzeń o średnich rozdzielczościach ekranu

/drawable-ldpi – pliki przeznaczone dla urządzeń o małych rozdzielczościach ekranu

/drawable-land – pliki odnoszące się do horyzontalnego ustawienia ekranu

/drawable-en-US-hdpi – przeznaczone dla urządzeń o dużych rozdzielczościach ekranu, wykorzystujących konkretny język, w tym wypadku angielski w odmianie amerykańskiej

/layout, /color, /anim, /menu – zawierają głównie pliki .xml odpowiadające za konfigurację poszczególnych elementów aplikacji

/raw – nieskompresowane zasoby dodatkowe, występujące w dowolnym formacie; od folderu /assets różni go to, że jego elementy mają przydzielone identyfikatory zasobów, nie obsługuje struktury podfloderów

Mam nadzieję, że ten artykuł pomoże zrozumieć strukturę i podstawy działania plików APK, co przyda nam się w naszej dalszej podróży przez świat modyfikowania Androida. Na początku będziemy zajmować się prostymi zmianami graficznymi, o które często prosicie. Z czasem przejdziemy też do nieskomplikowanych zmian w kodzie aplikacji, poprawiających działanie i dodających ciekawe usprawnienia.

Jeżeli coś Was szczególnie interesuje i chcielibyście się tego dowiedzieć z „Weekendu z modowaniem” zachęcam do pisania w komentarzach bądź kontaktowania się ze mną bezpośrednio przez email [email protected] Postaram się, by żadna wiadomości nie pozostała bez odpowiedzi. Proszę też wziąć pod uwagę, że nie posiadamy każdego urządzenia z Androidem dostępnego na rynku, więc artykuły dedykowane dla poszczególnych modeli mają niższy priorytet. Do zobaczenia za tydzień!

Google News
Obserwuj ANDROID.COM.PL w Google News i bądź zawsze na bieżąco!
Obserwuj

Mariusz Urban

Informatyk z wykształcenia, dziennikarz z wyboru. Od zawsze wierny Androidowi.