Zoeken…


Een Xposed-module maken

Xposed is een framework waarmee u methodeaanroepen van andere apps kunt koppelen. Wanneer u een wijziging uitvoert door een APK te decompileren, kunt u opdrachten rechtstreeks invoegen / wijzigen waar u maar wilt. U moet de APK echter naderhand opnieuw compileren / ondertekenen en u kunt alleen het hele pakket distribueren. Met Xposed kunt u uw eigen code voor of na methoden injecteren of hele methoden volledig vervangen. Helaas kunt u Xposed alleen op geroote apparaten installeren. Gebruik Xposed wanneer u het gedrag van andere apps of het kern-Android-systeem wilt manipuleren en niet het gedoe van decompileren, opnieuw compileren en ondertekenen van APK wilt doorlopen.

Eerst maakt u een standaard-app zonder activiteit in Android Studio.

Vervolgens moet u de volgende code opnemen in uw build.gradle :

repositories {
    jcenter();
}

Daarna voegt u de volgende afhankelijkheden toe:

provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'

Nu moet u deze tags in de applicatietag plaatsen die u in AndroidManifest.xml vindt, zodat Xposed uw module herkent:

<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" />

OPMERKING: Vervang altijd 82 door de nieuwste Xposed-versie .

Een methode vasthaken

Maak een nieuwe klasse die IXposedHookLoadPackage implementeert en implementeer de handleLoadPackage methode:

public class MultiPatcher implements IXposedHookLoadPackage
{
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
    {
        
    }
}

In de methode vink je loadPackageParam.packageName voor de pakketnaam van de app die je wilt loadPackageParam.packageName :

@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
    if (!loadPackageParam.packageName.equals("other.package.name"))
    {
        return;
    }
}

Nu kunt u uw methode koppelen en deze manipuleren voordat de code wordt uitgevoerd of na:

@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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow