Android
Xposed
Ricerca…
Creazione di un modulo Xposed
Xposed è un framework che ti permette di agganciare chiamate di metodo ad altre app. Quando esegui una modifica decompilando un APK, puoi inserire / modificare i comandi direttamente dove vuoi. Tuttavia, sarà necessario ricompilare / firmare l'APK in seguito e sarà possibile distribuire solo l'intero pacchetto. Con Xposed, puoi inserire il tuo codice prima o dopo i metodi, o sostituire completamente interi metodi. Sfortunatamente, puoi installare Xposed solo su dispositivi rooted. Dovresti utilizzare Xposed ogni volta che desideri manipolare il comportamento di altre app o del sistema Android principale e non vuoi passare attraverso la seccatura di decompilare, ricompilare e firmare gli APK.
Innanzitutto, crei un'app standard senza un'attività in Android Studio.
Quindi devi includere il seguente codice nel tuo build.gradle :
repositories {
jcenter();
}
Successivamente, aggiungi le seguenti dipendenze:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Ora devi inserire questi tag all'interno del tag dell'applicazione trovato in AndroidManifest.xml, così Xposed riconosce il tuo modulo:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="YOUR_MODULE_DESCRIPTION" />
<meta-data
android:name="xposedminversion"
android:value="82" />
NOTA: sostituire sempre 82 con l' ultima versione di Xposed .
Agganciare un metodo
Crea una nuova classe implementando IXposedHookLoadPackage
e implementa il metodo handleLoadPackage
:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
All'interno del metodo, controlli loadPackageParam.packageName
come nome del pacchetto dell'app che vuoi collegare:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Ora puoi agganciare il tuo metodo e manipolarlo prima che venga eseguito il codice o dopo:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
XposedHelpers.findAndHookMethod(
"other.package.name",
loadPackageParam.classLoader,
"otherMethodName",
YourFirstParameter.class,
YourSecondParameter.class,
new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
Object[] args = param.args;
args[0] = true;
args[1] = "example string";
args[2] = 1;
Object thisObject = param.thisObject;
// Do something with the instance of the class
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable
{
Object result = param.getResult();
param.setResult(result + "example string");
}
});
}