使用 ArrayList<MyObject> 参数的挂钩方法
Hooking method with ArrayList<MyObject> parameter
我有一个 class MyObject
和一个主要 activity 实现方法 test(ArrayList<MyObject> x)
的应用程序
public class MyObject {
private String x;
MyObject(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
现在我需要将方法 test
与 xposed 挂钩以获取参数 x
。我如何访问和遍历 ArrayList 并调用 getX
方法?我的第一种方法是将其作为参数传递给 findAndHookMethod
方法:
final Class<?> myObject = XposedHelpers.findClass(
"com.xposed.packagehook.MyObject", lpparam.classLoader);`
但我不知道如何将其包装到 ArrayList 中。
开发挂钩时,使用应用程序源代码作为基础并不是一个好主意。推荐使用编译好的apk文件,使用apktool之类的工具进行反编译。这样做的原因是编译后的代码有时看起来与您期望的有点不同:
方法参数定义ArrayList<MyObject>
包含两部分:
- 对象类型
ArrayList
- 一个(泛型)类型参数
MyObject
泛型不是原始 Java 定义的一部分,后来添加此概念时,它仅限于编译器。因此,泛型类型参数仅在编译时存在于方法签名中。在应用程序 dex 字节代码和运行时,您只会看到这样的方法测试:
void test(ArrayList x)
或在 Smali 代码中与 apktool 输出的相同:
method public test(Ljava/util/ArrayList;)V
一些反编译器也可能显示泛型类型参数,但该信息来自注释,该注释不是挂钩方法所需的方法签名的一部分。
因此,如果你想挂钩这个方法,MyObject
是完全不相关的。只需挂钩具有 java.util.ArrayList
参数的测试方法即可。
我有一个 class MyObject
和一个主要 activity 实现方法 test(ArrayList<MyObject> x)
public class MyObject {
private String x;
MyObject(String x) {
this.x = x;
}
public String getX() {
return x;
}
}
现在我需要将方法 test
与 xposed 挂钩以获取参数 x
。我如何访问和遍历 ArrayList 并调用 getX
方法?我的第一种方法是将其作为参数传递给 findAndHookMethod
方法:
final Class<?> myObject = XposedHelpers.findClass(
"com.xposed.packagehook.MyObject", lpparam.classLoader);`
但我不知道如何将其包装到 ArrayList 中。
开发挂钩时,使用应用程序源代码作为基础并不是一个好主意。推荐使用编译好的apk文件,使用apktool之类的工具进行反编译。这样做的原因是编译后的代码有时看起来与您期望的有点不同:
方法参数定义ArrayList<MyObject>
包含两部分:
- 对象类型
ArrayList
- 一个(泛型)类型参数
MyObject
泛型不是原始 Java 定义的一部分,后来添加此概念时,它仅限于编译器。因此,泛型类型参数仅在编译时存在于方法签名中。在应用程序 dex 字节代码和运行时,您只会看到这样的方法测试:
void test(ArrayList x)
或在 Smali 代码中与 apktool 输出的相同:
method public test(Ljava/util/ArrayList;)V
一些反编译器也可能显示泛型类型参数,但该信息来自注释,该注释不是挂钩方法所需的方法签名的一部分。
因此,如果你想挂钩这个方法,MyObject
是完全不相关的。只需挂钩具有 java.util.ArrayList
参数的测试方法即可。