我們知道jdk的版本升級都會有一些對開發(fā)者比較好用的新特性,比如1.7支持了new ArrayList<>(); switch “string”,1.8的lambda表達式,合理使用這些新特性會有助于我們的開發(fā)。
有時候,如果導入了比較高版本的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) 其他版本是否有類似問題未去驗證。