MójDroid.pl

#3 Framework-res.apk - edycja plików XML

2011-02-15
|
Damian P.

Framework-res, jak każdy plik .APK, to nie tylko zbiór folderów z grafikami w formacie .PNG . Tak naprawdę, podstawą każdej aplikacji są pliki XML. To one zawierają dane o kolorze czcionek, statusów czy pasków postępu. Znajdziemy w nich także informacje o gradientach, czy odwołaniach do innych części systemu. Jednym słowem - jest to szkielet aplikacji. Ciekawi "jak to się je" w Androidzie? Jeżeli tak, to zapraszam do tego poradnika, gdzie dowiecie się jak edytować poszczególne pliki XML.

Przydatne narzędzia

Przede wszystkim APK Manager - to w nim będzie się odbywać pierwsza i ostatnia część poradnika, czyli kompilacja i dekompilacja. Przydatny będzie również Notepad++, głownie przy edycji kodu (ze względu na kolorowanie składni) oraz Photoshop lub GIMP (oba programy posiadają dane o kolorach oraz pozwalają te kolory pobrać z różnych obrazów).

Dekompilacja plików .APK

Jeżeli próbowaliście wcześniej otwierać pliki XML, to na pewno zauważyliście, że posiadają one sporo dziwnych znaków. Jest to efekt niepoprawnej dekompilacji .APK. Dlatego należy wykonać poniższe punkty, aby dostać się do "czystego" XMLa, bo tylko w nim możliwa jest zmiana parametrów. A więc:
  • Wybrany plik .APK umieszczamy w folderze "place-apk-here-for-modding" (w APK Manager)
  • Uruchamiamy APK Manager
  • Wybramy opcję nr. 22 (a w niej plik, który chcemy modyfikować) [select project]
  • Wybieramy opcję nr. 9 [decompile] Tutaj moja uwaga - obserwujcie co robi program. Jeżeli wszystko jest OK, to w folderze z APK Managerem zauważycie nowy projekt: Przechodzimy do katalogu ../projects/<nazwa apk>/res
W tym momencie widzimy całą zawartość pliku .APK. W każdym z folderów znajduje się inny "content", odpowiedzialny za coś innego. Nazwy folderów powinny mówić o ich zawartości. Nas interesuje przede wszystkim folder o nazwie layout. Widzimy w nim temat dzisiejszego poradnika, czyli pliki .XML. Nie wiecie co edytować? Nie szkodzi. Z pomocą przyjdzie wam XDA-Developers (a dokładniej dział Themes and Apps) oraz Google :-).

Edycja XMLa

Dla przykładu, pokażę wam jak zmienić kolor powiadomień na pasku zadań (Galaxy S):
  • Otwieramy plik "status_bar_latest_event_content.xml"
  • Szukamy odpowiedniej opcji, tutaj "@id/text" oraz "@id/title" (jak sama nazwa mówi, oznaczają one odpowiednio kolor tekstu oraz tytułu).
Teraz trochę teorii: Każdy XML składa się z kilku części. Każda z tych części zawiera inne dane - jak w naszym przykładzie: "@id/text" oraz "@id/title". Jeżeli jednak się przyjrzycie, to zauważycie że wszystkie linijki są do siebie podobne. To dobrze, bo łatwiej jest nam znaleźć odpowiednie dane. Oto przykładowa linijka:
<TextView android:textSize="18.0sp" android:textStyle="bold" android:textColor="#ff000000" android:ellipsize="marquee" android:id="@id/title" android:paddingLeft="4.0dip" android:fadingEdge="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="true" android:layout_weight="1.0" />
Zaznaczyłem to, co jest nam aktualnie potrzebne.
  • android:textStyle oznacza krój czcionki, tutaj bold - pogrubiona
  • android:id oznacza dany element, tutaj tytuł powiadomienia
  • android:textColor oznacza kolor czcionki i jej przeźroczystość

UWAGA! android:textcolor posiada szczególną budowę! Aby zmienić kolor czcionki, należy zmienić [tutaj] same zera! Na początku zawsze musi być ff, w innym przypadku wysypie wam się ROM! A przynajmniej aplikacja... Przykład koloru: 000000 oznacza kolor czarny, co się zgadza z moim romem - napisy mam czarne w powiadomieniach (dopisek redaktora).

Nie powinniście mieć problemów z edycją poszczególnych elementów, tym bardziej, że są one opisane po angielsku.

Kompilacja .APK

Ostatnia część poradnika.
  • Po edycji, zapisujemy plik .XML i wyłączamy edytor [Notepad++]
  • Włączamy (a raczej przywracamy) APK Manager'a
  • Wybieramy opcję nr. 11 [Compile] W tym momencie, program buduje od nowa plik .APK ze zmienionymi danymi. Niestety, łatwo tutaj się pomylić o błąd, ale to tylko wina programu. Aby uniknąć niepotrzebnego zamieszania, należy zdecydować, czy jest to plik systemowy czy nie. Doradzałbym zawsze wybierać "yes", a później (przy informacji "Aside your signatures [...]") potwierdzić drugi raz.
  • Program zbuduje folder Keep. Przejdźcie do niego [znajduje się on w folderze z APK Manager]
  • Usuńcie "resources.arsc"
  • Przejdźcie do /res i usuńcie tam pliki, które modyfikowaliście. Tak, KTÓRE MODYFIKOWALIŚCIE.
  • W APK Manager wciśnijcie dowolny klawisz Teraz program buduje nowy plik .APK.
  • Po kompilacji, przejdźcie do folderu "place-apk-here-for-modding". Zobaczycie tam nowy plik .APK (rozpoczynający się nazwą "unsigned[...]"). Otwórzcie go 7Zipem i skopiujcie z niego XMLy, które zostały edytowane. Skopiowane XMLy wklejcie do starego APK, które miało być modyfikowane.
Tym sposobem, unikniemy niepotrzebnych błędów a XML będzie zgodny (bo to nadal ten sam plik, z tej samej paczki). Uff... To wszystko. Koniec. Przepraszam, jeżeli napisałem coś "nie po polsku". To długi artykuł i można się pomylić. Pozdrawiam