Uten videre, la oss komme i gang ..!
TRINN – 1: Åpne Android Studio
Hvis du ikke har det, kan du laste det ned her: lenke.
TRINN – 2: Aktivitetsvalg
Opprett et nytt Android Studio-prosjekt. (Se bildet nedenfor)
Jeg holder denne opplæringen enkel, vi trenger ikke lage noen aktivitet siden vi bare endrer fargen på statuslinjens klokke.
Velg Ingen aktivitet og gå til Neste.
TRINN – 3: Prosjektkonfigurasjon
Angi navnet og pakkenavnet for applikasjonen din. Hold språket som Java, hvis du er kjent med Kotlin, gå med det – det blir ikke så mye hard koding, da dette er en slags «hallo-world» app / modulutvikling.
Jeg holder minimums-API nivå til 15.
Trykk deretter på Fullfør-knappen.
TRINN – 4: Endre build.gradle (app) & Legg til nedenfor avhengigheter:
Synkroniser deretter prosjektet.
TRINN – 5: Endre manifest.xml-filen:
Legg til metadata-koder nedenfor i applikasjonskoden:
Navnet skal være xposedmodule
og verdien true
. La ressursen være tom. Gjenta deretter det samme for xposedminversion
(API-versjonen fra forrige trinn) og xposeddescription
(en veldig kort beskrivelse av modulen din).
TRINN – 6: Opprett en klasse:
package com.myfirstxposedmodule;
public class MyModule {
}
Dette er vår klasse som vi vil endre i fremtiden.
TRINN – 7: Opprett og modifiser xposed_init-fil:
Endre katalogvisningen til prosjektvisningen. Naviger til app > src > main. Høyreklikk på hovedmenyen og velg ny > -katalog.
Gi den navn: assets
Høyreklikk i den nylig opprettede assets
-katalogen, velg ny > -fil.
Gi den navnet: xposed_init
(velg text
hvis den ber om filtype).
Inne i xposed_init
-filen, legg til fullt navn av vår java-klasse. dvs. i vårt tilfelle vil det være som:
com.myfirstxposedmodule.MyModule
Dette er hvordan Xposed-rammeverket vil identifisere modulen vår og laste den på bagasjerommet. Denne filen vil fortelle rammeverket hvilke klasser som skal lastes inn, som vi også ser i loggene.
TRINN – 8: Endre MyModule-klassen:
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.
Nå, la oss prøve ved å sette en loggfunksjon i den handleLoadPackage
-metoden:
XposedBridge.log("Loaded app: " + lpparam.packageName);
Dette vil skrive ut de lastede modulene. Vanligvis logges disse loggene i denne filen: /data/data/de.robv.android.exposed.installer/log/debug.log
(som er lett tilgjengelig via Xposed Installer).
TRINN – 9: Kjør koden:
Hvis du prøver direkte å kjør dette fra android studio, får du denne feilen. Noe som er ok fordi vi ikke har noen aktivitet akkurat nå.
Uansett, ikke bekymre deg, jeg har en løsning. Bare rediger Kjør konfigurasjon og endre Startalternativ fra Standardaktivitet til Ingenting, og velg Ok.
Prøv igjen å kjøre (Windows: Shift + F10).
Ved vellykket kjøring på enheten din, Jeg kan se denne modulen i Xposed Installer-appens modulliste. Som vist i bildet nedenfor, kan du også se beskrivelsesteksten som vi hadde angitt i manifestfilen.
Bare aktiver den modulen ved å merke av i boksen og starte enheten på nytt.Etter omstart, åpner du Xposed Installer-applikasjonen og åpner loggene (du kan også åpne loggfilen som jeg nevnte ovenfor banen). Du vil se linjer som dette:
Nå som du vet hvordan du oppretter og kjører Xposed-modulen, kan vi gå lenger ned for å se på statuslinjens kode og bruke noen av våre egne implementeringer.
TRINN – 10: Graver deg inn i statuslinjens kode:
Nå er vi interessert i å få klokken (tekst) fra statuslinjen (som ligger i com.android.systemui
-pakke). Som du vet er Android en åpen kildekode, slik at du kan se innsiden av koden. Du kan laste ned kildekoden til android fra DENNE lenken. Avhengig av Android-versjonen din og rom-en din, kan det være noen endringer. Per nå er vi bare interessert i å finne klokkekoden vår. Det er en Clock.java
klasse inne et sted i com.android.systemui
pakke og denne klassen utvider TextView
som betyr at du kan behandle dette lignende som en TextView. DETTE er lenken til den klassen. Det er en metode som oppdaterer tiden på statuslinjen hvis navn er updateClock()
. Se på utdraget nedenfor:
Nå, hva vi vil ha? Vi vil kjøre koden vår når denne metoden blir utført. Hvilket vi vil gjøre i neste trinn, som også er kjent som å koble til en metode.
TRINN – 11: Hekting av metoden:
XposedHelper
er en klasse som gir noen hjelpemetoder. En hjelpermetode som vi trenger er findAndHookMethod
som tar hele klassenavnet i String
, klasselaster (vi kan få det fra XC_LoadPackage.LoadPackageParam
fra handleLoadPackage
), metodens navn som vi ønsker å spore (updateClock
i vårt tilfelle) i String
og XC_MethodHook
tilbakeringing (som ganske enkelt er en tilbakeringing). Nedenfor vil være koden vår
I koden ovenfor kan du se at det er to metoder som jeg har implementert i den anonyme klassen XC_MethodHook
som er beforeHookedMethod
og afterHookedMethod
. Som navnet antyder, vil man først bli henrettet før den hektede metoden, og den sistnevnte vil bli henrettet etter den hektede metoden (updateClock
i vårt tilfelle). Parameterne for argumenter og returtyper håndteres av MethodHookParam
argument. Men per nå vil vi bare endre statuslinjens klokkefarge, vi trenger ganske enkelt afterHookedMethod
.
Vi trenger tilgang til den TextView
objekt, som vi kan få fra param.thisObject
– dette blir det samme som this
søkeord i Clock.java
klasse. Så kan vi kaste den til TextView
, og så kan vi ganske enkelt endre fargen på det TextView
-objektet, og vi kan også endre teksten som jeg gjorde :
TRINN – 12: Kjør modulen:
Kjør koden og start enheten på nytt. Du vil kunne se klokken din i rødt og den emoji-teksten vi la til.
Det er det !! Jeg vet at omstart suger! men hei, du har laget din egen Xposed-modul, er det ikke bra ?? !!