public class XposedManager implements IXposedHookLoadPackage {
public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
if(lpparam.packageName.equals("com.bbk.appstore")) {
XposedHelpers.findAndHookMethod("com.a.b.c", lpparam.classLoader,"a", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
// TODO Auto-generated method stub
String result = "this is your value";
param.setResult(result );
}
});
}
}
这段代码可以修改函数的返回值,我想修改函数本身的参数值可以吗?比如sum(a)函数中的a 值
这个涉及到是引用传参还是值传参
1.如果是基类型是值传递,在方法中修改参数变量的值不改变调用方入参的值。
如:
有一个方法
calss Test{
public void fun(int a){
a = 11;
}
}
int a;
Test t = new Test();
t.fun(a);
System.out.println("a = " + a);
a = 10;
2.引用传递
class TestParam{
public int a;
}
calss Test{
public void fun(TestParam tp){
tp.a = 11;
}
}
代码:
TestParam tp = new TestParam();
tp.a = 10;
Test t = new Test();
t.fun(tp);
System.out.println("tp.a = ", tp.a);
这时输出tp.a = 11
3.引用本身的变化不影响原来的引用
class TestParam{
public int a;
}
calss Test{
public void fun(TestParam tp){
TestParam tp1 = new TestParam();
tp1.a = 20;
tp = tp1;//这里是把tp的引用改到了tp1,但调用方的引用没有变化。
}
}
代码:
TestParam tp = new TestParam();
tp.a = 10;
Test t = new Test();
t.fun(tp);
System.out.println("tp.a = ", tp.a);
这时输出tp.a = 10
以上三种情况希望有你对你能有帮助。
如果我的回复帮到了你,希望能采纳,并关注我,我会持续发布Java开发的知识。
得看这个MethodHook接口,看有没有Method签名的方法