Xposed - 无法挂钩静态方法
Xposed - Can't hook static method
我尝试挂钩 Settings.System.putInt
方法,即 static
。此方法的调用之一是在 com.android.settings.AirplaneModeEnabler
class 的 setAirplaneModeOn
方法中完成的。它位于 android 的 Settings
应用程序中。此外,putInt
方法用于 com.android.systemui
。
但是,下面的代码没有挂钩 putInt
方法。它没有给出任何异常,但它也不会转储任何内容为“In android.provider.Settings.System
”的日志消息,这意味着 beforeHookedMethod
未被调用或无法被挂钩。 Loaded app
打印日志。任何帮助是极大的赞赏。
@Override
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
if (!( lpparam.packageName.equals("com.android.systemui") || lpparam.packageName.equals("com.android.settings"))) {
return;
}
XposedBridge.log("Loaded app: " + lpparam.packageName);
final Class<?> mClass = XposedHelpers.findClass("android.provider.Settings$System", lpparam.classLoader);
findAndHookMethod(mClass, "putInt", ContentResolver.class, String.class, "int", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("In android.provider.Settings.System");
}
});
}
Xposed-Framework 版本:54
Android版本:4.2.2
自果冻豆 MR1 (4.2) 以来,方法 setAirplaneModeOn
在 Settings.Global
中使用 putInt
而不是 Settings.System
,如您所见 here.
你的代码应该这样修改:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!(lpparam.packageName.equals("com.android.systemui") || lpparam.packageName.equals("com.android.settings"))) {
return;
}
XposedBridge.log("Loaded app: " + lpparam.packageName);
final Class<?> mClass = XposedHelpers.findClass("android.provider.Settings$Global", lpparam.classLoader);
findAndHookMethod(mClass, "putInt", ContentResolver.class, String.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("In android.provider.Settings.Global");
}
});
}
我用 KitKat 4.4.4 测试了更新后的代码,它工作正常。
我尝试挂钩 Settings.System.putInt
方法,即 static
。此方法的调用之一是在 com.android.settings.AirplaneModeEnabler
class 的 setAirplaneModeOn
方法中完成的。它位于 android 的 Settings
应用程序中。此外,putInt
方法用于 com.android.systemui
。
但是,下面的代码没有挂钩 putInt
方法。它没有给出任何异常,但它也不会转储任何内容为“In android.provider.Settings.System
”的日志消息,这意味着 beforeHookedMethod
未被调用或无法被挂钩。 Loaded app
打印日志。任何帮助是极大的赞赏。
@Override
public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {
if (!( lpparam.packageName.equals("com.android.systemui") || lpparam.packageName.equals("com.android.settings"))) {
return;
}
XposedBridge.log("Loaded app: " + lpparam.packageName);
final Class<?> mClass = XposedHelpers.findClass("android.provider.Settings$System", lpparam.classLoader);
findAndHookMethod(mClass, "putInt", ContentResolver.class, String.class, "int", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("In android.provider.Settings.System");
}
});
}
Xposed-Framework 版本:54
Android版本:4.2.2
自果冻豆 MR1 (4.2) 以来,方法 setAirplaneModeOn
在 Settings.Global
中使用 putInt
而不是 Settings.System
,如您所见 here.
你的代码应该这样修改:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
if (!(lpparam.packageName.equals("com.android.systemui") || lpparam.packageName.equals("com.android.settings"))) {
return;
}
XposedBridge.log("Loaded app: " + lpparam.packageName);
final Class<?> mClass = XposedHelpers.findClass("android.provider.Settings$Global", lpparam.classLoader);
findAndHookMethod(mClass, "putInt", ContentResolver.class, String.class, int.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("In android.provider.Settings.Global");
}
});
}
我用 KitKat 4.4.4 测试了更新后的代码,它工作正常。