Android
Xposed
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");
}
});
}