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");
        }
    });
}


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow