Sök…


Skapa en Xposed-modul

Xposed är ett ramverk som låter dig ansluta metodsamtal från andra appar. När du gör en modifiering genom att dekompilera en APK kan du infoga / ändra kommandon direkt var du vill. Du måste dock kompilera / underteckna APK efteråt och du kan bara distribuera hela paketet. Med Xposed kan du injicera din egen kod före eller efter metoder, eller ersätta hela metoder helt. Tyvärr kan du bara installera Xposed på rotade enheter. Du bör använda Xposed när du vill manipulera beteendet hos andra appar eller kärn Android-systemet och inte vill gå igenom besväret med att dekompilera, rekompilera och signera APK: er.

Först skapar du en standardapp utan en aktivitet i Android Studio.

Då måste du inkludera följande kod i din build.gradle :

repositories {
    jcenter();
}

Efter det lägger du till följande beroenden:

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

Nu måste du placera dessa taggar i applikationskoden som finns i AndroidManifest.xml så Xposed känner igen din modul:

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

OBS! Byt alltid ut 82 med den senaste Xposed-versionen .

Hooking en metod

Skapa en ny klass som implementerar IXposedHookLoadPackage och implementera metoden handleLoadPackage :

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

Inom metoden kontrollerar du loadPackageParam.packageName för paketnamnet på appen du vill ansluta:

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

Nu kan du ansluta din metod och antingen manipulera den innan koden körs, eller efter:

@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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow