Autor Wątek: Dostęp do zasobów APK - podstawy, temat zbiorczy  (Przeczytany 13615 razy)

Offline Wall-E

  • Core
  • *****
  • Podziękowań: 118
  • Nokia Lumia 1520 | Colorovo CityTab Supreme 10.1
Dostęp do zasobów APK - podstawy, temat zbiorczy
« dnia: Sobota, 19 Październik 2013, 17:08 »
Dostęp do zasobów APK - podstawy, temat zbiorczy...
Czyli to, co powinno być stworzone już dawno, ale dotąd nikomu się nie chciało.
  ;)


Wstęp


Tu i ówdzie sporo pisze się o modyfikowaniu plików Androida. W wielu miejscach wspomina się również o narzędziach przeznaczonych do uzyskiwania dostępu do zasobów plików apk jak i modyfikacji ich poszczególnych części. Owszem pisze się... Ale pisze się tak bardziej na marginesie, jako o wymaganych narzędziach. W niewielu miejscach można też znaleźć informację które narzędzie jest do czego i jak go użyć oraz jakie narzędzie wybrać do interesującej nas operacji. Oczywiście informacje da się znaleźć, jednak są one porozrzucane i często pofragmentowane.
W niniejszym artykule pokuszę się o zebranie do tzw. kupy większości najpotrzebniejszych informacji oraz popełnię kilka krótkich opisów działania narzędzi o których będzie mowa.
Mam nadzieję, że ten "spis treści" w sporej części uzupełni podstawową wiedzę w wielu tematach.

W artykule zostaną użyte sposoby i programy przeeksperymentowane oraz opisane również przez innych "dłubaczy" - zostanie to zaznaczane przy każdym zapożyczonym a użytym fragmencie.



Początki początków

Zabierając się za edycję zasobów pliku apk należy, na samym początku, uzbroić się w kilka elementów systemowych, które są warunkiem sine qua non czegokolwiek w tym temacie. Krótko mówiąc są niezbędne.

Po pierwsze...
• Java
Jak pewnie wiele osób przynajmniej kojarzy, Java jest obiektowym językiem programowania na którym opiera się cały Android. Nie ma tu sensu wnikać co i jak - to nie jest potrzebne. Wystarczy tylko wiedzieć, że Java jest nam niezbędna i tyla.

Jak się domyślam, Java jest obecna na waszych PC-tach - choćby z powodu przeglądania stron internetowych. Domyślam się również, że jest to środowisko JRE (Java Runtime Environment) - czyli wersja najprostsza, pozwalająca jedynie na "odtwarzanie" javowych apletów.
Ja sugeruję użycie do naszych celów wersji bardziej zaawansowanej, pozwalającej również na tworzenie obiektów, czyli wersji JDK (Java Development Kit).

JDK 7 (link do strony projektu):
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Najlepiej byłoby pobrać wersję 6, ale już znikła ona z serwerów Oracle. Nic to. 7-mka też może być.

O ile Windows XP pozwala nam na bezstresowe używanie środowiska Java zawsze i wszędzie, o tyle Windows Vista/7 (x86/64) już może nam przysporzyć nieco siwych włosów.
Po instalacji Javy należy wykonać następujące kroki (dotyczy systemów Windows Vista/7 x86/64):
  • Otwieramy Menu Start i za pomocą prawokliku na Komputer wywołujemy menu tegoż elementu,
  • Wybieramy i klikamy pozycję Właściwości,
  • W oknie, które nam się pojawi, szukamy pozycji Zaawansowane ustawienia systemu - po lewej stronie, ostatnia pozycja,
  • W kolejnym oknie (Właściwości systemu) namierzamy przycisk Zmienne środowiskowe... - jest na dole - i klikamy go,
  • Teraz przechodzimy do bloku Zmienne systemowe i za pomocą suwaka szukamy w oknie wyrażenia Path (kolumna: Zmienna),
  • Teraz można użyć dwóch sposobów:
    a. Kliknij i podświetl w oknie zmienną Path po czym użyj przycisku Edytuj...
    b. Dwukrotnie kliknij na zmienną Path
    Oba sposoby doprowadzą nas do tego co potrzebujemy, czyli do okna edycji wartości zmiennej Path (Edytowanie zmiennej systemowej)
  • W polu Wartość zmiennej: przechodzimy do samego końca łańcucha znaków i umieszczamy tam w kolejności:
    a. znak średnika " ; ",
    b. ścieżkę dostępu do folderu zawierającego plik java.exe
    Jeśli podczas instalacji Javy nie mieszałeś w parametrach instalacyjnych to owa ścieżka powinna wyglądać mniej-więcej tak:

    C:\Program Files\Java\jdk1.7.0_01\bin\

    Proszę pamiętać, że powyższa ścieżka jest tylko zasadą a jej dokładny wygląd zależy od zainstalowanej wersji Javy - każdy musi ją sobie osobiście sprawdzić.
  • Całość zapisujemy i restartujemy PC-ta.
UWAGA (taka wskazówka na zaś)
W przypadku problemów z detekcją Javy przez program de/kompilujący pliki apk w systemach x64 (bardzo częste zjawisko), sugeruję dodatkowe zainstalowanie środowiska Java w wersji x86.

Po wtóre...
• SDK Androida
SDK systemu Android (Software Development Kit) to, moim zdaniem, dosyć ważny warunek wykonywania jakichkolwiek operacji na jakichkolwiek plikach Androida.

Istnieją dosyć poważne argumenty, że SDK niekoniecznie jest potrzebne do naszych celów... Niewykluczone. Jednak ja wolę się oprzeć na swoich doświadczeniach.
Jeśli chcesz spróbować bez SDK to nic nie stoi na przeszkodzie.

Tak czy owak opiszę i ten punkt.

SDK Androida (link do strony projektu):
http://developer.android.com/sdk/index.html

Pobrany program instalujemy na PC-cie.
W tym miejscu sugeruję zainstalowanie SDK bezpośrednio na C:\ - nie w Program Files czy gdzie tam... a właśnie bezpośrednio na C:\ (C:\android-sdk\)
Z własnych doświadczeń wynika mi, że SDK zdecydowanie nie lubi być plasowane przesadnie głęboko w drzewie folderów. Ma to szczególne znaczenie w przypadku systemów 64-bitowych gdzie ścieżka typu C:\Program Files (x86)\android-sdk\ (SDK to program 32-bitowy) w wielu przypadkach jest mało strawna dla naszych narzędzi.
OK. SDK jest zainstalowane. Jednak to jeszcze nie wszystko. Teraz mamy tylko "bazę", która sama w sobie jest mało przydatna. Aby spełniała ona swoje zadanie należy ją zaktualizować - chodzi tu o aktualizację jej elementów.
Tu nie będę się rozdrabniał które elementy należy zaktualizować, to temat na osobną książkę - polecimy globalnie.
Tak więc, przechodzimy do folderu instalacyjnego SDK, uruchamiamy plik SDK Manager.exe i z dostępnej listy wybieramy wszystko co ma opis "Not installed" lub "Update available: ...".
Klikamy przycisk Instal X packages... i cierpliwie czekamy na pobranie i instalację komponentów - cała operacja może potrwać nawet kilka godzin w zależności od przepustowości naszego łącza.
Część wybranych komponentów nie zostanie pobrana i zainstalowana, ale tym nie trzeba się przejmować - to co nam potrzebne zostanie zainstalowane.

UWAGA:
W przypadku systemów Windows Vista/7, po instalacji i aktualizacji SDK sugeruję postąpić z nim tak jak ze środowiskiem Java, czyli dopisać ścieżkę SDK do zmiennych systemowych.
Np: C:\android-sdk\platform-tools\
Pamiętać należy oczywiście by dopisując ową ścieżkę do zmiennych systemowych poprzedzić ją znakiem średnika (" ; ").



Dlaczego tak... (kilka uwag tak przy okazji)


Zacznijmy od tego, że jest kilka sposobów na ekstrakcję zasobów pliku apk, które różnią się zasadniczo tak i potrzebami co do edytowanych zasobów jak i sposobem ich wykonania. Poniżej przedstawię dwie zasadnicze metody dostępu do zasobów apk. Dlaczego dwa? Po pierwsze dlatego, że więcej ich nie znam :P A po drugie dlatego, że każdy z nich może służyć innym celom ze względu na łatwość wykonania lub ilość oferowanych treści.

Na początek (nieco wybiegając w przód) przedstawię różnice pomiędzy dostępną zawartością pliku apk wyświetloną dwoma różnymi, a opisanymi dalej metodami.

Poniżej zawartość folderu głównego aplikacji (Plik "otwarty" | Plik zdekompilowany)...


Poniżej zawartość - tak dla przykładu - folderu res (Plik "otwarty" | Plik zdekompilowany)...




Zasoby APK - sposób (naj)łatwiejszy


Plik apk to w pewnym sensie spakowane archiwum. W "pewnym" - to znaczy w takim, że plik apk da się otworzyć przy pomocy "jakiegoś" programu do pakowania/kompresji/archiwizacji danych. Np. przy pomocy takich "pakerów" jak: 7-Zip lub WinRAR.
Ja osobiście preferuję w tej kwestii 7-Zip-a bo mam wrażenie, że jakoś łagodniej obchodzi się on z zawartością apk... W grę tutaj również wchodzi łatwość użycia programu w stosunku do plików apk. Ale to już kwestia osobistych eksperymentów.

• Zastosowanie i dostępne zasoby
Ten tryb otwarcia pliku apk daje nam, niestety, bardzo ograniczony dostęp do zasobów. Pomimo tego, że - jak nam się wydaje, bo tak widzimy - mamy władzę nad wieloma plikami to tak naprawdę nasza moc jest mocno ograniczona.
Po pierwsze dla tego, że wiele zasobów (np. pliki xml) są w formie dla nasz niezrozumiałej - są niezdekompilowane i wyglądają mniej-więcej tak:


...czyli "bessęsu". Z tym nie zrobimy już nic za wyjątkiem policzenia tekstowych "robaczków" - jeśli ktoś chce...
A po drugie dlatego, że "pakery" nie są w stanie pokazać sporej części pozostałych zasobów (np. tych dotyczących translacji...) - te również wymagają pełnej dekompilacji pliku apk.

Co możemy bezproblemowo zrobić w tym trybie:
- Poedytować/pozamieniać grafiki dostępne w pliku. Bardzo często tylko tego potrzebujemy, więc ten sposób będzie najbardziej adekwatny do naszych potrzeb.
- Pozyskać plik classes.dex, który zawiera kod wykonywalny - możemy podłubać później w tym pliku. Ważne jest to, że efekt dekompilacji apki już tego pliku nie zawiera bo wszystko jest rozłożone na czynniki pierwsze. Jeśli ktoś ma życzenie podłubać sobie w kodzie wykonywalnym bez dekompilacji całego pliku to ta metoda dostępu do zasobów w zupełności wystarczy.
- Przenosić pliki zasobów pomiędzy plikami apk - czasami trzeba tak zrobić.
- Wypakować zawartość pliku apk - nie wiem po co, ale niektórzy tak robią.

• Narzędzia i sposób użycia
- 7-Zip

W tym przypadku wystarczy kliknąć prawym przyciskiem myszy na pliku apk i z menu wybrać pozycję Otwórz archiwum...


... co zapewni pewien dostęp do zasobów apk. Mocno ograniczony, ale zawsze jakiś...


- WinRAR

Tutaj sprawa jest odrobinę bardziej skomplikowana bo program obsługuje tylko zdefiniowane typy plików a pliki apk do takich nie należą - tak więc, nie da się "z pierwszego kopa" otworzyć pliku poprzez menu kontekstowe lub inne opcje programu. Trzeba tutaj trochę pomieszać w powiązaniach plików - ale ich zmiana może być niewygodna w przypadku innych programów związanych z operacjami na plikach apk.
Nie oznacza to oczywiście, że w ogóle się nie da bo się da. Wystarczy tylko otworzyć okno "pakera" sposobem konwencjonalnym (kliknąć w ikonkę programu) i przeciągnąć na nie plik apk by uzyskać efekt podobny do poprzedniego...


Jeśli już mówimy o narzędziach i sposobie ich użycia, wspomnijmy również o programach, które ułatwią nam ogarnięcie rzeczy najpopularniejszej a mianowicie edycji grafiki zawartej w plikach apk.
Idąc tym tropem wspomnieć należy o dwóch kwestiach...

Rodzaje grafiki w plikach apk są 2 (słownie: dwa). Właściwie to jeden, ale w dwóch wariacjach.
Pierwszy typ to zwyczajne pliki w formacie png. Tutaj z edycją i przeróbkami problemu być nie powinno - byle zachować oryginalny rozmiar, głębię kolorów etc. etc.

Poza programem do edycji grafiki pomocne może okazać się narzędzie wyczajone przez XTeKa z modaco.pl, które (jeśli będzie taka potrzeba) pomoże przeskalować grafiki pomiędzy różnymi rozdzielczościami ekranów...

Cytat: 'XTeK'
Prosty program który przeformatuje nam obrazki z formatu np. MDPI na XDPI.

Formaty które obsługuje to:
LDPI, MDPI, HDPI, XHDPI, XXHDPI

Aplikacja bardzo szybka i poręczna.
Działa na kilku obrazkach jednocześnie.
Potrafi przerobić obrazki kompilowane .9.png


Aplikacja w wersji 1.1.3.0:
http://forum.xda-developers.com/attachment.php?attachmentid=1904989&d=1366716416

Temat na XDA:
http://forum.xda-developers.com/showthread.php?t=2219584

Drugi typ to już ewenement na skalę światową i okolic... Pliki 9.png... Taaaaa...
W tym przypadku chodzi o grafiki, które są dopasowywane przez system do ogólnego lajołtu w ramach potrzeb. Mówiąc uproszczeniem, są skalowane w z góry ustalony i określony sposób. Różnią się one od zwykłych plików png i tym samym wymagają szczególnego traktowania.
Sposób postępowania z tymi plikami oraz potrzebne programy zostały opisane przez Toldo w wątku na modaco.pl a którego treść pozwolę sobie przytoczyć poniżej...
Cytat został nieco zmodyfikowany w kwestii układu, formatowania i wyglądu treści - sens pozostał nienaruszony.

Cytat: 'Toldo'
Przy edycji framework-res.apk i innych plików Androida sporo problemów sprawiają pliki graficzne z końcówką *.9.png. Nie wystarczy zwyczajne przerobienie w programie graficznym. Sprawa jest ciut bardziej skomplikowana ale nie awykonalna. Do dzieła.

Co jest potrzebne:
(tutaj było, że SDK Androida, ale tą kwestię opisałem wcześniej)

Cytat: 'Toldo'
Kompilator:

wersja 64 - bitowa:
http://www.xeudoxus.com/android/xUltimate-d9pc-x64.zip

wersja 32 - bitowa:
http://www.xeudoxus.com/android/xUltimate-d9pc-x86.zip

Jako przykład modyfikacji posłuży Genie Widget, docelowy wygląd Smoked Glass z czerwonym gradientowym podświetleniem.

1. Otwieramy plik apk z Genie widget (przy pomocy 7zipa), z folderu res/drawable-hdpi wyciągamy wszystkie pliki z zakończeniem *.9.png, które będziemy modyfikować.


2. Pliki *.9.png przenosimy do folderu na pulpicie i nazywamy go np. "genie widget".


3. Przy pomocy ulubionego edytora graficznego (np. Gimp), przerabiamy grafiki wedle uznania, następnie zapisujemy pod tą samą nazwą i w tym samym formacie.


4. Gdy już zakończymy edycję, klikamy na każdym pliku prawym klawiszem, wybieramy Otwórz za pomocą i wybieramy draw9patch.bat, który znajduje się w folderze android-sdk\tools.


5. W programie draw9patch.bat możemy edytować wyłącznie granicę 1px obrazka, reszta pozostaje nietknięta.


6. Zaznaczenie dolnych checkboxów spowoduje wyświetlenie wszystkich patchów. Górna i lewa granica (czarna linia na screenie) determinują gdzie grafika będzie rozciągnięta. Dolna i prawa granica determinuje gdzie może zostać umieszczona zawartość grafiki (napis, itp. - widoczne na niebiesko w prawej części okna).


7. Powtarzamy ww. czynności z każdą grafiką. Należy pamiętać aby nie zaznaczać rozciągnięcia na zaokrąglonych brzegach albo jakichkolwiek innych elementach umieszczonych w grafice (tylko proste krawędzie). Aby zapisać klikamy File/Save.


8. Rozpakowujemy Kompilator do folderu. Wewnątrz znajdziemy foldery example1, example2music oraz ikonę. Otwieramy example1/res/drawable-hdpi i usuwamy stamtąd wszystkie grafiki (albo przenosimy gdziekolwiek). Teraz wrzucamy do tego folderu wszystkie wyedytowane i spatchowane wcześniej grafiki. Następnie wracamy do głównego folderu z Kompilatorem i klikamy dwukrotnie ikonę, pojawi się okno linii komend i po kilku sekundach pojawi się folder o nazwie "done". W środku znajduje się folder example1 wraz z finalnie przerobionymi grafikami. Teraz wystarczy te grafiki wrzucić spowrotem do pliku apk.


Źródło:
http://www.droidforums.net/forum/droid-faq/51442-how-edit-9-pngs.html

Dodam tylko, że potencjalnie edytowalną grafikę "wyciągamy" z archiwum a po edycji "wciągany" ją na to samo miejsce nadpisując istniejącą. Tyle.

No i tyle możemy w tym przypadku.



Zasoby APK - sposób trudniejszy (zasadniczy)


W tym miejscu zaczynają się schody... poniekąd.

Aby dobrać się do wszystkich miodności pliku apk właściwie nie ma innego sposobu. Tylko całkowita dekompilacja pliku umożliwi nam atak frontalny na zasoby aplikacji.

Tak więc...

• Zastosowanie i dostępne zasoby
Edycja wszystkich zasobów pliku apk. Choć warto wiedzieć, że ten tryb rozkładania pliku apk nie sprzyja takim zadaniom jak podmiana czy modyfikacja grafik - to lepiej jest zrobić przy użyciu trybu prostszego.

• Narzędzia i sposób użycia
Narzędzi do pełnej dekompilacji pliku apk jest wiele... Mimo tego ogromu ilościowego, wszystkie te narzędzia oparte są na jednym i tym samym "jądrze" - jest nim plik apktool.jar. To właśnie od niego zależy co i jak da się przetworzyć. Cała reszta to tylko otoczka funkcjonalna pozwalająca na mniej lub więcej operacji w stosunku do plików apk.
W tym miejscu skupię się na dwóch najbardziej rozbudowanych narzędziach przeznaczonych do edycji plików apk. Owe narzędzia służą jednemu celowi, ale ich forma i działanie jest z goła różne.
Pierwszy z nich ma formę prostą. Konsola tekstowa z której wybiera się odpowiednie, predefiniowane opcje.
Druga opcja, to program typu "kombajn do zbioru czereśni". Potężne, okienkowe i w pełni klikalne narzędzie.

Jak zawsze zaczynamy od początku.

Opcja pierwsza...

- APK Multi Tool

Strona projektu:
http://apkmultitool.com/

APK Multi Tool 1.0.11 (pobieranie)
Strona projektu:
http://apkmultitool.com/?q=node/5
lub mój mirror:
http://www.mediafire.com/download/kuvb6zfxaqdwbvl/APK_Multi_Tool_1.0.11.zip

Bardzo funkcjonalne narzędzie oparte o windowsową konsolę (CMD). Jako, że to konsola, program jest całkowicie nieklikalny - wszystkie operacje wykonuje się wpisując numery wybranych opcji i zatwierdzając to enterem... Wiem, że to koszmar, ale proszę się nie przestraszać.

Pobrane archiwum zip należy wypakować. Zawiera ono folder z programem, który sugeruję umieścić bezpośrednio na C:\ .
Zawartość folderu z programem wygląda tak jak poniżej:


Jednak nie są to wszystkie elementy jakich program potrzebuje do pracy. Krótko mówiąc należy narzędzie skonfigurować - robi się to tylko raz... raz na zawsze.
W tym celu należy uruchomić plik wsadowy Setup.bat...


Jak widać mamy do dyspozycji pięć opcji, z których dla nas, na początku najważniejsze są dwie:

2. Installing Framework-Res
Za pomocą tej opcji można... a właściwie trzeba zainstalować dla narzędzia tzw. frejmłorki... Chodzi tutaj o pliki typu:
- framework-res.apk
- twframework-res.apk
- com.htc.resources.apk
- SystemUI.apk
...czyli te, które będą potrzebne programowi do operacji na plikach apk.

3. Setup Directories
Ta opcja tworzy w folderze programu wszystkie podfoldery potrzebne do pracy.
Opcje 1, 4 i 5 możemy sobie darować...

Aby uruchomić konkretne zadanie należy za Please make your decision: (tam gdzie miga prompter) wpisać numer wybranej opcji i zatwierdzić enterem.

Konfigurację programu spokojnie można zacząć "od końca", czyli od numerku 3, tj. od utworzenia struktury folderów. Trwa to ino mig...
Tak program zgłosi nam zakończenie procesu:


A tak wygląda nowa struktura programu:


Po naciśnięciu "any keya" wracamy do głównego okna konfiguracji.

Czas teraz na nieco bardziej skomplikowane manewry. Należy zainstalować potrzebne programowi frameworki Androida.
W tym celu w konsoli wpisujemy cyferkę 2 i enterujemy...


Jak na skrinie widać, do dyspozycji mamy pięć opcji produkcyjnych (dwie ostatnie pomijam).
Pierwsze cztery opcje są raczej jasne - dotyczą zainstalowania konkretnych i opisanych frameworków. Za to bardzo ciekawa jest opcja: 5. Pull Dependencies from Phone... Ale o niej za moment.

Na początek pytanie - skąd wziąć owe potrzebne frameworki. Ano właśnie.
Frameworki możemy uzyskać dwoma drogami:

1. Pobrać gotową paczkę
Strona projektu (bezpośredni link do oryginalnej paczki):
http://adf.ly/C6TgC
lub mój mirror:
http://www.mediafire.com/download/9eeiyn730mmljjp/frameworks_for_APK_MT.zip

2. Użyć "ciekawej" opcji 5.

