niedziela, 11 sierpnia 2013

"Theming Androida" - Wstęp

Podstawowy wygląd Androida może "nie zadowalać" zaawansowanego użytkownika. w poprzednim poście o własnym romie pisałem na temat podstawowych modyfikacji - jednak sama podmiana grafik dla kogoś może być niewystarczająca. Dziś napiszę co nieco o Theming'u androida.
Wymagania:
Nowy "Themer" powinien mieć styczność z pisaniem aplikacji. Android korzysta z technologi XML która pomimo tego że zawiera składnie angielskie jest dosyć trudna do ogarnięcia. "Wygląd" Androida jest również w pliku xml podobnie jak w pliku Layout'u aplikacji - dlatego dobrze było by gdybyś się zapoznał z tym.
Narzędzia:
Edytor tekstowy (polecam Notepad++), edytor graficzny (zaawansowany np Gimp albo Photoshop) , aczkolwiek najważniejszą rzeczą jest narzędzie APKTOOL które jest dostępne zarówno na Windows'a , Linuxa i Mac'a. Do pobrania.

https://code.google.com/p/android-apktool/downloads/list
Potrzebujemy główny plik z Apktool (apktool1.5.2.tar.bz2) i plik konkretny dla naszego systemu.

w folderze apktool do poprawnego działania musimy mieć 3 plik - apktool.jar , aapt i apktool. Pierwszy to "jądro" apktool , pozostałe służą do jego "obsługi".

Składnie możemy zobaczyć po wpisaniu w wiersz poleceń apktool


Apktool v1.5.2 - a tool for reengineering Android apk files
Copyright 2010 Ryszard Wiśniewski 
with smali v1.4.1, and baksmali v1.4.1
Updated by @iBotPeaches  
Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

Usage: apktool [-q|--quiet OR -v|--verbose] COMMAND [...]

COMMANDs are:

    d[ecode] [OPTS]  []
        Decode  to .

        OPTS:

        -s, --no-src
            Do not decode sources.
        -r, --no-res
            Do not decode resources.
        -d, --debug
            Decode in debug mode. Check project page for more info.
        -b, --no-debug-info
            Baksmali -- don't write out debug info (.local, .param, .line, etc.)
        -f, --force
            Force delete destination directory.
        -t , --frame-tag 
            Try to use framework files tagged by .
        --frame-path 
            Use the specified directory for framework files
        --keep-broken-res
            Use if there was an error and some resources were dropped, e.g.:
            "Invalid config flags detected. Dropping resources", but you
            want to decode them anyway, even with errors. You will have to
            fix them manually before building.

    b[uild] [OPTS] [] []
        Build an apk from already decoded application located in .

        It will automatically detect, whether files was changed and perform
        needed steps only.

        If you omit  then current directory will be used.
        If you omit  then /dist/
        will be used.

        OPTS:

        -f, --force-all
            Skip changes detection and build all files.
        -d, --debug
            Build in debug mode. Check project page for more info.
        -a, --aapt
            Loads aapt from specified location.

    if|install-framework  [] --frame-path [] 
        Install framework file to your system.

For additional info, see: http://code.google.com/p/android-apktool/
For smali/baksmali info, see: http://code.google.com/p/smali/


Teraz wypadało by coś zrobić :D

Dzięki temu narzędziu będziemy mogli zmienić layout i działanie prawie że każdej aplikacji (w miare naszych umiejętności) ale wcześniej musimy "przygotować" go do obsługi. Potrzebne nam do tego będzie plik framework-res.apk z naszego telefonu.

Na dzień dobry instalujemy naszego frameworka.


> apktool if framework-res.apk
gdy zobaczymy komunikat że został poprawnie zainstalowany bierzemy się za dekompilacje apki do zmiany - nawet do dekompilacji naszego frameworka.

> apktool d framework-res.apk
W ten sposób utworzy się nam nowy folder w którym będziemy mieli pliki graficzne , xml layout'ów i zmiennych oraz pliki wykonawcze w formacie SMALI. Jego rozumienie jest dosyć "trudne".

SMALI (po mojemu) to format zdekompresowanych plików wykonawczych androida , które "rozumie" wirtualna maszyna Androida (Dalvik), nie ma w nim pętli (co może na pierwszy rzut oka przerazić programistę który jest do nich przyzwyczajony).
Do Samego Themingu nie będziemy potrzebowali zmian w tych plikach. Wystarczą nam pliki graficzne (o których wspomniałem w Proste Modyfikacje ) oraz pliki XML , które już teraz są dla nas zrozumiałe.

Gdy już skończymy modyfikować , musimy "zbudować" aplikacje.
> apktool b nazwa_folderu_naszej_aplikacji nowa_nazwa_aplikacji
 w przypadku Frameworka będzie to
> apktool b framework-res new_framework.apk
plik new_framework.apk to nasz skompilowany plik. Teraz rzecz "najważniejsza". Ze źródłowej aplikacji (tutaj - > framework-res.apk) musimy skopiować folder META-INF do nowej aplikacji (tutal -> new_framework.apk) gdyż nasza nowa aplikacja nie ma certyfikatów przez co android nie załaduje jej.

Po skopiowaniu wrzucamy nową aplikacje na telefon i podmieniamy ją ze starą.

Mam nadzieję że w najbliższym czasie będę miał narzędzia do sprawdzenia kilku modyfikacji i publikowania ich na blogu. Thening to naprawdę fajna zabawa która pozwala odpicować Androida według upodobań.

Miłej zabawy! ;)