java - 错误 java.lang.NoClassDefFoundError : com. github.difflib.text.DiffRowGenerator$$Lambda$0

标签 java android gradle

在我的 Android 项目中,我正在使用 java-diff-utils .

我已经通过这种方式将其添加到依赖项中:

implementation group: 'com.github.wumpz', name: 'diffutils', version: '2.2'

还尝试将其更改为:

implementation 'io.github.java-diff-utils:java-diff-utils:4.0-SNAPSHOT'

我有两台测试设备:一台运行 Android 6.0.1 的平板电脑和一台运行 Android 8.1.0 的手机。

当我在手机上运行这个项目时,一切都很顺利。但在平板电脑上,一旦点击 java-diff-utils 代码,应用程序就会崩溃并出现错误

    java.lang.NoClassDefFoundError: com.github.difflib.text.DiffRowGenerator$$Lambda$0
    at com.github.difflib.text.DiffRowGenerator.<clinit>(DiffRowGenerator.java:52)
    at com.github.difflib.text.DiffRowGenerator.create(DiffRowGenerator.java:210)
    at Fragments.ProfileFragment.onCreateView(ProfileFragment.java:38)
    at android.app.Fragment.performCreateView(Fragment.java:2220)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:973)
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1148)
    at android.app.BackStackRecord.run(BackStackRecord.java:793)
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1535)
    at android.app.FragmentManagerImpl$1.run(FragmentManager.java:482)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5461)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

当我使用 Sugar ORM 时,也发生了同样的问题。

我的build.gradle配置:

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "someid"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility 1.8
        targetCompatibility 1.8
    }
}

为什么会发生这种情况?有什么办法可以解决它吗?

最佳答案

您使用的库的 DiffRowGenerator.java:52 中有 java.util.function.BiPredicate 的用法(这是由于堆栈跟踪而发生崩溃的地方)。链接至source 。整个包 java.util.function.* 只能从 API 24 (Android 7.0) 开始使用。这就是为什么它适用于 Android 8 而不适用于 Android 6。有关 java 8 与 Android 兼容性的更多信息,您可以阅读官方文档: https://developer.android.com/studio/write/java8-support

如果您必须使用该库,您可以选择:

  • 不支持 Android 7.0 以下版本。
  • 使用较旧的库版本。正如我所看到的,该库从 2.0 版开始使用 Java 8 功能。因此您可以尝试该库的 1.2 版。
  • fork 库并重写所有使用不受支持的 Java 8 功能的地方。

关于java - 错误 java.lang.NoClassDefFoundError : com. github.difflib.text.DiffRowGenerator$$Lambda$0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54349915/

相关文章:

具有一个返回语句的 Java 递归

java - 在android中以编程方式设置编辑文本提示?

Android:从服务检测触摸

android - Kotlin SAM 转换不适用于具有两个参数的函数

kotlin - 如何使用 Gradle Kotlin buildSrc 插件自定义 KotlinCompile 任务?

http - 在 Gradle 中传递代理信息是怎么回事?

java - Java 的错误答案

java - 在 JFrame 中设置背景图像

java - 一次性从 Java 代码为 Windows、OSX 和 Linux 创建独立的可执行文件

java.lang.StackOverflowError 导致我的应用出现问题