为什么 Java RunTime 在 Hex.encodeHex() 方法调用上报告了 java.lang.NoSuchMethodError?

Why is Java RunTime has reported a java.lang.NoSuchMethodError on Hex.encodeHex() method call?

我不得不在我的 Android 项目中包含一些 bittorrent java 库。我的工作区:Android Studio 1.0.2 (osx) 和 jdk8。我已经将其 maven-repository (ttorrent:1.4) 与 Gradle 连接起来,在开始使用 main 类 和功能后我遇到了一个错误:

java.lang.NoSuchMethodError: No static method encodeHex([BZ)[C in class Lorg/apache/commons/codec/binary/Hex; or its super classes (declaration of 'org.apache.commons.codec.binary.Hex' appears in /system/framework/ext.jar).

我查看了库的代码,发现它正在使用 org.apache.commons.codec 从 ttorrent 导入 encodeHex 并调用它的地方。看起来 binaryHex 方法不见了!或者它从来没有。但是我查看了 commons.codec 的代码, 在它的位置找到了 binaryHex 以及我正在寻找的参数。怎么来的?为什么?我的 Android 工作室找到了它。但是 java 运行时没有。

其实这个决定比我想象的要难。让我们从我遇到 Dieser Beitrag'a 的 article 这一事实开始,从中可以清楚地看出我没有遇到类似的问题。整个事情结果是 Android 操作系统 已经 一些 更高 优先使用,而不是随应用程序一起加载依赖项。其中还有我的org.apache.commons.codec

是的,诸如此类。

解决问题的方法有两种,要么你需要pump源代码库和使用一些工具重命名项目(即org.apache.commons.codec到org.apache.commons.codec.android),将其收集到一个 .jar 文件中,将 .jar 包含在一个项目中,并在代码中使用导入必要的 classes only "our" 库,或者只是将所需的 class 获取到您的项目中,并且不要拉出数兆字节的不需要的代码。然而,我就是这么做的。 感谢您的帮助!