解决Error with transformClassesWithDesugarForDebug 和finished with non-zero exit value 1的问题

    网上有很多关于finished with non-zero exit value 1的解决方案,事实上不同的问题都会报出这个问题。我们应该针对不同的报错去解决相应的问题。比如Error with transformClassesWithDesugarForDebug  和Error:Execution failed for task‘:app:transformClassesWithDexDebug’都会报出finished with non-zero exit value 1的问题。对于Error:Execution failed for task‘:app:transformClassesWithDexDebug’的问题网上已经有十分详细的解答,因为是Dex报错,所以一般来讲是jar包重复的问题。本文主要针对解决Error with transformClassesWithDesugarForDebug 问题提供方法和思路。

    Error with transformClassesWithDesugarForDebug会在更新As到3.0版本时报出。因为在As3中开始支持Java8,支持 lambda 语法。为了支持Java8,As中新加入了一个desugar的东西,把Java8的字节码翻译成dalvik可识别的。

    (了解desugar更多,可以百度张涛大神的“AndroidStudio支持Java8了,就问你敢用吗?“)

    Desugar报错就是说明我们涉及到Java8的部分有问题

    在我的项目中,涉及到Java8的部分就是使用了lambda表达式,就把问题锁定在lambda上,如果你的项目中没有使用lambda那么下面的方法就不适合你,要根据具体问题讨论。经过查找,发现虽然As3虽然支持了Java8,但是还是会有时在lambda表达式这块报错,我们解决的办法就是使用retrolambda插件,这个插件可以保证lambda在使用时不会报错。在使用retrolambda之前,要保证java版本的正确性,SDk Tools版本的一致性,保证不是这些原因报错。

    retrolambda的使用网上有很多,给出其中一个地址https://blog.csdn.net/codezjx/article/details/51327164,按照上面的步骤即可。

    目前来说,在使用retrolambda的时候,要注意使用3.7版本,3.6及以下版本会报错,rxjava也应该使用2.0版本。即使用

implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
implementation 'me.tatarka:gradle-retrolambda:3.7.0'




  



展开阅读全文

没有更多推荐了,返回首页