Weekend z modowaniem [17.09.2011]

4 minuty czytania
Komentarze

 

Witam w kolejnym odcinku „Weekendu z modowaniem”! W zeszłym tygodniu naszą uwagę skupiliśmy na smartfonach HTC, kontynuując proces wgrywania CyanogenMod 7, a następnie przywracając urządzenie do stanu fabrycznego. Dziś zajmiemy się dalszą edycją plików APK, poruszając kwestię dekompilacji oraz tłumaczenia ich na dowolny język.

Często zdarza się, że jakaś aplikacja, na przykład wchodząca w skład naszego ROM-u, została wyposażona wyłącznie w obsługę obcych języków, a my posiadając odpowiedni poziom umiejętności lingwistycznych chcielibyśmy ułatwić życie innym użytkownikom, przez stworzenie jej spolszczenia. Zazwyczaj pierwszym krokiem wykonywanym przez wielu jest otworzenie pliku APK menadżerem archiwów i bezowocna próba zlokalizowania plików odpowiedzialnych za tłumaczenia. Otóż nie są one tam dostępne do wglądu w przypadku skompilowanych aplikacji – zostają wtedy umieszczone w pliku resources.arsc. By móc swobodnie edytować całą zawartość pliku APK musimy go zdekompilować przy użyciu zewnętrznych narzędzi.

Najlepiej przysłuży się nam stworzony przez polskiego programistę, darmowy APK Tool. Dzięki niemu wykonamy wszystkie niezbędne dla nas operacje, a jego obsługa jest stosunkowo prosta. Ze strony autora ściągamy dwa pakiety: apktool-install-windows-*.tar.bz2 oraz apktool*.tar.bz2 Po pobraniu paczek rozpakowujemy je do jednego folderu, dla przykładu użyjmy C:/APK.

Nasz plik z rozszerzeniem .apk, który chcemy przetłumaczyć umieszczamy w tym samym folderze, następnie uruchamiamy wiersz poleceń i wpisujemy

cd C:/APK

Jeżeli plik, który chcemy dekompilować to aplikacja systemowa, to w niektórych przypadkach niezbędne będzie też zaaplikowanie przez APK Tool plików framework z folderu /system/framework/.  Cześć programów korzysta z dodatkowych zasobów systemowych ulokowanych właśnie tam. W przypadku specyficznych ROM-ów, jak MIUI, czy Sense niezbędne będzie uzupełnienie brakujących plików, by otrzymać pozytywny rezultat dekompilacji.
Po zlokalizowaniu odpowiedniego pliku w katalogu /framework należy go umieścić w folderze z APK Tool i wpisać polecenie (na przykładzie com.htc.resources.apk):

apktool if com.htc.resources.apk 

Gdy jesteśmy już pewni, że wszystko jest na właściwym miejscu możemy przejść do dekompilacji naszej aplikacji. Wprowadzamy polecenie:

apktool d nazwa_pliku.apk

Zawartość zostanie umieszczona w folderze o nazwie identycznej do tej z pliku APK. W środku znajdziemy kilka folderów, lecz nas najbardziej interesuje /res. Między jego zawartością znajdują się katalogi o nazwach zaczynających się od /values. To w nich znajdują się wyświetlane wartości, a odpowiednie zakończenie sugeruje język, w którym zostały one napisane – dla polskiego jest to /values-pl. 

By przetłumaczyć zawartość aplikacji na nasz język kopiujemy część zawartości folderu /values: pliki strings.xml oraz arrays.xml i wklejamy je do utworzonego katalogu /values-pl. Następnie nie pozostaje nam nic innego, niż zająć się translacją wyrażeń wewnątrz nich. Dla przykładu, mając linię wyglądająco następująco:

<string name=”menu_save”>Save</string>

Zamieniamy ją na:

<string name=”menu_save”>Zapisz</string>

Ważne jest, by przy zapisywaniu tłumaczenia zostawić oryginalne kodowanie tekstu, gdyż ingerencja w nie może być powodem porażki przy tworzeniu APK. Gdy już załatwiliśmy wszystko czas na ponowne skompilowanie pliku. Naszemu oryginalnemu pakietowi .apk zmieniamy nazwę, następnie uruchamiamy wiersz poleceń, przechodzimy do folderu z APK Tool i wpisujemy komendę:

apktool b nazwa_pliku nazwa_pliku.apk

Proces ponownej kompilacji może trwać chwilkę. Jeżeli operacja nie zakończy się sukcesem, to program wyświetli informację o tym, w którym miejscu poległ – pomoże to nam w odszukaniu ewentualnych błędów.

Po zakończeniu powinniśmy ujrzeć plik wynikowy nazwa_pliku.apk. Nie jest to gotowy pakiet do instalacji, gdyż nie został on podpisany odpowiednimi certyfikatami. W ROM-ie wszystkie pliki APK posiadają taki certyfikat, który umożliwia ich współdziałanie z całym szkieletem systemu i podmienienie go na inny może skutkować niedziałaniem aplikacji. Trzeba będzie przy pomocy menadżera archiwów przenieść z oryginalnego pakietu katalog /META-INF oraz plik AndroidManifest.xml i umieścić je w nowo utworzonym APK.

Teraz nie pozostaje nam nic innego, jak przerzucić naszą aplikacje nazwa_pliku.apk powrotem do pamięci urządzenia, najlepiej przy pomocy narzędzia ADB, które już jakiś czas temu omówiliśmy na łamach „Weekendu z modowaniem”.

To wszystko w tym tygodniu, mam nadzieję, że od dziś dekompilowanie pliku APK nie będzie już stanowiło dla nikogo problemu. Jeżeli masz pytania, lub chciałbyś coś zaproponować pisz śmiało na adres [email protected].
Do zobaczenia za tydzień!

Motyw