JDK版本问题

虽然DVM也是用Java编程语言,Dalvik虚拟机和一般JAVA虚拟机(Java VM)并不兼容,他们两个的区别是JVM标准执行的是.class的字节码(bytecode ),而是DVM执行的是其专有的(.dex)执行文件。在编译过程中,Java把类编译成一个或多个.class byte code 文件,然后打包到jar中,JVM会从中jar文件中获得相应的.class文件和JRE字节码。 Android VM虽然也是用Java语言进行编程,Java程序通过编译后,还需要通过SDK中的dex工具转化成.dex格式,DVM再从其中读取指令和数据。

以下是我个人的理解,如有错误,欢迎留言指正

就目前我的理解而言,如果是Java程序员,那么他们的程序最后是要在JVM虚拟机上跑的,因此你用JDK1.6编译的.class文件,测试在1.5的运行环境下可能就跑不起来,容易出bug,原因就是不兼容,1.6上有的1.5上可能没有或者有变化。所以Java程序员们开发和测试用的JDK版本是严格一致的。
但是,我们Android是在Dalvik上跑.dex文件,最后java编译成的.class是1.5还是1.6还是1.7……我们是不太需要关心的,只要我们SDK中提供的dx工具可以将其编译成.dex文件(如果使用Jack工具链,那么连.class文件都没了——Jack (.java → .jack → .dex)),那么我们的向下兼容就看我们的minSdkVersion了,很多事Google给我们提供新版本SDK的时候就已经做了。

综上所述

对于Android程序员而言,用什么JDK版本,主要取决于以下几点:

  • 看公司有没有统一要求,拿人钱财,人家说了算。
  • Google支不支持新的JDK版本
  • 自己对新版本中的新特性有没有迫切需求,比如JDK1.7中switch的参数可以用String了,这个我挺喜欢,再比如你想用Lambda 表达式,那就换Java 8吧,不过需要Jack工具链。但是:

已知问题
Instant Run 目前不能用于 Jack,在使用新的工具链时将被停用。
由于 Jack 在编译应用时不生成中间类文件,依赖这些文件的工具目前不能用于 Jack。下面是一些工具示例:
对类文件进行操作的 Lint 检测工具
需要应用类文件的工具和库(例如使用 JaCoCo 进行仪器测试中)

你可能感兴趣的:(JDK版本问题)