错误java.lang.NoClassDefFoundError:com.github.difflib.text.DiffRowGenerator$$Lambda$0
在我使用的Android项目中 我通过以下方式将其添加到dependency中:错误java.lang.NoClassDefFoundError:com.github.difflib.text.DiffRowGenerator$$Lambda$0,java,android,gradle,Java,Android,Gradle,在我使用的Android项目中 我通过以下方式将其添加到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版的手机 当我在电话上运行
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)
为什么会发生这种情况,我有什么办法可以解决吗?在您使用的库的
DiffRowGenerator.java:52
中使用了java.util.function.BiPredicate
(这就是stacktrace导致崩溃的地方)。链接到整个软件包java.util.function.*
只能从API 24(Android 7.0)开始使用。这就是为什么它在安卓8上工作而不在安卓6上工作。有关java 8与android兼容性的更多信息,请参阅官方文档:
如果必须使用该库,您可以选择:
- 不支持低于7.0的Android
- 使用较旧的库版本。正如我所见,该库从2.0版开始使用Java8特性。因此,您可以尝试该库的1.2版
- 分叉库并重写所有使用不支持的Java8功能的地方
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
}
}