V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
huruwo
V2EX  ›  Java

问个关于 Xposed 的小问题

  •  1
     
  •   huruwo · 2019-03-22 11:20:40 +08:00 · 2949 次点击
    这是一个创建于 1855 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 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 条回复    2019-03-22 12:29:25 +08:00
    pursuer
        1
    pursuer  
       2019-03-22 11:58:03 +08:00
    可以反射带参数构造的类,用 Constructor.newInstance,输出类的构造函数签名就可以知道构造函数用的什么参数了
    jinyang656
        2
    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...)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5230 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:17 · PVG 15:17 · LAX 00:17 · JFK 03:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.