我有一个类data_frame["FirstName"] = data_frame["SplitName"].str[0] if data_frame["Length"].eq(2) else ""
和一个应用,该应用的主要活动实现了方法MyObject
test(ArrayList<MyObject> x)
现在,我需要使用xposed钩住方法 public class MyObject {
private String x;
MyObject(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
以获取参数test
。我如何访问和遍历ArrayList并调用x
方法?我的第一种方法是将其作为getX
方法的参数传递:
findAndHookMethod
但是我不知道如何将其包装到ArrayList中。
答案 0 :(得分:1)
在开发钩子时,使用应用程序源代码作为基础不是一个好主意。建议使用已编译的APK文件,并使用apktool之类的工具对其进行反编译。原因是编译后的代码有时看起来与您期望的有所不同:
方法参数定义ArrayList<MyObject>
包括两部分:
ArrayList
MyObject
泛型不是原始Java定义的一部分,后来在添加此概念时,它仅限于编译器。因此,泛型类型参数仅在方法签名中的编译器时存在。在应用程序dex字节码中和运行时,您只会看到以这种方式测试的方法:
void test(ArrayList x)
或与apktool输出的Smali代码相同:
method public test(Ljava/util/ArrayList;)V
某些反编译器也可能会显示泛型类型参数,但是该信息来自注释,该注释不是钩住方法所需的方法签名的一部分。
因此,如果要挂钩此方法,则MyObject
完全不相关。只需挂接带有java.util.ArrayList
参数的测试方法就可以了。