Ale*_*nov 1 java android proguard retrolambda rx-java2
我在我的项目中使用RxJava2和Retrolambda,并且有一段时间我觉得非常好,将回调包装成flowables,但有一天我遇到了这个错误,如果我尝试在这个非常简化的代码片段上运行proguard:
private Flowable<Object> getTestFlowable() {
return Flowable.create(emitter -> new Thread(new Runnable() {
@Override
public void run() {
emitter.onNext("one");
emitter.onComplete();
}
}).run(), BackpressureStrategy.BUFFER);
}
Run Code Online (Sandbox Code Playgroud)
然后我会得到这个警告,这使我的构建失败:警告:com.yandex.testfield.MainActivity $ 1:在程序类com.yandex中找不到封闭方法'void lambda $ getTestFlowable $ 0(io.reactivex.FlowableEmitter)'. testfield.MainActivity
现在,我看到两个临时解决方案来解决这个问题:
不要使用lambda而是使用匿名类
private Flowable<Object> getTestFlowable() {
return Flowable.create(new FlowableOnSubscribe<Object>() {
@Override
public void subscribe(FlowableEmitter<Object> emitter) throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
emitter.onNext("one");
emitter.onComplete();
}
}).run();
}
}, BackpressureStrategy.BUFFER);
}
Run Code Online (Sandbox Code Playgroud)但我仍然想知道为什么会这样?这是RxJava2\Retrolambda\Proguard中的错误吗?
是的,这是retrolambda中的错误https://github.com/orfjackal/retrolambda/issues/121
它在2.5.1中修复,并入了 gradle-retrolambda 3.6.1
更新到3.6.1后,此错误消失
| 归档时间: |
|
| 查看次数: |
1013 次 |
| 最近记录: |