有没有办法在低于24的Android API上使用Java 8功能接口?
我可以使用 retrolambda 来启用 Android API 级别 <24 的 lambda。所以这有效
myButton.setOnClickListener(view -> Timber.d("Lambdas work!"));
这也有效
Runnable runLater = () -> Timber.d("Lambdas work!");
runLater.run();
但是这个没有
Consumer<Integer> runLaterWithInt = (Integer i) -> Timber.d("i = " + i);
runLaterWithInt.accept(3);
最后一个适用于Android API级别24,但在其他设备上,此代码会导致崩溃
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$$Lambda$1
我没有使用 retrolambda,而是尝试启用 Java 8。前两个代码示例仍然有效,尽管 butterknife 停止工作。https://developer.android.com/preview/j8-jack.html#configuration 这里据说是受支持的,但是我在运行第三个时仍然遇到崩溃,这次有点不同ava.util.function
java.lang.NoClassDefFoundError: com.retrolambdatry.MainActivity$-void_onCreate_android_os_Bundle_savedInstanceState_LambdaImpl1