Bez dalších okolků, pojďme začít!!
KROK – 1: Otevřete Android Studio
Pokud nemáte jej, můžete si jej stáhnout zde: odkaz.
KROK – 2: Výběr aktivity
Vytvořte nový projekt Android Studio. (Viz obrázek níže)
Tento tutoriál udržuji jednoduchý, nemusíme vytvářet žádnou aktivitu, protože právě měníme barvu hodin stavového řádku.
Vyberte Žádná aktivita a přejděte na Další.
KROK – 3: Konfigurace projektu
Zadejte název a název balíčku pro vaši aplikaci. Ponechte jazyk jako Javu, pokud jste obeznámeni s Kotlinem, jděte do toho – nebude tu tolik tvrdého kódování, protože se jedná o druh vývoje aplikace / modulu „hello-world“.
Dodržuji minimální API úroveň na 15.
Poté stiskněte tlačítko Dokončit.
KROK – 4: Upravte svůj build.gradle (aplikaci) & Přidat níže závislosti:
Potom synchronizujte projekt.
KROK – 5: Upravte soubor manifest.xml:
Přidejte níže tagy metadat uvnitř tagu aplikace:
Název by měl být xposedmodule
a hodnota true
. Zdroj nechte prázdný. Poté opakujte totéž pro xposedminversion
(verze API z předchozího kroku) a xposeddescription
(velmi krátký popis vašeho modulu).
KROK – 6: Vytvoření třídy:
package com.myfirstxposedmodule;
public class MyModule {
}
Toto je naše třída, kterou v budoucnu upravíme.
KROK – 7: Vytvoření a úprava souboru xposed_init:
Změňte zobrazení adresáře na zobrazení Projekt. Přejděte do aplikace > src > main. Klikněte pravým tlačítkem na hlavní a vyberte nový > adresář.
Pojmenujte jej: assets
Klikněte pravým tlačítkem v nedávno vytvořeném assets
adresáři vyberte nový > soubor.
Pojmenujte jej: xposed_init
(vyberte text
pokud to vyžaduje typ souboru).
Uvnitř souboru xposed_init
přidejte celé jméno naší třídy Java. tj. v našem případě to bude vypadat takto:
com.myfirstxposedmodule.MyModule
Takto Xposed framework identifikuje náš modul a načte jej na boot. Tento soubor řekne rozhraní, které třídy se mají načíst, což také uvidíme v protokolech.
KROK – 8: Upravit třídu 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 {
}
}
Implementujte IXposedHookLoadPackage
a implementujte metodu handleLoadPackage
, jak je uvedeno výše.
Teď si to vyzkoušíme vložením funkce protokolu do této handleLoadPackage
metody:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Tím se vytisknou načtené moduly. Obecně se tyto protokoly zaznamenávají do tohoto souboru: /data/data/de.robv.android.exposed.installer/log/debug.log
(který je snadno přístupný pomocí instalačního programu Xposed).
KROK – 9: Spusťte kód:
Pokud se přímo pokusíte spusťte to ze studia Android, zobrazí se tato chyba. Což je v pořádku, protože právě teď neprovádíme žádnou aktivitu.
Každopádně se nebojte, mám řešení. Stačí upravit konfiguraci spuštění a změnit možnost spuštění z výchozí aktivity na nic a vybrat OK.
Nyní se znovu pokuste spustit (Windows: Shift + F10).
Po úspěšném spuštění na vašem zařízení Tento modul uvidím v seznamu modulů aplikace Xposed Installer. Jak je znázorněno na následujícím obrázku, můžete také vidět text popisu, který jsme zadali do souboru manifestu.
Aktivujte tento modul zaškrtnutím políčka a restartujte zařízení.Po restartu otevřete aplikaci Xposed Installer a otevřete protokoly (můžete také otevřít soubor protokolu, který jsem výše zmínil o jeho cestě). Uvidíte řádky jako toto:
Nyní, když víte, jak vytvořit a spustit modul Xposed, můžeme jít hlouběji do hloubky, abychom se podívali na kód stavového řádku a použili některé z našich vlastních implementací.
KROK – 10: Kopání do kódu stavového řádku:
Nyní nás zajímá získání hodin (textu) ze stavového řádku (který sídlí v balíček). Jak víte, Android je operační zdroj s otevřeným zdrojovým kódem, takže můžete vidět vnitřní obsah kódu. Zdrojový kód systému Android si můžete stáhnout z TOTO odkazu. V závislosti na verzi systému Android a vašem rom mohou nastat některé změny. Od této chvíle nás zajímá pouze nalezení kódu našich hodin. Uvnitř balíčku com.android.systemui
je někde Clock.java
třída a tato třída rozšiřuje TextView
což znamená že s tímto můžete zacházet podobně jako s TextView. TOTO je odkaz na tuto třídu. Existuje jedna metoda, která aktualizuje čas na stavovém řádku, jehož název je updateClock()
. Podívejte se na níže uvedený úryvek:
Co teď chceme? Chceme spustit náš kód, kdykoli je tato metoda spuštěna. Což uděláme v dalším kroku, který se také nazývá hákování metody.
KROK – 11: Hákování metody:
The XposedHelper
je třída, která poskytuje některé pomocné metody. Jednou z pomocných metod, kterou budeme potřebovat, je findAndHookMethod
, která převezme celý název třídy v String
zavaděči tříd (můžeme ho získat z XC_LoadPackage.LoadPackageParam
z handleLoadPackage
), název metody, kterou chceme sledovat (v našem případě updateClock
) v String
a XC_MethodHook
zpětném volání (což je jednoduše zpětné volání). Níže bude náš kód
Ve výše uvedeném kódu můžete vidět, že existují dvě metody, které jsem implementoval v anonymní třídě XC_MethodHook
, které jsou beforeHookedMethod
a afterHookedMethod
. Jak název napovídá, první bude spuštěn před zaháknutou metodou a druhý bude proveden po zaháknuté metodě (v našem případě updateClock
). Parametry pro argumenty a návratové typy jsou zpracovány argumentem MethodHookParam
. Ale teď už jen chceme změnit barvu hodin na stavovém řádku, jednoduše budeme potřebovat afterHookedMethod
.
Budeme potřebovat přístup k tomu TextView
objekt, který můžeme získat z param.thisObject
– bude to stejné jako this
klíčové slovo v Clock.java
třída. Pak jej můžeme vrhnout na TextView
a pak můžeme jednoduše změnit barvu tohoto TextView
objektu a také upravit text jako já :
KROK – 12: Spusťte modul:
Spusťte kód a znovu restartujte zařízení. Uvidíte své hodiny červeně a ten text emodži, který jsme připojili.
To je vše !! Vím, že restart je na hovno! ale hej, vytvořili jste si vlastní Xposed modul, není to tak skvělé ?? !!