Android Studio:unsupported class file version 52.0报错

一、错误场景

在工作中使用了Mapbox的android版的SDK,之前跑demo没什么问题,但是嵌入到其他人代码后报如下错误:

Android Studio:unsupported class file version 52.0报错_第1张图片

二、类似错误及解决方案

查了半天,看了几个有用的帖子,网上有一个报错和我的错误类似,但是用那些方法解决不了我的问题,如下报错:

error : unsupported class file version 52.0 

Conversion to Dalvik format failed with error 1

这个报错出错原因:(这个是我摘录的,没有亲测,因为我也没遇到这种错误

1).可能是用jdk 1.8运行程序时,某些类无法解析。。(jdk编译和运行版本的问题)
2).Java 编译器 版本和Android sdk版本不匹配。

52.0  版本是 java 8编译出来的class文件版本号。
怀疑是你使用了某些库, 这些库是使用java 8编译的,而你机器上是java 7或以下版本。
(所以解决办法是:把你的编辑器 的jdk 版本降低就好了)

解决方案:

Window->Preferences->Java->Compiler, 将 "Compiler compliance level" 设置为 1.7

三、我的报错原因及解决方案

看了很多帖子,受了不少启发,才渐渐理解这个问题的原因,额,居然buildtoolsVersion版本和java编译器冲突,我之前的依赖包都是基于jdk7编译的,而后加入的mapbox的依赖包是用jdk8编译的,报错中的version52就是jdk8的意思,我跑demo的时候buildtoolsVersion是26.0.2,而同事使用的是buildtoolsVersion25.0.4,可见25版本构建工具是基于jdk7的,所以解析不了一些基于jdk8的文件。下面是Jdk8的官方说明摘录,说明了之前版本不能编译jdk8的文件。所以解决方案就是将buildtoolsVersion升级为26.0.2即可。

针对我的mapbox依赖包,改了这个错误后还有一个jar包冲突的问题,这个不详细说了,按照报错说明删除对应的包即可,这是因为mapbox依赖包与之前工程中module中包都包含了okttp的包。

The Oracle Compatibility Guide for Java 8 says (in part),

The class file version for Java SE 8 is 52.0 as per the JVM Specification. Version 52.0 class files produced by a Java SE 8 compiler cannot be used in earlier releases of Java SE.


Android Studio:unsupported class file version 52.0报错_第2张图片

四、总结

最后的解决方案虽然很简单,但是如果不弄清楚这个原理,还是一团乱麻,搞不清楚。这个问题也将近困扰我一天的时间,没搞出来时候像便秘一样难受,最好搞定了也有一泻千里的感觉。

额,当然需要总结的是:

1、后续还要多看书,巩固自己的编程基础,这是根本中的根本

2、遇到问题了,不能急吼吼的瞎搞,还是多找找相关的资料理清楚相关的原理,及时不一定很快清清楚楚,但是根据报错的信息,找相关的文章等等看、思考,肯定会有所收获

3、实在一时搞不定的,就暂时不搞了,不然越弄越头大,搞的心态都很崩溃,不如先干别的。之所以要这样做,是因为我发现很多次自己困扰很久的问题越搞越搞不出来,但是等头脑清醒时候居然很快就搞定了。这个原理估计就是一次性接触太多,思维太乱,放一段时间思维敏捷时候再来梳理一遍就清晰了

参考文章链接:

https://stackoverflow.com/questions/37902840/got-unsupported-class-file-version-52-0-after-including-a-module-to-a-project

https://blog.csdn.net/JeterPong/article/details/53943061

你可能感兴趣的:(Android,debug,Android)