如何在android上使用Java8库?

如何在android上使用Java8库?,java,android,Java,Android,我试图在我的android项目中使用一个使用Java8的库。我找不到一个办法使这项工作成功。我曾尝试使用复古兰姆达,但没有帮助。我不断得到错误:com.android.dx.cf.iface.ParseException:坏的类文件magic(cafebabe)或版本(0034.0000) 我对此进行了研究,了解到这是因为包含的库中有Java8语法。我一直在使用Java8SDK进行编译,现在正在使用AndroidStudio 08.2。救命啊! 该库是:解决方案1 等待android支持Java

我试图在我的android项目中使用一个使用Java8的库。我找不到一个办法使这项工作成功。我曾尝试使用复古兰姆达,但没有帮助。我不断得到错误:com.android.dx.cf.iface.ParseException:坏的类文件magic(cafebabe)或版本(0034.0000)

我对此进行了研究,了解到这是因为包含的库中有Java8语法。我一直在使用Java8SDK进行编译,现在正在使用AndroidStudio 08.2。救命啊! 该库是:

解决方案1 等待android支持Java8

解决方案2 使用非Java8的早期版本的库和/或要求库的开发人员提供一个/最后一个Java6(或kitcat以上的Java7)库

解决方案3 这是一种黑客行为,我还没有测试过,甚至没有使用过

用于将Java8字节码向后移植到Java6。在retrolambda的主页上,您可以找到一些关于它的文档。 可下载retrolambda

您可能需要将库jar解压缩到一个文件夹中,然后运行如下命令:

java -Dretrolambda.inputDir=<extracted_classfiles>
     -Dretrolambda.classpath=<extracted_classfiles>
     -Dretrolambda.bytecodeVersion=50
     -javaagent:retrolambda.jar
     -jar retrolambda.jar
java-Dretrolambda.inputDir=
-Dretrolambda.classpath=
-字节码版本=50
-javaagent:retrolambda.jar
-jar.lambda.jar
也许您必须根据库的依赖项来扩展类路径。 然后,您必须将生成的jar文件复制到android项目的lib文件夹中

也有可能


如果retrolambda不起作用,也许您可以找到另一个工具将Java8字节码向后移植到Java6字节码。

没有办法使用Java7重新编译库?应该是这样的考虑到它是android,在使用retrolambda到java之后,向java-6进行反向编织也可能是一个很好的计划-7@ZhuindenRetrolambda能够将Java8向后移植到Java5、6和7。事实上,我给Java6(Majorversion=50)而不是Java7(Majorversion=51)的代码提供了后端口。在我的帖子中更正了它。@AlexS但是如果库使用了其他Java 8功能(不仅仅是lambda)会怎么样呢?我有和@hzitoun相同的问题。例如,Base64编码器作为Java8的一部分出现在Javautil中。这将得到支持。