Code Bye

使用JDK1.7 eclipse报错 Android requires compiler compliance level 5.0 or 6.0.

先说明下,设置编译等级无法解决此问题。
原项目是在intellij idea中写的。并且运行正常。但是 idea对UI设计支持的不是很好。所以我导入到了eclipse中。

我代码中使用了部分1.7特性。例如 switch 使用字符串等等。
如果更改为1.6 
此错误消失:

Android requires compiler compliance level 5.0 or 6.0. Found ""1.7"" instead. Please use Android Tools > Fix Project Properties.

但是代码中需要大量修改使用了1.7特性的部分。并且switch只能修改为if语句了。

有什么方法能解决此问题?
eclipse版本:

Eclipse IDE for Java Developers

Version: Juno Service Release 2
Build id: 20130225-0426

ADT版本:

Android DDMS	                21.1.0.v201302060044-569685
Android Development Tools	21.1.0.v201302060044-569685
............

10分
ADT是基于JAVA 1.6 的
引用 1 楼 CuGBabyBeaR 的回复:

ADT是基于JAVA 1.6 的

看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?

引用 2 楼 archy123 的回复:

引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?

他的意思是你可以装1.7的JDK(因为JAVA1.7里有1.6的编译器) 
但是Android本身是不支持JAVA 1.7的… 所以你还是得选成1.6的编译器


5分
加个编译说明能不能解决?
引用 3 楼 CuGBabyBeaR 的回复:

引用 2 楼 archy123 的回复:引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?他的意思是你可以装1.7的JDK(因为JAVA1.7里有1.6的编译器) 
但是Android本身是不支持JAVA 1.7的… 所以你还是得选成……

可是事实貌似不是这样的。
理由1.如果Android本身不支持jdk1.7,那么无论使用什么IDE应该都是同样效果。
理由2.我对apk文件,和class文件均进行了反编译。
代码如下:
class文件反编译结果

  switch (ContentListActivity.this.myApplication.getTabs())
          {
          case "receive":
..........

apk文件反编译后的smali文件

    .line 95
    :sswitch_0
    const-string v3, "receive"

这应该是支持吧….

对了,switch方法,最后好像是使用的equals方法
   invoke-virtual {v4, v3}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

不知道1.7中switch对字符串的处理是不是使用的equals方法。没有去查看jdk的源码。


5分
Please use Android Tools > Fix Project Properties.
你按照提示操作一下看看
引用 7 楼 zyxel60b 的回复:

Please use Android Tools > Fix Project Properties.
你按照提示操作一下看看

多谢回复,但是前面已经说了。更改编译等级无法解决问题。

引用 5 楼 archy123 的回复:

引用 3 楼 CuGBabyBeaR 的回复:引用 2 楼 archy123 的回复:引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?他的意思是你可以装1.7的JDK(因为JAVA1.7里有1.6的编译器) 
但是Android本身是不……

是吗…我自己倒是没试过
之前也遇到过这个问题 我是看stackoverflow上是这么说的
http://stackoverflow.com/questions/7637144/android-requires-compiler-compliance-level-5-0-or-6-0-found-1-7-instead-plea

引用 5 楼 archy123 的回复:

引用 3 楼 CuGBabyBeaR 的回复:引用 2 楼 archy123 的回复:引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?他的意思是你可以装1.7的JDK(因为JAVA1.7里有1.6的编译器) 
但是Android本身是不……

话说
http://developer.android.com/sdk/index.html
SYSTEM REQUIREMENTS中写的是JDK 6

引用 10 楼 CuGBabyBeaR 的回复:

引用 5 楼 archy123 的回复:引用 3 楼 CuGBabyBeaR 的回复:引用 2 楼 archy123 的回复:引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?他的意思是你可以装1.7的JDK(因为JAVA1.7里有1.6的……

可以使用jdk1.7,但是编译等级必须是1.6,也就是说。代码必须兼容1.6才行。我现在纳闷的是,idea下是怎么编译通过的。难道idea 会自动修正编码。不明白了。。



有谁知道idea是怎么处理的
引用 11 楼 archy123 的回复:

引用 10 楼 CuGBabyBeaR 的回复:引用 5 楼 archy123 的回复:引用 3 楼 CuGBabyBeaR 的回复:引用 2 楼 archy123 的回复:引用 1 楼 CuGBabyBeaR 的回复:ADT是基于JAVA 1.6 的
看了下文档说必须1.6或更高。。难道说更高只是指JDK可以使用高版本,但是语言特性却不能使用高版本的?他的意思是你可以……

我也不了解..
业余程序员表示没在其他平台玩过….

结贴,来者都有份!
话说  怎么解决的啊  
引用 15 楼 DOXL0 的回复:

话说  怎么解决的啊  

修改代码解决的

引用 15 楼 DOXL0 的回复:

话说  怎么解决的啊  

幸亏idea比较智能,重构代码比较快,先在idea中修改编译等级,然后使用IDE自动修正代码就好了。也没花太多时间

难道只有修改自己的代码来解决问题吗,这样的话1.7中好多新的功能都没法使用了
我也遇到了这个问题,搜帖子发现没有解决办法  后来换了开发环境解决了该问题, 现在将解决的环境配置贴出来 希望以后有人可以有一点帮助吧。。。

ADT 23.0.4
android  SDK 5.0
jdk1.8.0_11


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明使用JDK1.7 eclipse报错 Android requires compiler compliance level 5.0 or 6.0.