W przypadku nr 1, pobraną paczkę rozpakowujemy a potrzebne nam frameworki kopiujemy do podfolderu other w folderze programu. Oczywiście należy pamiętać, by nazwy tych frameworków pozmieniać na oryginalne (usunąć z nich zbędne dodatki).
Których frameworków użyć, dowiemy się z załączonego do paczki pliku tekstowego - jest tam opisane który framework reprezentuje potrzebne nam API, które frameworki użyć w przypadku HTC, które w przypadku modyfikacji MIUI etc. etc. Należy tutaj dodać, że te frameworki należą do grupy hmmm... ogólnych - nie są one związane z żadnym konkretnym urządzeniem i nie są w żaden sposób zmienione przez producentów urządzeń. Niewielki wyjątek tutaj stanowią frameworki przeznaczone ogólnie dla HTC wraz z jego Sense oraz dla modyfikacji MIUI.
Po skopiowaniu potrzebnych frameworków w odnośne miejsce, używamy odpowiednich opcji konsoli do zainstalowania właściwych plików (tych skopiowanych) - prosta sprawa nie wymagająca specjalnego opisywania. Należy tylko klikać "any keye" i patrzeć czy nie ma jakichś błędów. Prawie cała procedura będzie na skrinach dotyczących opcji 5 - czyli za chwilę.
Jedynym problemem może tutaj być opcja dotycząca instalacji frameworka twframework-res.apk i SystemUI.apk bo takowych w paczce nie ma. Owszem nie ma, ale ten problem rozwiązuje nam "ciekawa" opcja 5...

Opcja 5. Pull Dependencies from Phone jest drugą metodą pozyskania potrzebnych nam frameworków. Dlaczego jest ciekawa? A dlatego, że frameworki są zasysane bezpośrednio z naszego (albo pożyczonego) urządzenia. Zaletą tej opcji jest fakt, że z urządzenia pobrane zostają wszystkie potrzebne frameworki wraz z tzw. dependenciesami - czyli zależnościami pomiędzy poszczególnymi frameworkami w naszym urządzeniu.

No OK. Pobierzmy sobie frameworki z urządzenia.
Mam nadzieję, że nie muszę wspominać o tym, iż fon musi być podłączony do kompa kabelkiem a Debugowanie USB (Opcje deweloperskie) ma być włączone...
W samo połączenie programu i urządzenia nie ingerujemy - program posiada własne ADB za pomocą którego dobierze się do fona.
"Klikamy" opcję 5...


("any key")


W tym miejscu program uświadamia nas jakie frameworki są wymagane dla pewnych wersji Androida lub specyficznych grup ROMów.
("any key")
Teraz wystartuje procedura pobierania frameworków z urządzenia przeplatana kilkoma "any keyami". Zakończona procedura wygląda tak jak na poniższym skrinie...


Teraz tylko kolejny "any key" i wracamy do konsoli instalowania frameworków.

Wszystko co program zassał z telefonu zostało wrzucone do podfolderu other w folderze programu:


Frameworki pobierałem ze swojego Samsunga, więc zgodnie z tym co ogłaszał nam program kilka skrinów wcześniej, znalazł się tutaj również twframework-res.apk

Teraz owe frameworki należy zainstalować. Ja mam je dwa, więc użyję opcji nr 1 a później 2.
Dla obu opcji procedura jest identyczna...

Opcja 1 (framework-res.apk)




Opcja 2 (twframework-res.apk)




Po przetworzeniu oba instalowane pliki wylądowały w folderze C:\Users\XXXX\apktool\framework\ jako pliki 1.apk i 2.apk.


Teraz tylko 6 by powrócić do okna głównego konfiguracji lub 00 by zamknąć konfigurator. I tyle.
Program jest gotowy do pracy.

Aby uruchomić program należy kłapnąć myszą w plik wsadowy o nazwie Script.bat, który (po zabiciu "any keyem" okna powitalnego) otworzy nam nasze "środowisko pracy"...


Jako, że artykuł miał zawierać tylko informacje dotyczące przygotowania systemu i programów potrzebnych do pracy nie będę tutaj opisywał szczegółowo jak tymi programami się posługiwać. Nie mniej króciutki opis zrobić trzeba...
Tak więc...
Program jak widać na skrinie, oferuje sporo możliwości. Jednak większość z nich jest nawet dla średnio zaawansowanego dłubacza albo (jeszcze) niepotrzebna albo wymaga zapoznania się z dokumentacją... Wspomnę tylko o najpotrzebniejszych dłubaczowi opcjach.
Na pierwszy ogień sugeruję zapoznać się ze "środkowym blokiem" opcji: Advanced Tasks Such As Code Editing zawierającym siedem (od 9 do 15) opcji produkcyjnych. Ten blok umożliwia pełną dekompilację pliku, jego ponowną kompilację, podpisanie elektroniczne oraz ewentualną instalację poprzez ADB.

Zaczynamy od tego, że plik apk wrzucamy (kopiujemy/przenosimy) do podfolderu place-apk-here-for-modding w folderze programu... No.
I teraz...

9. Decompile apk
Dekompilacja pliku apk. Tej opcji używa się w pierwszej kolejności i dotyczy ona ponad 90% plików apk.


Powyżej, program w trakcie dekompilowania pliku. Po  zakończeniu pracy program powróci do standardowego wyglądu okna głównego bez żadnego komunikatu.

10. Decompile apk (with dependencies)
(For proprietary rom apks)

