Xposed - 无法挂钩静态方法

时间:2015-05-08 12:06:57

标签: android hook xposed-framework

我尝试挂钩Settings.System.putInt的{​​{1}}方法。其中一个对此方法的调用是在static类的setAirplaneModeOn方法中完成的。它被放置在android的com.android.settings.AirplaneModeEnabler app中。另外,Settings中使用了putInt方法。

但是,以下代码不会挂钩com.android.systemui方法。它不会给出任何异常,但它也不会转储任何内容为“putInt”的日志消息,这意味着In android.provider.Settings.System未被调用或无法挂钩。打印beforeHookedMethod个日志。任何帮助是极大的赞赏。

Loaded app

Xposed-Framework版本:54

Android版:4.2.2

1 个答案:

答案 0 :(得分:1)

由于Jelly Bean MR1(4.2)方法setAirplaneModeOn使用putInt中的Settings.Global代替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测试了更新的代码,它运行正常。