Java 使用ArrayList参数的挂钩方法

Java 使用ArrayList参数的挂钩方法,java,android,xposed,Java,Android,Xposed,我有一个类MyObject和一个应用程序,它的主要活动实现了一个方法testArrayList x 现在我需要用xposed钩住方法测试以获得参数x。如何访问和迭代ArrayList并调用getX方法?我的第一种方法是将其作为findAndHookMethod方法的参数传递: 但我不知道如何将其包装到ArrayList中 在开发钩子时,使用应用程序源代码作为基础不是一个好主意。建议使用已编译的APK文件,并使用类似apktool的工具对其进行反编译。原因是编译后的代码有时看起来与您期望的有点不同

我有一个类MyObject和一个应用程序,它的主要活动实现了一个方法testArrayList x

现在我需要用xposed钩住方法测试以获得参数x。如何访问和迭代ArrayList并调用getX方法?我的第一种方法是将其作为findAndHookMethod方法的参数传递:


但我不知道如何将其包装到ArrayList中

在开发钩子时,使用应用程序源代码作为基础不是一个好主意。建议使用已编译的APK文件,并使用类似apktool的工具对其进行反编译。原因是编译后的代码有时看起来与您期望的有点不同:

方法参数定义ArrayList由两部分组成:

对象类型ArrayList 泛型类型参数MyObject 泛型不是原始Java定义的一部分,当这个概念后来被添加时,它仅限于编译器。因此泛型类型参数仅在编译器时存在于方法签名中。在app dex字节码和rune时间中,您将只看到以下方法测试:

void test(ArrayList x)
或与apktool输出的Smali代码相同:

method public test(Ljava/util/ArrayList;)V
某些反编译器也可能会显示泛型类型参数,但该信息来自一个注释,而该注释不是挂接方法所需的方法签名的一部分


因此,如果你想钩住这个方法,MyObject是完全不相关的。只需挂接具有java.util.ArrayList参数的测试方法,您就完成了。

Ok。这样我就可以访问ArrayList了。但是,既然我的xpose应用程序中没有MyObject类,我怎么能调用getX方法呢?@Mow因为它是Java,所以你仍然可以通过反射访问每个方法。我们可以找到一个非常类似的例子,它在应用程序定义的Person对象上调用方法setParents。
void test(ArrayList x)
method public test(Ljava/util/ArrayList;)V