Dekompilacja pliku apk przy użyciu zależności z innymi frameworkami - dotyczy to głównie niektórych aplikacji systemowych i zależy od konkretnych właściwości ROMu dla którego apka jest przetwarzana. Niestety, to my musimy wiedzieć, które pliki takich zależności wymagają.
Podczas działania tej opcji program zażyczy sobie wskazania frameworków do których zależności chcemy użyć.


Potrzebny framework po prostu przeciąga się na okno konsoli.

W przypadku obu sposobów dekompilacji, efekt działania opcji znajdziemy w folderze programu w podfolderze project - zdekompilowana apka będzie miała formę folderu o nazwie pliku wejściowego a jego zawartość wygląda tak jak na poniższym skrinie...


Dodam tylko, że jest to dokładnie ten sam plik, który wcześniej został "otwarty" za pomocą archiwizatorów. Pewnie widać różnicę w zawartości... :)

11. Compile System APK files
Kompilowanie aplikacji systemowych.
W tym przypadku, oprócz standardowego komunikatu o przetwarzaniu pliku, program uraczy nas dodatkowym pytaniem...


...na które, nie wnikając w treść, klikamy "y" (yes). Po naszym sakramentalnym "tak", program przemieli zawartość (co będzie widać w konsoli) i strzeli w nas bardzo ważną sugestią...


Oznacza to ni mniej ni więcej a tylko to, że teraz należy odwiedzić podfolder keep (który został utworzony na czas kompilacji w folderze programu) i usunąć z niego plik resources.arsc. Tak też należy zrobić.

12. Compile Non-System APK files
Kompilowanie aplikacji nie-systemowych, czyli zwykłych programów.
Po zainicjowaniu tej opcji program da nam do wyboru 4 sposoby kompilacji pliku apk...


1. Kompilowanie do niepodpisanego pliku przy użyciu folderu keep (podobnie jak w przypadku aplikacji systemowych).
2. Kompilowanie do niepodpisanego pliku bez użycia folderu keep.
3. Kompilowanie do podpisanego pliku przy użyciu folderu keep (podobnie jak w przypadku aplikacji systemowych) z zachowaniem oryginalnego podpisu elektronicznego.
4. Kompilowanie do podpisanego pliku bez użycia folderu keep z zachowaniem oryginalnego podpisu elektronicznego.

Opcje 3 i 4 - jak twierdzi autor - są tworem eksperymentalnym i mogą nie działać prawidłowo. Z moich doświadczeń wynika, że faktycznie działają nie do końca poprawnie. Dlatego sugeruję używanie opcji 1 lub 2.

W wyniku działania opcji 1 lub 2, w folderze z plikiem wejściowym pojawi się kolejny z nazwą poprzedzoną przedrostkiem unsigned. Taki plik należy jeszcze podpisać.

Tutaj należy jeszcze zwrócić uwagę, że we wcześniejszych wersjach narzędzia obie opcje kompilacji (11 i 12) nie były rozdzielone. Pytanie o rodzaj pliku (systemowy/nie-systemowy) padało podczas procesu kompilacji. Tutaj oba rodzaje kompilacji zostały rozdzielone na osobne opcje.

13. Sign apk
Podpisywanie pliku apk podpisem elektronicznym.
Za pomocą tej opcji nadaje się plikowi apk elektroniczny podpis - bez niego Android nie zainstaluje aplikacji. Działanie opcji (poza "podpisaniem" pliku) zamieni nam wcześniej skompilowany plik z przedrostkiem unsigned na plik z przedrostkiem signed.

14. Install apk
Instalowanie skompilowanej aplikacji w urządzeniu za pomocą interfejsu ADB.
Osobiście nie stosuję tej opcji - wolę to zrobić manualnie po przeniesieniu apki na urządzenie.

15. Compile apk / Sign apk / Install apk
(Non-System Apps Only)

3 w 1. Kompilacja, podpisanie i instalacja aplikacji jednym "kliknięciem". Jak widać w tytule opcji, stosuje się ją tylko do plików nie-systemowych, czyli zwykłych aplikacji.
Nigdy nie stosowałem i nie wiem jak oraz czy w ogóle ta opcja działa :P

Oczywiście należy pamiętać, że pomiędzy użyciem opcji Decompile a Compile należy wprowadzić w pliku żądane zmiany. Po coś ten plik był dekompilowany przecież :P


Opcja druga...

- Virtuous Ten Studio

Długo zastanawiałem się czy wspominać o tym programie - narzędzie jest potężne i dosyć skomplikowane... Nawet dla średnio zaawansowanego dłubacza może być przerostem formy nad treścią. Jednak doszedłem do wniosku, że wspomnieć można - ale nic więcej.
Tym samym wspominam...

Strona projektu:
http://virtuous-ten-studio.com/

Virtuous Ten Studio 2.9.15.10501 (pobieranie)
Strona projektu:
http://virtuous-ten-studio.com/index.php/downloads
lub mój mirror:
http://www.mediafire.com/download/9oi4fiywyqf38lv/Virtuous_Ten_Studio_2.9.15.10501.rar

Tak jak pisałem wcześniej, narzędzie jest potężne i łatwiej napisać czego nie umie niż jaką gamą opcji i możliwości dysponuje. Wybaczcie, że nie będę przeklepywał wszystkich możliwości tej maszynki - jest tego duuuuuużo.
O wszystkich jej możliwościach można przeczytać na stronie projektu, czyli tutaj:

http://virtuous-ten-studio.com/index.php/vts-features

Sporo tego, c'nie?

Z tego co mnie w tym narzędziu zafascynowało to forma prezentacji zasobów pliku apk... Ale co ja będę pisał, proszę popatrzeć na poniższe skriny (uprzedzam, że duże są)...

Tak wygląda okno programu z widokiem na zdekompilowany plik apk (lewe okienko).


Jak się zapewne domyślacie, drzewiasty układ zasobów jest cholernie wygodną opcją.

Natomiast poniżej widać otwarte do edycji pliki programu.
Przykładowy plik smali...


... oraz przykładowy plik xml...


Czy praca z zakładkami jest dla kogoś niewygodna?

Jak zapewne z powyższych skrinów widać, program dysponuje bardzo rozbudowanym paskiem narzędzi w postaci (przez niektórych nielubianej) wstążki. To co widać to widać... Ja natomiast gwarantuję, że każdy menus jest po brzegi wypełniony opcjami i narzędziami... Dodam jeszcze, że narzędzie jest w pełni klikalne i konfigurowalne poprzez osobny panel, który zawiera opcje autowykrywania lokalizacji potrzebnych elementów systemowych (np. Javy, frameworków, ADB etc.). Ufff...
Nawet jeśli nie będzie się tego używało to jednak warto chociaż popatrzeć czym dysponuje program i co można nim zrobić.
Osobiście używam ten program, jednak nie za często. Przeważnie wtedy, gdy mam do podłubania w kilku(nastu) plikach - wtedy praca z zakładkami i drzewkiem zasobów jest bezcenna. :)
Oczywiście nie wykorzystuję nawet 10% możliwości programu :P
Aha... program umożliwia edytowanie grafiki 9.png, jeśli to kogoś interesuje.

No taaaa... miodności miodnościami. Teraz trochę straszenia.
Niestety program ma spore wymagania sprzętowe... sugerowane jest 2 GB RAM, 21-calowy ekran 1080p, wymagany .Net 4.5...

http://virtuous-ten-studio.com/index.php/system-requirements

Trochę to dużo jak na narzędzie do takich celów jakie realizuje...

Nie mniej polecam to narzędzie dla dłubaczy, którzy chcieliby poznać tą drugą stronę mocy... No chociażby do pooglądania. :P



Ku pamięci (mięci kupa...)


No i wszystko byłoby ach, och i w ogóle  oraju gdyby nie... Właśnie.

Należy pamiętać, że nie zawsze i nie wszystkie pliki dadzą się poprawnie rozłożyć i/lub złożyć. Znaczy... Pewnie się i dadzą, ale mnie nie są znane te sztuczki-magiczki uprawiane przez niektórych deweloperów i kucharzy.
Ostatnio np. próbowałem rozłożyć apki z HTC (Sense?)... Niestety, bez powodzenia. Mimo niemiłosiernego faflowania frameworkami nie dałem rady... Co prawda one już były modyfikowane przez "kogoś"... Generalnie widać, że się da, ale ja tego nie potrafiłem. Podobnie będzie, jak się domyślam, z plikami CyanogenModa - tutaj chyba trzeba mieć "specjalne narzędzia".
Ze składaniem też może być niejaki problem w przypadku niektórych apek. Czasami zdarza się tak, że podczas składania kompilator znajdzie jakieś niespójności w strukturze - a dokładnie w treści - plików. No i pozamiatane.
Podobno da się to obejść, ale trzeba użyć narzędzi stricte deweloperskich...
Frustrujące deko...



Zakończenie


Myślę, że tyle materiału wystarczy by uczciwie przygotować się do pracy od strony softwareowej i mentalnej.
Sposobu modyfikacji poszczególnych plików nie opisywałem rozmyślnie - każdy typ pliku to osobna bajka a te bajki są już do znalezienia praktycznie od ręki na każdym forum mającym cokolwiek wspólnego z systemem Android - nawet i na tym :)

Tym samym, życzę smacznego. :)