问题:Java新特性怎么兼容老的android版本,比如java7的新语法怎么在老设备上运行?
举例:try-with-resource语法是Java7才新增的,那么在老的android平台上怎么办?
方案:升级min sdk版本,为了完美使用java7新特性,只需要把min sdk设置为19(对应KitKat,实际上根据谷歌的官方文档KitKat是支持java7的,上面的表格有误)。实测在Android 4.4的小米Note手机上,能完美的使用try-with-resource新语法。支持低版本安卓会带来的非常大的开发成本,应该适时的提示支持的min sdk版本,牺牲极少数用户带来了极大的研发质量和效率提升。
问题:java8新特性又是怎么在旧的安卓机型上使用呢?
通过 desugar机制做部分兼容,其原理是在编译工具上,把新的java8语法转译(desugar处理)成低版本虚拟机(jvm)能识别的字节码,从而解决兼容性问题。但目前只支持java8的部分语言,并不是全部支持。后续只能依赖于google编译工具的升级,持续的对java8进一步的支持;或者能提升下min sdk也是一种办法。