代码之家  ›  专栏  ›  技术社区  ›  Alex

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

  •  0
  • Alex  · 技术社区  · 7 年前

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

    我通过以下方式将其添加到dependency中:

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

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

    安卓6.0.1 还有一个电话 安卓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时,同样的问题也发生了。

    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
        }
    }
    

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

    1 回复  |  直到 7 年前
        1
  •  2
  •   Andrei Vinogradov    7 年前

    有一种用法 java.util.function.BiPredicate 在里面 DiffRowGenerator.java:52 您使用的库的名称(即stacktrace导致崩溃的位置)。链接到 source . 整套 java.util.function.* 只能从API 24(Android 7.0)开始使用。这就是为什么它在安卓8上工作而不在安卓6上工作。有关java 8与android兼容性的更多信息,请参阅官方文档: https://developer.android.com/studio/write/java8-support

    • 不支持低于7.0的Android。
    • 使用较旧的库版本。正如我所见,该库从2.0版开始使用Java8特性。因此,您可以尝试该库的1.2版。
    • 分叉库并重写所有使用不支持的Java8功能的地方。