Buscar..


Creando un Módulo Xposed

Xposed es un marco que te permite conectar llamadas de método de otras aplicaciones. Cuando realiza una modificación al descompilar un APK, puede insertar / cambiar comandos directamente donde lo desee. Sin embargo, tendrá que volver a compilar / firmar el APK después y solo podrá distribuir todo el paquete. Con Xposed, puede inyectar su propio código antes o después de los métodos, o reemplazar los métodos completos por completo. Desafortunadamente, solo puedes instalar Xposed en dispositivos rooteados. Debería usar Xposed siempre que quiera manipular el comportamiento de otras aplicaciones o del sistema Android principal y no quiera pasar por la molestia de descompilar, recompilar y firmar archivos APK.

Primero, creas una aplicación estándar sin una actividad en Android Studio.

Luego tienes que incluir el siguiente código en tu build.gradle :

repositories {
    jcenter();
}

Después de eso agrega las siguientes dependencias:

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

Ahora tiene que colocar estas etiquetas dentro de la etiqueta de la aplicación que se encuentra en AndroidManifest.xml para que Xposed reconozca su módulo:

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

NOTA: Reemplace siempre el 82 con la última versión de Xposed .

Enganchando un método

Cree una nueva clase implementando IXposedHookLoadPackage e implemente el método handleLoadPackage :

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

Dentro del método, verifica loadPackageParam.packageName para el nombre del paquete de la aplicación que deseas enganchar:

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

Ahora puede conectar su método y manipularlo antes de que se ejecute el código, o después de:

@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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow