【问题标题】:Xposed - Can't hook static methodXposed - 无法挂钩静态方法
【发布时间】:2015-05-08 12:06:57
【问题描述】:

我尝试挂钩Settings.System.putInt 方法,即static。此方法的调用之一是在com.android.settings.AirplaneModeEnabler 类的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

安卓版本:4.2.2

【问题讨论】:

    标签: android hook xposed-framework


    【解决方案1】:

    由于 Jelly Bean MR1 (4.2) 方法 setAirplaneModeOnSettings.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 测试了更新后的代码,它可以正常工作。

    【讨论】:

    • 是的,使用Global 类而不是Settings 解决了我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多