java hook xposed_java - Xposed hook函数内有匿名内部类该怎么写?

sensorManager.registerListener(new SensorEventListener() {

@Override

public void onSensorChanged(SensorEvent event) {

}

@Override

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}

}, sensorGravity, SensorManager.SENSOR_DELAY_NORMAL);

怎么hook这里的SensorEventListener?

目标是hook住android.hardware.SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int samplingPeriodUs)的listener里的onSensorChanged(SensorEvent event)这个函数.

XposedHelpers.findAndHookMethod("android.hardware.SensorManager", loadPackageParam.classLoader, "registerListener", SensorEvent.class, new XC_MethodHook() {

@Override

protected void beforeHookedMethod(MethodHookParam param) throws Throwable {

SensorEventListener event = (SensorEventListener) param.args[0];

}

});

在官方教程里找不到描述这种hook的方法,

亲测:使用美元符号连接内部类,见:

我不了解xposed(汗),不过Java类中的匿名类编译时是作为子类处理,并独立生成class文件的,例如SensorManager$1.class,建议可以从这个角度研究一下

要编 Xposed 模块的 XML 文件来 hook 系统框架,可以按照以下步骤进行: 1. 在模块的 res/xml 目录下创建一个新的 XML 文件,例如 hook_system_framework.xml。 2. 在 XML 文件中添加一个 `xposedmodule` 元素,并设置 `package` 属性为 Xposed 模块的包名。 ```xml <xposedmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://github.com/rovo89/XposedInstaller/blob/master/assets/xposedmod.xsd" package="com.example.myxposedmodule"> </xposedmodule> ``` 3. 在 `xposedmodule` 元素中添加一个 `hook` 元素,并设置 `class` 属性为要 hook的全名(例如 android.app.Activity)。 ```xml <xposedmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://github.com/rovo89/XposedInstaller/blob/master/assets/xposedmod.xsd" package="com.example.myxposedmodule"> <hook class="android.app.Activity"> </hook> </xposedmodule> ``` 4. 在 `hook` 元素中添加一个或多个 `method` 元素,每个 `method` 元素代表一个要 hook 的方法,可以设置 `name` 属性来指定方法名,还可以添加一个 `parameter-types` 元素来指定方法参数型。 ```xml <xposedmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://github.com/rovo89/XposedInstaller/blob/master/assets/xposedmod.xsd" package="com.example.myxposedmodule"> <hook class="android.app.Activity"> <method name="onCreate" parameter-types="android.os.Bundle"> </method> <method name="onResume"> </method> </hook> </xposedmodule> ``` 5. 在 `method` 元素中添加一个或多个 `hook` 元素,每个 `hook` 元素代表一个 hook 回调函数,可以设置 `inline` 属性为 true 或 false,来指定回调函数是否在原函数之前执行还是之后执行。 ```xml <xposedmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://github.com/rovo89/XposedInstaller/blob/master/assets/xposedmod.xsd" package="com.example.myxposedmodule"> <hook class="android.app.Activity"> <method name="onCreate" parameter-types="android.os.Bundle"> <hook inline="true"> com.example.myxposedmodule.MyHookClass.onCreate </hook> </method> <method name="onResume"> <hook inline="false"> com.example.myxposedmodule.MyHookClass.onResume </hook> </method> </hook> </xposedmodule> ``` 以上就是编 Xposed 模块的 XML 文件来 hook 系统框架的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值