赞
踩
今日开发时候发现gradle编译不通过,报错如下:
Error:Execution failed for task ':app:transformClassesWithRetrolambdaForDebug'.
> Process 'command 'C:\Program Files\Android\Android Studio\jre\bin\java.exe'' finished with non-zero exit value 1
看报错内容,是lambda表达式出了问题,但是lambda一直在引用也没出错,为什么偏偏今天出了错。
查找了好多资料都没找到答案,大多博客告诉我,clean一下就ok了,但是,能clean一下就可以解决的问题还需要贴出来写博客吗?
于是我将最近修改过的类里的代码一段一段注释掉发现,出错的地方根本不在Activity里。因为最近加入了umeng推送的SDK,修改过Application,而报错的内容又跟lambda相关,在Application里先找到了一个lambda表达式,将此行注释掉,直接可以编译通过。
在我的代码里,是用lambda简写了一个Handle
handler.post(() ->
{...}
难道在Application里,不支持使用lambda表达式?又或许,Application里不可以用lambda表达式简写线程?
抱着这样的疑问,我又在Application里分别加入了两段代码:
new Button(this).setOnClickListener(v -> Toast.makeText(App.this, "aaa", Toast.LENGTH_SHORT).show());
Handler mHandler = new Handler();
// 调用Handler.post(Runnable r)方法
mHandler.post(() -> Toast.makeText(App.this, "2222", Toast.LENGTH_SHORT).show());
但是项目居然是可以跑起来的!
----------------------------------2018年4月16日更新-------------------------------------------
根据@boson__ 的说法:
是retrolambda 兼容性的问题
应该在app下build.gradle中加上
retrolambda { jvmArgs '-noverify' }
就可以了,测试通过,告示天下~同时感谢@boson__同学
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。