android - Xposed - 无法 Hook 静态方法

标签 android hook xposed-framework

我尝试 Hook Settings.System.putInt 方法,它是 static。此方法的调用之一是在 com.android.settings.AirplaneModeEnabler 类的 setAirplaneModeOn 方法中完成的。它位于 android 的 Settings 应用程序中。另外,在com.android.systemui中使用了putInt方法。

但是,下面的代码没有 Hook 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

最佳答案

自 Jelly Bean 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 测试了更新后的代码,它工作正常。

关于android - Xposed - 无法 Hook 静态方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30123459/

相关文章:

android - xposed在线程中运行以hooked方法显示对话框

java - Xposed 未加载我的模块,ClassNotFoundException

android - 导出没有 "optimizing"png 图像的已签名应用程序

java - 如何用代码检查Android list 参数

android - Gradle:通过自动检测代理设置设置代理属性?

android - dlopen() 不适用于 android-n

显示来自父记录的一些信息的逻辑 Hook 引发错误

C# hook - 计算键盘上的击键次数

emacs - 更改 emacs 文本模式的边距

java - 如何 Hook 静态整数返回值