编译Android应用时,第3方库的依赖项出现NoClassDefFoundError

时间:2019-08-30 17:59:50

标签: java android gradle kotlin

摘要:

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


详细说明:

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

我分叉并制作了本地副本。已更新。

我将修改后的第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中包含依赖项吗?

1 个答案:

答案 0 :(得分:-1)

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

try {

    //Code that is throwing this error

} catch (NoClassDefFoundError ignore) {

    //Do nothing

}

如果您遇到类似问题,请尝试此操作。应该可以。