Bez zbędnych ceregieli, zacznijmy ..!
KROK – 1: Otwórz Android Studio
Jeśli nie masz go, możesz go pobrać stąd: link.
KROK – 2: Wybór zajęć
Utwórz nowy projekt Android Studio. (Zobacz zdjęcie poniżej)
Utrzymuję ten samouczek w prostocie, nie musimy tworzyć żadnej aktywności, ponieważ zmieniamy tylko kolor zegara paska stanu.
Wybierz opcję Brak aktywności i przejdź do Dalej.
KROK – 3: Konfiguracja projektu
Określ nazwę i nazwę pakietu dla swojej aplikacji. Zachowaj język jako Javę, jeśli znasz Kotlin, idź z tym – nie będzie zbyt twardego kodowania, ponieważ jest to rodzaj programowania aplikacji / modułu „hello-world”.
Utrzymuję minimalne API poziom do 15.
Następnie naciśnij przycisk Zakończ.
KROK – 4: Zmodyfikuj build.gradle (aplikację) & Dodaj poniższe zależności:
Następnie zsynchronizuj projekt.
KROK – 5: Zmodyfikuj swój plik manifest.xml:
Dodaj poniżej tagi metadanych wewnątrz tagu aplikacji:
Powinna mieć nazwę xposedmodule
, a wartość true
. Pozostaw zasób pusty. Następnie powtórz to samo dla xposedminversion
(wersja API z poprzedniego kroku) i xposeddescription
(bardzo krótki opis Twojego modułu).
KROK – 6: Utwórz klasę:
package com.myfirstxposedmodule;
public class MyModule {
}
To jest nasza klasa, którą zmodyfikujemy w przyszłości.
KROK – 7: Utwórz i zmodyfikuj plik xposed_init:
Zmień widok katalogu na widok projektu. Przejdź do aplikacji > src > main. Kliknij prawym przyciskiem myszy główny i wybierz nowy katalog >.
Nazwij go: assets
Kliknij prawym przyciskiem myszy w niedawno utworzonym katalogu assets
wybierz nowy plik >.
Nazwij go: xposed_init
(wybierz text
, jeśli zapyta o typ pliku).
Wewnątrz xposed_init
pliku, dodaj pełną nazwę naszej klasy java. czyli w naszym przypadku będzie to wyglądać następująco:
com.myfirstxposedmodule.MyModule
W ten sposób framework Xposed zidentyfikuje nasz moduł i załaduje go podczas startu. Ten plik powie frameworkowi, które klasy załadować, co również zobaczymy w dziennikach.
KROK – 8: Zmodyfikuj klasę MyModule:
package com.myfirstxposedmodule;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XposedBridge;
public class MyModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
}
}
Zaimplementuj IXposedHookLoadPackage
i zaimplementuj metodę handleLoadPackage
, jak pokazano powyżej.
Teraz wypróbujmy umieszczając funkcję dziennika wewnątrz metody handleLoadPackage
:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Spowoduje to wydrukowanie załadowanych modułów. Ogólnie te dzienniki są rejestrowane w tym pliku: /data/data/de.robv.android.exposed.installer/log/debug.log
(który jest łatwo dostępny za pośrednictwem Xposed Installer).
KROK – 9: Uruchom kod:
Jeśli spróbujesz bezpośrednio uruchom to ze studia Android, otrzymasz ten błąd. Co jest w porządku, ponieważ w tej chwili nie prowadzimy żadnej aktywności.
W każdym razie nie martw się, mam rozwiązanie. Po prostu edytuj konfigurację Uruchom i zmień opcję Uruchom z Default Activity na Nothing i wybierz OK.
Teraz ponownie spróbuj uruchomić (Windows: Shift + F10).
Po pomyślnym uruchomieniu na urządzeniu, Będę mógł zobaczyć ten moduł na liście modułów aplikacji Xposed Installer. Jak pokazano na poniższym obrazku, możesz również zobaczyć tekst opisu, który wprowadziliśmy w pliku manifestu.
Po prostu aktywuj ten moduł, zaznaczając pole i zrestartuj urządzenie.Po ponownym uruchomieniu otwórz aplikację Xposed Installer i otwórz logi (możesz też otworzyć plik dziennika, o którym wspomniałem powyżej, jest to ścieżka). Zobaczysz takie linie:
Teraz, gdy wiesz, jak utworzyć i uruchomić moduł Xposed, możemy przejść dalej, aby przyjrzeć się kodowi paska stanu i zastosować niektóre z naszych własnych implementacji.
KROK – 10: Przeglądanie kodu paska stanu:
Teraz interesuje nas pobranie zegara (tekstu) z paska stanu (znajdującego się w com.android.systemui
pakiet). Jak wiesz, Android jest operacyjnym źródłem typu open source, dzięki czemu możesz zobaczyć zawartość kodu. Możesz pobrać kod źródłowy Androida z TEGO linku. W zależności od wersji Androida i pamięci ROM mogą wystąpić pewne zmiany. Na razie interesuje nas tylko znalezienie kodu naszego zegara. Gdzieś w pakiecie com.android.systemui
znajduje się klasa Clock.java
, która jest rozszerzeniem TextView
, co oznacza że możesz traktować to podobnie jak TextView. TO jest link do tej klasy. Jest jedna metoda, która aktualizuje czas na pasku stanu, a jej nazwa to updateClock()
. Spójrz na poniższy fragment:
Czego teraz chcemy? Chcemy uruchamiać nasz kod za każdym razem, gdy ta metoda zostanie wykonana. Co zrobimy w następnym kroku, znanym również jako przechwytywanie metody.
KROK – 11: Podpięcie metody:
XposedHelper
to klasa udostępniająca kilka metod pomocniczych. Jedną z metod pomocniczych, których będziemy potrzebować, jest findAndHookMethod
, która przyjmuje pełną nazwę klasy w String
, moduł ładujący klasy (możemy go pobrać z XC_LoadPackage.LoadPackageParam
from handleLoadPackage
), nazwa metody, którą chcemy śledzić (w naszym przypadku updateClock
) w String
i XC_MethodHook
oddzwonieniu (które jest po prostu oddzwonieniem). Poniżej znajduje się nasz kod
W powyższym kodzie widać dwie metody, które zaimplementowałem w klasie anonimowej XC_MethodHook
, które są beforeHookedMethod
i afterHookedMethod
. Jak sama nazwa wskazuje, pierwsza zostanie wykonana przed przechwyconą metodą, a druga – po przechwyconej metodzie (w naszym przypadku updateClock
). Parametry argumentów i typów zwracanych są obsługiwane przez argument MethodHookParam
. Ale na razie chcemy tylko zmienić kolor zegara paska stanu, będziemy po prostu potrzebować afterHookedMethod
.
Będziemy potrzebować dostępu do tego TextView
, który możemy uzyskać z param.thisObject
– będzie to to samo, co this
słowo kluczowe w Clock.java
class. Następnie możemy rzucić go na TextView
i po prostu zmienić kolor tego TextView
obiektu, a także zmodyfikować tekst tak jak ja :
KROK – 12: Uruchom moduł:
Uruchom kod i ponownie uruchom ponownie urządzenie. Będziesz mógł zobaczyć swój zegar na czerwono i dołączony przez nas tekst emoji.
To wszystko !! Wiem, że ponowne uruchamianie jest do bani! ale hej, stworzyłeś swój własny moduł Xposed, czyż to nie wspaniałe ?? !!