NoSuchMethodError with Java8
Android plugin 2.4.0 supports Java 8 language features, which makes it possible to stop using retrolambda. However, when I removed my retrolamda dependancy, my app crashed when trying to use the RxWear 2.0.0 library.
Any idea what might cause this :confused: ?
Stacktrace of the crash:
04-11 15:08:04.061 4853-4853/com.company.myapp.debug E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.company.myapp.debug, PID: 4853
java.lang.NoSuchMethodError: No virtual method lambda$subscribe$0(Lcom/google/android/gms/common/api/GoogleApiClient;)V in class Lcom/patloew/rxwear/BaseSingle; or its super classes (declaration of 'com.patloew.rxwear.BaseSingle' appears in /data/app/com.company.myapp.debug-1/split_lib_dependencies_apk.apk)
at com.patloew.rxwear.BaseSingle$$Lambda$1.cancel(Unknown Source)
at io.reactivex.internal.disposables.CancellableDisposable.dispose(CancellableDisposable.java:49)
at io.reactivex.internal.operators.single.SingleCreate$Emitter.onError(SingleCreate.java:91)
at com.patloew.rxwear.BaseSingle$ApiClientConnectionCallbacks.onConnectionFailed(BaseSingle.java:90)
at com.google.android.gms.common.internal.zzm.zzn(Unknown Source)
at com.google.android.gms.internal.zzaat.zzc(Unknown Source)
at com.google.android.gms.internal.zzaar.zzf(Unknown Source)
at com.google.android.gms.internal.zzaar.zzwf(Unknown Source)
at com.google.android.gms.internal.zzaar.zza(Unknown Source)
at com.google.android.gms.internal.zzaav.zza(Unknown Source)
at com.google.android.gms.internal.zzaag.onConnectionFailed(Unknown Source)
at com.google.android.gms.common.internal.zzl$2.onConnectionFailed(Unknown Source)
at com.google.android.gms.common.internal.zzf$zzj.zzm(Unknown Source)
at com.google.android.gms.common.internal.zzf$zza.zzb(Unknown Source)
at com.google.android.gms.common.internal.zzf$zza.zzu(Unknown Source)
at com.google.android.gms.common.internal.zzf$zze.zzxH(Unknown Source)
at com.google.android.gms.common.internal.zzf$zzd.handleMessage(Unknown Source)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
According to this, the Android gradle plugin as of 2.4 will support Java 8 libraries. I will therefore remove Retrolambda completely when this is released.
In the meantime, if you want to use RxWear 2.x with native desugar right now, I've made the effort to downgrade its source to Java 6 (and I still feel sick about it). Just as a temporary solution until Patrick's official update:
allprojects {
repositories {
// TODO Used for temporary RxWear Desugar support: https://github.com/patloew/RxWear/issues/6
maven { url 'https://jitpack.io' }
}
}
dependencies {
// TODO Used for temporary RxWear Desugar support: https://github.com/patloew/RxWear/issues/6
compile 'com.github.aurae:RxWear:2.x-java6-SNAPSHOT'
// compile 'com.patloew.rxwear:rxwear2:2.0.0'
}