我遇到了一次崩溃,我不能 100% 确定发生了什么。我的怀疑是它与 retrolambda 在幕后所做的事情有关,以实现在 Java 8 之前使用 lambda。我收到以下崩溃:
04-21 13:50:32.609 1199-1199/com.ariets.af.debug E/AndroidRuntime: FATAL EXCEPTION: main java.lang.NoClassDefFoundError: java.util.Objects
at com.abercrombie.android.sdk.AFSDK.initialize(AFSDK.java:154)
at com.ariets.af.data.sdk.SDKClient.observeSdkInitialize(SDKClient.java:474)
at com.ariets.af.ui.splash.AfSplashScreenPresenterImpl.setupAfSdk(AfSplashScreenPresenterImpl.java:69)
at com.ariets.af.ui.splash.AFSplashScreenActivity.onCreate(AFSplashScreenActivity.java:84)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
我没有直接使用java.util.Objects
(实际上,在我的代码中搜索它并没有显示任何结果)。以下是我的代码的摘录:
findRegion().flatMap(afRegion -> setupSharedVariables(afRegion))
.flatMap(afRegion -> fetchContent(afRegion)) // THIS IS WHERE THE CRASH OCCURS
.flatMap(sessionHandler::initializeSession)
.doOnNext(complete -> {
isStarted = true;
logTime("startUp successfully completed", start);
});
关于应用程序设置的一些背景:
- 我们使用 retrolambda 来支持在以前的 Java 版本上使用 lambda。
- 我们的 minSdkVersion 是 16。
- 我们正在使用的几个 gradle 插件(如果这些插件中的任何一个会提供一些关于正在发生的事情的信息):
- Retrolambda(显然)
- Android-Apt
- 雨果
- 勺子
- 织物
- 容易出错
就像我上面说的,我认为这可能与幕后发生的事情有关。很可能有些东西正在添加java.util.Objects
(在 API 16 上不可用)。有人有可能对我有用的信息吗?在不提高 minSdkVersion 的情况下,我将如何规避这个问题?