mogę używać retrolambda włączyć lambdy z poziomu Android API < 24. Tak to działaCzy istnieje sposób korzystania z funkcjonalnych interfejsów Java 8 w Androidzie API poniżej 24?
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
Działa to również
Runnable runLater =() -> Timber.d("Lambdas work!");
runLater.run();
Ale to nie
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
ostatnia działa na Androidzie 24 poziom interfejsu API, ale na innych urządzeniach kod ten powoduje awarię
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
Zamiast używać retrolambdy, próbowałem włączyć Java 8. Pierwsze dwa przykłady kodu nadal działają, mimo że nożyk przestał działać. https://developer.android.com/preview/j8-jack.html#configuration tutaj ava.util.function
mówi się być obsługiwane, ale wciąż otrzymuję błąd podczas uruchamiania trzeci, tym razem jest to trochę inaczej
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1
Prawdopodobny duplikat [Czy Java 8 działa na api Android 23 i wyższych?] (Http://stackoverflow.com/questions/35934528/does-java-8-work-on-android-api-23-and- powyżej) –
Pytanie jest słabo zatytułowane; lambda jest w rzeczywistości przenoszona do starszych wersji Androida, więc nie potrzebujesz Retrolambdy. Po prostu zainstaluj nowe Android Studio i twórz narzędzia. –
Być może jest to słabo zatytułowane. Jak rozumiem, nie potrzebuję retorlambda, jeśli mam Androida N SDK i włączam opcje kompilacji Jack. Lambda działa tak czy inaczej. Ale funkcjonalne interfejsy z 'java.util.function' nadal nie działają. – sasha199568