1

我正在开发一个处理语音的 android 应用程序,并且我在 JAVA 上准备好了语音基本项目(android 项目的依赖项),所以我在 JAVA 7 编译器中的 Eclipse 中编译了 JAVA 项目,并将该 java 项目导出为可运行的 jar。我将这个 jar 放入我的 android studio 项目的 libs 文件夹中,并通过右键单击选定的 AS A 库,我得到了构建成功的消息。但是当我尝试运行 android 项目时,它给了我错误消息,

FATAL EXCEPTION: main Process: in.automator.automator, PID: 4242
java.lang.NoClassDefFoundError: jar_filename.Storage.class_in_jar_file

但是上述类在jar文件中,唯一值得怀疑的是所提到的类文件看起来像这样

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioFormat.Encoding;
import marf.util.InvalidSampleFormatException;

public class MARFAudioFileFormat extends AudioFileFormat {
....

 ...

....

}

它指的是 javax.sound.sampled,因此可能会导致问题。

我尝试在谷歌上搜索问题,但没有找到可以解决问题的解决方案。我什么都试过了。我在 android studio 中使用 JRE 7 并在 Compiler & 本身中导出 java 项目。

如何解决此错误?提前致谢。

4

1 回答 1

0

您是对的,问题在于您尝试依赖的库又取决于javax包层次结构。Android 不提供javax,因此这些类在运行时不存在(即使它们确实存在于您计算机的 JDK 中,所以您的编译器不会抱怨 - 这与您的 PC 上的程序没有安装特定的 DLL 基本相同需要)。

NoClassDefFoundError抛出在首先引用无效类依赖项的类上,这可能是令人困惑的。该类可能确实存在于您的 jar 中,但它需要不存在的类才能完成其定义 - 因此实际上,您的类没有完全定义。

解决这个问题的唯一方法是想办法在没有命名空间的情况下做任何你想做的事情javax。我听说过一些尝试移植javax.*到 Android 的尝试,但它们的结局永远不会很好 - 许多javax类最终都归结为原生调用,这在 Android 上也不存在。

于 2016-02-11T00:12:19.890 回答