刚开始在一个新项目中使用 lambda,当应用程序崩溃并出现以下堆栈跟踪时,该问题一直存在:
I/art: Rejecting re-init on previously-failed class java.lang.Class<com.test.-$Lambda$3>
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.test, PID: 18852
java.lang.NoClassDefFoundError: com.test.-$Lambda$3
... method which calls lambda ...
有趣的是它有时会起作用,但我仍然不知道是什么让它起作用,什么东西坏了。
jackOptions
并且1.8 compatibility
都在 build.gradle 中启用。compileSdkVersion
是 25。设备运行的是 Android 5.0。生成的 apk 已com.test.-$Lambda$3
定义此类。
除了完全启用 lambda 之外,还有什么需要做的吗?如何调试此问题以找出真正的根本原因?
更新 1:
这听起来很奇怪,但看起来编译器与 lambda 调用混淆了。假设生成的 APK 已经定义$Lambda$1:Runnable
并且$Lambda$2:Consumer
我看到了特定的方法调用$Lambda$1
,而它必须是$Lambda$2
.