Suche…


Erstellen eines Xposed-Moduls

Xposed ist ein Framework, mit dem Sie Methodenaufrufe anderer Apps verknüpfen können. Wenn Sie eine Änderung vornehmen, indem Sie eine APK dekompilieren, können Sie Befehle direkt an beliebigen Stellen einfügen / ändern. Sie müssen die APK danach jedoch erneut kompilieren / signieren, und Sie können nur das gesamte Paket verteilen. Mit Xposed können Sie Ihren eigenen Code vor oder nach Methoden einfügen oder ganze Methoden vollständig ersetzen. Leider können Sie Xposed nur auf gerooteten Geräten installieren. Sie sollten Xposed immer dann verwenden, wenn Sie das Verhalten anderer Apps oder des Android-Kernsystems ändern möchten und nicht die Mühe machen müssen, APKs zu dekompilieren, neu zu kompilieren und zu signieren.

Zunächst erstellen Sie eine Standard-App ohne Aktivität in Android Studio.

Dann müssen Sie den folgenden Code in Ihr build.gradle einfügen :

repositories {
    jcenter();
}

Danach fügen Sie die folgenden Abhängigkeiten hinzu:

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

Jetzt müssen Sie diese Tags innerhalb des Anwendungstags in AndroidManifest.xml platzieren, damit Xposed Ihr Modul erkennt:

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

HINWEIS: Ersetzen Sie immer 82 durch die neueste Xposed-Version .

Eine Methode haken

Erstellen Sie eine neue Klasse, die IXposedHookLoadPackage implementiert, und implementieren Sie die handleLoadPackage Methode:

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

Innerhalb der Methode überprüfen Sie loadPackageParam.packageName auf den Paketnamen der App, die Sie loadPackageParam.packageName möchten:

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

Jetzt können Sie Ihre Methode anhängen und entweder bearbeiten, bevor der Code ausgeführt wird oder nach:

@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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow