Uden yderligere ado, lad os komme i gang ..!
TRIN – 1: Åbn Android Studio
Hvis du har det ikke, du kan downloade det herfra: link.
TRIN – 2: Aktivitetsvalg
Opret et nyt Android Studio-projekt. (Se billedet nedenfor)
Jeg holder denne vejledning enkel, vi behøver ikke oprette nogen aktivitet, da vi bare ændrer farven på statusbjælkens ur.
Vælg Ingen aktivitet og gå til Næste.
TRIN – 3: Projektkonfiguration
Angiv navn og pakkenavn til din applikation. Hold sproget som Java, hvis du er fortrolig med Kotlin, skal du gå med det – der vil ikke være så meget hård kodning, da dette er en slags ‘hello-world’ app / moduludvikling.
Jeg holder minimum API niveau til 15.
Tryk derefter på knappen Udfør.
TRIN – 4: Rediger din build.gradle (app) & Tilføj nedenstående afhængigheder:
Synkroniser derefter projektet.
TRIN – 5: Rediger din manifest.xml-fil:
Tilføj nedenstående metadatatags inde i applikationstagget:
Navnet skal være xposedmodule
og værdien true
. Lad ressourcen være tom. Gentag derefter det samme for xposedminversion
(API-versionen fra forrige trin) og xposeddescription
(en meget kort beskrivelse af dit modul).
TRIN – 6: Opret en klasse:
package com.myfirstxposedmodule;
public class MyModule {
}
Dette er vores klasse, som vi vil ændre i fremtiden.
TRIN – 7: Opret og rediger xposed_init-fil:
Skift katalogvisningen til projektvisningen. Naviger til app > src > main. Højreklik på main og vælg nyt > -mappe.
Navngiv det: assets
Højreklik i den nyligt oprettede assets
-mappe skal du vælge ny > -fil.
Navngiv den: xposed_init
(vælg text
hvis den beder om filtype).
Inde i xposed_init
-fil, tilføj fuldt navn af vores java-klasse. dvs. i vores tilfælde vil det være som:
com.myfirstxposedmodule.MyModule
Sådan identificerer Xposed-rammen vores modul og indlæser det på boot. Denne fil fortæller rammen, hvilke klasser der skal indlæses, som vi også vil se i logfilerne.
TRIN – 8: Rediger MyModule-klasse:
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 {
}
}
Implementer IXposedHookLoadPackage
og implementer metoden handleLoadPackage
som vist ovenfor.
Lad os nu prøve ved at placere en logfunktion inde i den handleLoadPackage
metode:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Dette udskriver de indlæste moduler. Generelt er disse logfiler logget inde i denne fil: /data/data/de.robv.android.exposed.installer/log/debug.log
(som er let tilgængelig via Xposed Installer).
TRIN – 9: Kør koden:
Hvis du direkte prøver at kør dette fra android-studiet, får du denne fejl. Hvilket er ok, fordi vi ikke har nogen aktivitet lige nu.
Alligevel skal du ikke bekymre dig, jeg har en løsning. Bare rediger Run-konfigurationen, og skift Launch Option fra standardaktivitet til ingenting, og vælg Ok.
Prøv igen at køre (Windows: Shift + F10).
Ved vellykket kørsel på din enhed skal du ‘ Jeg kan se dette modul på Xposed Installer-appens modulliste. Som vist i nedenstående billede kan du også se beskrivelsesteksten, som vi havde indtastet i manifestfilen.
Bare aktiver dette modul ved at markere afkrydsningsfeltet og genstarte din enhed.Efter genstart skal du åbne Xposed Installer-applikationen og åbne logfilerne (du kan også åbne den logfil, som jeg nævnte ovenfor, er stien). Du vil se linjer som denne:
Nu hvor du ved, hvordan du opretter og kører Xposed-modulet, kan vi gå dybere ned for at se på statuslinjens kode og anvende nogle af vores egne implementeringer.
TRIN – 10: Grav ind i statuslinjens kode:
Nu er vi interesserede i at få uret (tekst) fra statuslinjen (som ligger i com.android.systemui
pakke). Som du ved, er Android en open source-driftskilde, så du kan se de indvendige ting i koden. Du kan downloade kildekoden til android fra DETTE link. Afhængigt af din Android-version og din rom kan der være nogle ændringer. Fra nu af er vi kun interesseret i at finde vores urs kode. Der er en Clock.java
klasse inde et eller andet sted i com.android.systemui
pakke, og denne klasse udvider TextView
hvilket betyder at du kan behandle dette lignende som en TextView. DETTE er linket til den klasse. Der er en metode, der opdaterer tiden på statuslinjen, hvis navn er updateClock()
. Se på nedenstående uddrag:
Hvad vil vi nu? Vi vil køre vores kode, når denne metode bliver udført. Hvilket vi gør i det næste trin, som også er kendt som at tilslutte en metode.
TRIN – 11: Tilslutning af metoden:
XposedHelper
er en klasse, der giver nogle hjælpemetoder. En hjælpemetode, som vi har brug for, er findAndHookMethod
, der tager det fulde klassenavn i String
, klasselæsser (vi kan få det fra XC_LoadPackage.LoadPackageParam
fra handleLoadPackage
), metodens navn, som vi vil spore (updateClock
i vores tilfælde) i String
og XC_MethodHook
call-back (som simpelthen er et tilbagekald). Nedenfor vil være vores kode
I ovenstående kode kan du se, at der er to metoder, som jeg har implementeret i den anonyme klasse XC_MethodHook
, som er beforeHookedMethod
og afterHookedMethod
. Som navnet antyder, bliver den første udført før den tilsluttede metode, og den sidste vil blive udført efter den tilsluttede metode (updateClock
i vores tilfælde). Parameterne for argumenter og returtyper håndteres af MethodHookParam
argument. Men fra nu af vil vi bare ændre statuslinjens urfarve, vi har simpelthen brug for afterHookedMethod
.
Vi har brug for adgang til den TextView
objekt, som vi kan få fra param.thisObject
– dette vil være det samme som this
nøgleord i Clock.java
klasse. Så kan vi kaste det til TextView
, og så kan vi simpelthen ændre farven på det TextView
objekt og også ændre teksten som jeg gjorde :
TRIN – 12: Kør modulet:
Kør koden, og genstart din enhed igen. Du kan se dit ur i rødt og den emoji-tekst, vi tilføjede.
Det er det !! Jeg ved, at genstart suger! men hej, du har oprettet dit eget Xposed-modul, er det ikke godt ?? !!