Recherche…


Créer un module Xposed

Xposed est un framework qui vous permet d'accrocher des appels de méthode d'autres applications. Lorsque vous effectuez une modification en décompilant un APK, vous pouvez insérer / modifier des commandes directement où vous voulez. Cependant, vous devrez recompiler / signer l'APK par la suite et vous ne pourrez distribuer que le package complet. Avec Xposed, vous pouvez injecter votre propre code avant ou après les méthodes, ou remplacer complètement des méthodes entières. Malheureusement, vous ne pouvez installer Xposed que sur des appareils rootés. Vous devez utiliser Xposed chaque fois que vous souhaitez manipuler le comportement d'autres applications ou du système Android principal et ne pas avoir à vous soucier de la décompilation, de la recompilation et de la signature d'APK.

Tout d'abord, vous créez une application standard sans activité dans Android Studio.

Ensuite, vous devez inclure le code suivant dans votre build.gradle :

repositories {
    jcenter();
}

Après cela, vous ajoutez les dépendances suivantes:

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

Maintenant, vous devez placer ces balises dans la balise d' application trouvée dans le fichier AndroidManifest.xml afin que Xposed reconnaisse votre module:

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

REMARQUE: remplacez toujours 82 par la dernière version de Xposed .

Accrocher une méthode

Créez une nouvelle classe implémentant IXposedHookLoadPackage et implémentez la méthode handleLoadPackage :

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

À l’intérieur de la méthode, cochez loadPackageParam.packageName pour le nom de package de l’application que vous souhaitez raccorder:

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

Maintenant, vous pouvez accrocher votre méthode et la manipuler avant l'exécution du code ou après:

@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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow