由于库冲突导致Android上的java.lang.NoSuchMethodError:org.json.JSONObject.getNames

时间:2015-01-07 14:37:01

标签: android json libgdx

我正在使用libgdx在java中创建跨平台应用程序。我在核心项目中使用Json,并在收到此错误时尝试在Android上部署:

E/AndroidRuntime(2030): java.lang.NoSuchMethodError: org.json.JSONObject.getNames

我阅读并发现Android有一个内置的Json库,它使用与我添加到核心项目中的Json库相同的包名。我使用的库有getName()方法,Android库有name()方法。有没有办法让我指定我想要使用的库?或者,有没有办法让我忽略Android库?

更新:我测试了在我的android项目中使用

访问JSON方法
JSONObject.getNames(TEST);

本应该给我null,但反而给了我同样的错误。

1 个答案:

答案 0 :(得分:2)

如果您碰巧使用了一个与另一个名称相同的命名空间/包名称的lib,那么您将受到类加载器的支配,它通常选择第一个位置,它可以按名称查找类。

所以规避这个问题的最简单方法是使用与android上相同的库和版本,或者将你的库移到另一个包中。

如果有问题的库允许它(许可证等)并且合理的小,你可能更容易只是拉入项目中的源文件并让IDE执行重构魔法。还有像jarjar这样的工具。

SO上有一些问题(Calling same Method having same packageName From Different JARsJava, Classpath, Classloading => Multiple Versions of the same jar/project)。所以你可以绕过这个问题,但我的直觉是,你最终会陷入一团糟。