Utan vidare ado, låt oss komma igång ..!
STEG – 1: Öppna Android Studio
Om du har inte den, du kan ladda ner den härifrån: länk.
STEG – 2: Aktivitetsval
Skapa ett nytt Android Studio-projekt. (Se bilden nedan)
Jag håller den här handledningen enkel, vi behöver inte skapa någon aktivitet eftersom vi bara ändrar färgen på statusfältets klocka.
Välj Ingen aktivitet och gå till Nästa.
STEG – 3: Projektkonfiguration
Ange namnet och paketnamnet för din applikation. Behåll språket som Java, om du är bekant med Kotlin, gå med det – det kommer inte att bli så mycket hårdkodning eftersom det här är en typ av ”Hello-World” -app / modulutveckling.
Jag håller minsta API nivå till 15.
Klicka sedan på Slutför-knappen.
STEG – 4: Ändra din build.gradle (app) & Lägg till nedanstående beroenden:
Synkronisera sedan projektet.
STEG – 5: Ändra din manifest.xml-fil:
Lägg till metadatataggar nedan i applikationstaggen:
Namnet ska vara xposedmodule
och värdet true
. Lämna resursen tom. Upprepa sedan samma för xposedminversion
(API-versionen från föregående steg) och xposeddescription
(en mycket kort beskrivning av din modul).
STEG – 6: Skapa en klass:
package com.myfirstxposedmodule;
public class MyModule {
}
Detta är vår klass som vi kommer att ändra i framtiden.
STEG – 7: Skapa och ändra xposed_init-fil:
Ändra katalogvyn till projektvyn. Navigera till app > src > main. Högerklicka på huvud och välj ny > -katalog.
Namnge den: assets
Högerklicka i den nyligen skapade assets
-katalogen väljer du ny > -fil.
Namnge den: xposed_init
(välj text
om den frågar efter filtyp).
Inne i xposed_init
-fil, lägg till fullständigt namn i vår java-klass. det vill säga i vårt fall kommer det att vara som:
com.myfirstxposedmodule.MyModule
Så här kommer Xposed-ramverket att identifiera vår modul och ladda den på bagageutrymmet. Den här filen visar ramverket vilka klasser som ska laddas, vilket vi också kommer att se i loggarna.
STEG – 8: Ändra MyModule-klass:
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 {
}
}
Implementera IXposedHookLoadPackage
och implementera metoden handleLoadPackage
som visas ovan.
Nu ska vi testa genom att placera en loggfunktion i den handleLoadPackage
-metoden:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Detta skriver ut de laddade modulerna. Generellt loggas dessa loggar inuti den här filen: /data/data/de.robv.android.exposed.installer/log/debug.log
(som är lättillgänglig via Xposed Installer).
STEG – 9: Kör koden:
Om du försöker direkt kör detta från androidstudio, du får det här felet. Vilket är ok eftersom vi inte har någon aktivitet just nu.
Hur som helst, oroa dig inte, jag har en lösning. Redigera bara körkonfigurationen och ändra startalternativet från standardaktivitet till ingenting och välj ok.
Försök igen att köra igen (Windows: Shift + F10).
När du lyckats köra på din enhet, du ’ Jag kan se den här modulen i Xposed Installer-appens modullista. Som visas i bilden nedan kan du också se beskrivningstexten som vi hade angett i manifestfilen.
Aktivera bara den modulen genom att markera rutan och starta om enheten.Efter omstart öppnar du Xposed Installer-applikationen och öppnar loggarna (du kan också öppna loggfilen som jag nämnde ovan dess väg). Du kommer att se rader så här:
Nu när du vet hur du skapar och kör Xposed-modulen kan vi gå längre djupt ner för att titta på statusfältets kod och tillämpa några av våra egna implementeringar.
STEG – 10: Gräva in i statusfältets kod:
Nu är vi intresserade av att få klockan (text) från statusfältet (som ligger i com.android.systemui
-paket). Som du vet är Android en öppen källkod, så att du kan se insidan av koden. Du kan ladda ner källkoden för Android från den här länken. Beroende på din Android-version och din rom kan det ändras. Från och med nu är vi bara intresserade av att hitta vår klockkod. Det finns en Clock.java
-klass inuti någonstans i com.android.systemui
-paketet och den här klassen sträcker sig TextView
vilket betyder att du kan behandla detta liknande som en TextView. DETTA är länken till den klassen. Det finns en metod som uppdaterar tiden i statusfältet vars namn är updateClock()
. Titta på utdraget nedan:
Vad vill vi nu? Vi vill köra vår kod när den här metoden körs. Vilket vi ska göra i nästa steg, som också är känt som att koppla en metod.
STEG – 11: Haka i metoden:
XposedHelper
är en klass som ger några hjälpmetoder. En hjälparmetod som vi behöver är findAndHookMethod
som tar hela klassnamnet i String
, klassladdare (vi kan få det från XC_LoadPackage.LoadPackageParam
från handleLoadPackage
), metodnamnet som vi vill spåra (updateClock
i vårt fall) i String
och XC_MethodHook
återuppringning (som helt enkelt är en återuppringning). Nedan kommer att finnas vår kod
I ovanstående kod kan du se att det finns två metoder som jag har implementerat i den anonyma klassen XC_MethodHook
som är beforeHookedMethod
och afterHookedMethod
. Som namnet antyder kommer en att bli exekverad innan den anslutna metoden och den senare kommer att köras efter den anslutna metoden (updateClock
i vårt fall). Parametrarna för argument och returtyper hanteras av argumentet MethodHookParam
. Men från och med nu vill vi bara ändra statusfältets klockfärg, vi behöver helt enkelt afterHookedMethod
.
Vi behöver tillgång till det TextView
-objekt, som vi kan få från param.thisObject
– det här blir detsamma som this
nyckelord i Clock.java
klass. Sedan kan vi kasta den till TextView
och sedan kan vi helt enkelt ändra färgen på det TextView
-objektet och också kan ändra texten som jag gjorde :
STEG – 12: Kör modulen:
Kör koden och starta om enheten igen. Du kommer att kunna se din klocka i rött och den emoji-text som vi bifogade.
Det är det !! Jag vet att omstart suger! men hej, du har skapat din egen Xposed-modul, är det inte så bra ?? !!