Android 5 上出现 NoClassDefFoundError 错误,但它适用于更高的 Android 版本,例如 8、9、10

问题描述

由于这个错误我有一段时间很沮丧,我有一个 Android 应用程序,它在我的手机(android 版本 8)和我的妈妈(版本 10)上运行良好,但不能在我姐妹的 android 版本平板电脑上运行5.当应用程序要创建一个ClientConfig对象以在输入电话号码进行注册后发送短信时发生错误。它是:

Method threw 'java.lang.NoClassDefFoundError' exception.

这是堆栈跟踪:

0 = org.glassfish.jersey.client.ClientConfig$State.<init>(ClientConfig.java:160)
1 = org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.java:515)
2 = com.xyz.asd.services.UserServices.RegisterNewUser(UserServices.java:48)

原因还说:

java.lang.NoClassDefFoundError: org.glassfish.jersey.model.internal.CommonConfig

虽然我可以看到有

jersey-common-2.27.jar 我可以在包 org.glassfish.jersey.model.internal 上找到 CommonConfig

这些是一些设置:

   compileSdkVersion 30
    minSdkVersion 14
    targetSdkVersion 30
    multiDexEnabled true

我已经清理了 Android Studio 的 gradle 和所有缓存,清理了项目,使用了一些 Dex 选项,但什么也没发生。在发送之前阅读有关 NoClassDefFoundError 堆栈溢出的所有相关问题。

我将不胜感激...

解决方法

在谷歌搜索并尝试了一些方法之后,糖救了我!

compileOptions {
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

然后我们需要添加:

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
    ....
}

而且它工作正常......

这里是对糖的一些描述: java-8-in-android-apps 这是开发人员的资源: Use Java 8 language features and APIs