【问题标题】:Android / Java - get TYPE of a hidden class via ReflectionAndroid / Java - 通过反射获取隐藏类的类型
【发布时间】:2018-07-26 17:24:07
【问题描述】:

我正在尝试通过反射使用隐藏的包管理器方法installPackage

我的主要问题是它的一个参数是另一个隐藏类android.content.pm.IPackageInstallObserver。如何获取该类的 TYPE(不是它的实例)?

val cPackageManager = Class.forName("android.content.pm.PackageManager")
val cPackageInstallObserver = Class.forName("android.content.pm.IPackageInstallObserver")

// here I need the IPackageInstallObserver type as a parameter type to look up the method
val installPackageMethod = cPackageManager.getMethod("installPackage", Uri::class.java, cPackageInstallObserver::class.java, Integer.TYPE, String::class.java)

在上述方式中,cPackageInstallObserver::class.java 仅解析为 Class,但不是我需要的实际类型。

有人有解决办法吗?

【问题讨论】:

    标签: java android reflection


    【解决方案1】:

    你只是在这里犯了一个简单的错误

    Uri::class.java, cPackageInstallObserver, Integer.TYPE, String::class.java)
    

    因为cPackageInstallObserver 已经是你需要的类,Class.forName 返回一个Class 类型,但你使用了cPackageInstallObserver::class.java,所以它与在java 中使用String.class.getClass() 相同,所以只需Class.class

    【讨论】:

    • 您是对的,感谢您指出这一点。您还知道如何创建一个实现该接口类型的类吗? MyClass : cPackageInstallObserver() { /* ... */ }
    • 如果这是一个接口然后查找代理类,像这里:stackoverflow.com/questions/51397139/…
    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多