摘要:
更新了一个孤立的第三方库并成功对其进行了编译。当我在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中包含依赖项吗?
答案 0 :(得分:-1)
当我尝试在Emulator上激活BarcodeScanner时遇到了这个问题,这是不可能的,因为Emulator没有它,并且抛出了NoClassDefFoundError。 在模拟器上运行应用程序时,我使用try ... catch ...解决了此问题。一旦将其安装在真实设备上,它就不会抛出此错误。您可以像这样使用它,
try {
//Code that is throwing this error
} catch (NoClassDefFoundError ignore) {
//Do nothing
}
如果您遇到类似问题,请尝试此操作。应该可以。