java - Android Studio 上的 Java 反射无法找到要调用的公共静态方法
问题描述
我的 Android 应用程序中的 Java 反射代码从包 A 调用包 B 中的公共静态方法。
最近,在一些 Gradle 升级后,我无法调用相同的方法。我的实现因 NoSuchMethodFound 异常而失败。我怎样才能让实现能够找到这个方法?
我已经尝试打印类中所有可用的方法。结果是所有公共非静态方法。没有可调用的静态方法。我要调用的方法是一个静态的“getInstance”方法,它初始化类并返回一个单例实例。
调用代码:
implementationClass = Class.forName(CLIENT_CLASS_NAME, false, ClientProvider.class.getClassLoader());
final Method method = implementationClass.getMethod("getInstance", (Class[]) null);
result = method.invoke(null, (Object[]) null);
调用代码:
/**
* Public static method to be reflected.
*/
public static ClientImpl getInstance() {
return ClientImplHolder.INSTANCE;
}
/**
* Private class used to hold the lazily initialized singleton instance.
*/
private static class ClientImplHolder {
private static final ClientImpl INSTANCE = new ClientImpl();
}
尝试“getMethod”时,我收到 NoSuchMethodException。
不知道我在这里做错了什么,感谢任何帮助。谢谢!
解决方案
事实证明,Proguard 正在从构建中删除该方法,因为它没有在其他地方使用。为班级添加了一个例外,问题就消失了。
推荐阅读
- php - 适用于 Firebase 的 FireStore PHP 管理员 SDK
- javascript - 反应原生 TypeError:无法读取未定义的属性“导航”
- laravel - 使用ajax的laravel发布请求
- kubernetes - Kubernetes 主节点的日期已更新。证书现在过期了?
- jenkins - Jenkins 管道脚本,用于从具有凭证的 tfs 中签出代码
- css - 如何使用flexbox将两个按钮对齐到'position:absolute'的div的中心?
- sql - 查询以查找所有 db 参数值,包括 null
- swift - Swift中的SQLite绑定未知数据类型
- angularjs-directive - Angular Js Ng-Click中的JQuery数据表不起作用?
- javascript - Kendo Grid - 在按钮单击中传递编辑的值