java - 编译 Android 应用程序时第 3 方库依赖项上的 NoClassDefFoundError

标签 java android gradle kotlin

概括:

更新了一个孤立的第三方库并成功编译。当我在我的 Android 项目中将它用作库时,我得到 NoClassDefFoundError对于我的项目中不是依赖项的第三方库的依赖项之一( javax.ws.rs.core.Configuration )。

阐述:

我的 Android 应用程序 (Kotlin) 需要使用第三方库(Java,连接到 API)。 3PL 是 Github 上的一个孤立项目,无法连接到新版本的 API。

我将其 fork 并制作了本地副本。更新了它。

我将修改后的第 3 方库编译为 JAR(在 Android Studio 中构建,它可以工作并生成 JAR 文件),然后将 JAR 文件作为库添加到我的 Kotlin Android 项目中。然后我注释掉了 Gradle 配置,该配置将以前的版本列为要下载的依赖项。

Kotlin 没有给我任何编译错误。但是,当我运行单元测试时,我得到 java.lang.NoClassDefFoundError: javax/ws/rs/core/Configuration作为运行时错误。

这不是我在我的 Android 项目中需要的东西(并且没有在我的 Android 项目的外部库中列出),但它出现在第三方库的外部库中。

我的理解是,如果你编译一个模块,那么在应用程序中使用该模块所需要做的就是包含该模块。我不需要将该模块的依赖项包含为我自己的依赖项。

我该如何解决?我不想在我自己的项目中添加 javax.ws.* 作为依赖项,因为我不使用它,除非通过第三方库间接使用。

我需要运行一些特殊命令来指示 Android Studio 将依赖项包含在 JAR 中还是什么?

最佳答案

当我尝试在 Emulator 上激活 BarcodeScanner 时遇到了这个问题,这是不可能的,因为 Emulator 没有它并且它正在抛出 NoClassDefFoundError。
在模拟器上运行应用程序时,我使用 try...catch... 来解决此问题。一旦我将它安装在真实设备上,它并没有明显地抛出这个错误。可以这样使用

try {

    //Code that is throwing this error

} catch (NoClassDefFoundError ignore) {

    //Do nothing

}

如果你有类似的问题,试试这个。它应该工作。

关于java - 编译 Android 应用程序时第 3 方库依赖项上的 NoClassDefFoundError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57731345/

相关文章:

java - 在带有分隔符的 ListView 中显示 JSON

java - 如何将YouTube播放列表解析为ArrayList

java.lang.IllegalArgumentException : Object would be serialized to `null` : Android 异常

android - 我如何使用 RXJava/Android 更改对象列表中的字段

Gradle:无法执行sql,找不到驱动程序

java - 如何为 heroku 创建 procfile 文件?

scala - 如何从build.gradle文件调用scala方法

java - Hibernate 多对多结果不符合预期 - 仅获取最后一条记录

java - 获取 ID 并在 Jtable 上显示详细信息

java - 可执行 jar 找不到属性文件