Szukaj…


Tworzenie modułu Xposed

Xposed jest strukturą umożliwiającą przechwytywanie wywołań metod innych aplikacji. Podczas modyfikacji przez dekompilację pliku APK możesz wstawiać / zmieniać polecenia bezpośrednio w dowolnym miejscu. Musisz jednak później ponownie skompilować / podpisać pakiet APK i możesz dystrybuować tylko cały pakiet. Za pomocą Xposed możesz wstrzyknąć własny kod przed lub po metodach lub całkowicie zastąpić całe metody. Niestety, Xposed można zainstalować tylko na zrootowanych urządzeniach. Powinieneś używać Xposed, gdy chcesz manipulować zachowaniem innych aplikacji lub podstawowego systemu Android i nie chcesz przechodzić przez kłopot związany z dekompilacją, rekompilacją i podpisywaniem plików APK.

Najpierw utwórz standardową aplikację bez działania w Android Studio.

Następnie musisz dołączyć następujący kod do swojego build.gradle :

repositories {
    jcenter();
}

Następnie dodajesz następujące zależności:

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

Teraz musisz umieścić te tagi wewnątrz tagu aplikacji znalezionego w AndroidManifest.xml, aby Xposed rozpoznał twój moduł:

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

UWAGA: Zawsze zastępuj 82 najnowszą wersją Xposed .

Metoda zaczepiania

Utwórz nową klasę implementującą IXposedHookLoadPackage i zaimplementuj metodę handleLoadPackage :

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

Wewnątrz metody sprawdzasz loadPackageParam.packageName dla nazwy pakietu aplikacji, którą chcesz podpiąć:

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

Teraz możesz podpiąć swoją metodę i manipulować nią przed uruchomieniem kodu lub po:

@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
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow