我们知道jdk的版本升级都会有一些对开发者比较好用的新特性,比如1.7支持了new ArrayList<>(); switch “string”,1.8的lambda表达式,合理使用这些新特性会有助于我们的开发。
有时候,如果导入了比较高版本的jdk写法的时候,你只能选择用对应版本的jdk来进行编译。
修改位置:module setting里properties的source Compatibility 和target Compatibility.
1.6改到1.7基本没什么坑和需要设置的。
改到1.8时候则需要注意。
如果你的module比较简单,可能会看到如下的报错:
Error:Jack is required to support java 8 language features. Either enable Jack or remove sourceCompatibility JavaVersion.VERSION_1_8.
在module的defaultConfig里添加
jackOptions {
enabled true
}
注buildTools需要24.0.0以上
在网上查了下,这么做会不能兼容其他的apt插件,比如butterknife,Dagger等,jdk8和apt二选一。
同样是换到了jdk8我在一个比较复杂的Project中时候报的错不是上述的,而是 说j
“XX\bin\java.exe'' finished with non-zero exit value 2”.
在网上看到了,还有另一种的第三方兼容解决方案:GitHub - evant/gradle-retrolambda: A gradle plugin for getting java lambda support in java 6, 7 and android。 有兴趣的可以自己去尝试下。
注:本人使用的as2.1(mac) 其他版本是否有类似问题未去验证。