微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > Eclipse >

使用JDK1.7 eclipse报错 Android requires compiler complia

时间:2013-04-12 16:23  浏览:努力统计中...
先说明下,设置编译等级无法解决此问题。 原项目是在intellijidea中写的。并且运行正常。但是idea对UI设计支持的不是很好。所以我导入到了eclipse中。 我代码中使用了部分1.7特性。例如
先说明下,设置编译等级无法解决此问题。
原项目是在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
............
android compiler jdk

ADT是基于JAVA 1.6 的


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

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

加个编译说明能不能解决?


可是事实貌似不是这样的。
理由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的源码。

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


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

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




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



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



有谁知道idea是怎么处理的


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

结贴,来者都有份!!
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%
    ------分隔线------