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 进行仪器测试中)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,590评论 19 139
  • 目前Android studio 2.4预览版不再需要使用jack 工具链了 这件事要从一次报错开始 如果仅仅是想...
    CalvinNing阅读 847评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 179,111评论 25 709
  • 昨天家里来客人,爷爷负责招待,小家伙在屋里就显得异常调皮。为了不打扰爷爷与客人的交流,黑白爸爸把宝贝带到屋子里,本...
    黑的白的黑阅读 349评论 0 2
  • 日期:2017.8.22 货币兑:EURUSD(欧美) 方向:看多 挂单:Buy Limit 止损点位:1.174...
    100美元百倍计划阅读 333评论 0 0

友情链接更多精彩内容