huruwo
V2EX  ›  Java

问个关于 Xposed 的小问题

  •  1
     
  •   huruwo · Mar 22, 2019 · 3731 views
    This topic created in 2609 days ago, the information mentioned may be changed or developed.

    使用 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,从那个地方得到这个类。但是太绕了,想知道更简单的方案。

    2 replies    2019-03-22 12:29:25 +08:00
    pursuer
        1
    pursuer  
       Mar 22, 2019
    可以反射带参数构造的类,用 Constructor.newInstance,输出类的构造函数签名就可以知道构造函数用的什么参数了
    yufz
        2
    yufz  
       Mar 22, 2019
    XposedHelpers#newInstance(java.lang.Class<?>, java.lang.Object...)
    或者
    XposedHelpers#newInstance(java.lang.Class<?>, java.lang.Class<?>[], java.lang.Object...)
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1185 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 17:46 · PVG 01:46 · LAX 10:46 · JFK 13:46
    ♥ Do have faith in what you're doing.