0

反编译方法:

private static l c(String str, String str2, String str3, String str4) {
    l lVar;
    k kVar = (k) m.get(str);
    j jVar = (j) l.get(str);
    if (kVar != null) {
        lVar = new l(kVar, str2, str3);
    } else if (jVar != null) {
        lVar = new l(jVar, str2, str3);
    } else {
        lVar = new l(j.GENERIC, str2, str3);
    }
    lVar.a(str4);
    return lVar;
}

如何使用 Xposed 返回新的 l (jVar, str2, str3) 及其特定值?我拥有的代码的开头是:

    try {
        findAndHookMethod("com.xiaomi.hm.health.ui.smartplay.h", lpparam.classLoader, "c", String.class, String.class, String.class, String.class, new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) {
                String pkg = (String) param.args[0];
                if (pkg == "com.perm.kate_new_6"){
                    return ???;
                }
            }
        });
    } catch (Throwable t) {
        t.printStackTrace();
    }
4

1 回答 1

0

的方法需要返回void XC_MethodHookafterHookedMethod即,挂钩方法的返回需要通过setResult方法来设置XC_MethodHook

在内部,它设置returnEarly为在XposedBridgetrue中检查的对象,以防止执行原始方法代码以及该方法上的任何其他挂钩。

如果您只想访问该方法最初要返回的任何内容,那么getResult()应该这样做。

如果您需要返回任何其他内容,可以使用反射或 Xposed 的帮助程序 ( findClass ) 来检索 l、k 和 j 类,如果需要复制代码,创建一个新实例并通过setResult. 或者,您可以改用XC_MethodReplacement钩子,因为无论如何您都可能复制它的功能。

于 2018-04-09T11:43:20.377 回答