java - 致命异常 : main java. lang.NoClassDefFoundError : external library. jar.class Android studio

标签 java android eclipse android-studio javax.sound.sampled

我正在开发一个处理语音的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 并在编译器及其本身中导出 java 项目。

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

最佳答案

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

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

解决这个问题的唯一方法是找出一种方法来完成您想要的任何操作,而无需 javax 命名空间。我听说过一些尝试将 javax.* 移植到 Android 中,但它们永远不会有好的结果 - 许多 javax 类最终都归结为 native 调用,而这在 Android 上也不会存在。

关于java - 致命异常 : main java. lang.NoClassDefFoundError : external library. jar.class Android studio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35327440/

相关文章:

java - 未找到当前线程 : Spring 3 and Hibernate 4 (Using @PostConstruct annotation) 的 session

android - Android中拖动操作时如何取消View.OnDragListener?

java - Hamcrest assertThat - 类型推断

java - Springboot : Localhost:8080 results in Whitepage-Error instead of showing content

javascript - 将用户输入传递到 XSL 样式表

android - 由于 gradle 错误,无法启动新项目

Android,如何在相对布局中设置带有百分比的 ImageView

java - 如何使用 WebView 小部件在 Android 应用程序上查看网页?

java - GridBagLayout - JFormattedTextFields 太少了?

java - 为什么Eclipse需要针对Lombok进行配置?