问个关于 Xposed 的小问题

2019-03-22 11:20:40 +08:00
 huruwo

使用 Xposed newInstance 某个 Class 的时候,发现该类没有默认的构造函数。 直接使用

Class cls2 = XposedHelpers.findClass("com.xx.xx", lpparam.classLoader); Object object = cls.newInstance()

出现错误如下:

 java.lang.InstantiationException: java.lang.Class<com.xx.xx> has no zero argument constructor
at java.lang.Class.newInstance(Native Method)
at com.huruwo.xposed.HookTestLoadPackage.callDyUserInfo(HookTestLoadPackage.java:158)
at com.huruwo.xposed.HookTestLoadPackage.access$300(HookTestLoadPackage.java:36)
at com.huruwo.xposed.HookTestLoadPackage$1.onReceive(HookTestLoadPackage.java:62)
at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:1128)

我们自己写 反射需要无参构造函数,但是这是别人的程序。如何直接newInstance出这个类呢。

1.我自己的思路就是去 hook 哪个方法使用了 new Class,从那个地方得到这个类。但是太绕了,想知道更简单的方案。

3012 次点击
所在节点    Java
2 条回复
pursuer
2019-03-22 11:58:03 +08:00
可以反射带参数构造的类,用 Constructor.newInstance,输出类的构造函数签名就可以知道构造函数用的什么参数了
jinyang656
2019-03-22 12:29:25 +08:00
XposedHelpers#newInstance(java.lang.Class<?>, java.lang.Object...)
或者
XposedHelpers#newInstance(java.lang.Class<?>, java.lang.Class<?>[], java.lang.Object...)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/547324

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX