问题:在Android Studio中使用流API时总是报错call requires API Leve24,current is ...
java8种的核心特性,lambda表达式、函数式接口、流API、默认方法和新的Date以及Time API.Android studio增加了对lumbda表达式的支持。我现在想测试流API,看一下它的用法。Android studio本身不支持lumbda和java 8,但是可以通过添加插件来支持lumbda。开发文档中说Jack支持java 8 的新特性(https://developer.android.com/guide/platform/j8-jack.html#supported-features),但是当studio添加完retrolambda,SDK更新到Android N,当在Android Studio中添加
jackOptions {
enabled true
}
后报错误:Error:Cannot get property 'destinationDir' on null object,没找到解决办法。
在Studio中写Android 代码,当用到比如foreach之类的方法,如果minSdkVersion小于24,总是报 call requires API Leve24,current is ...,只有把minSdkVersion设置为24+。但是这样的话只能运行在Android 7.0的手机上。手边没有7.0+的手机,studio上也不能创建7.0+模拟器。java工程不需要Android API leve,但是在studio上创建的 java工程都是在 Android Project基础上再通过创建module形式来创建的,当不调用流 API方法时可以正常执行,但是添加流API后还是报错call requires API Leve24,current is 1,无论minSdkVersion设置为多少。
原因:Android Studio不支持java8,jack虽然支持但是jack与retrolumbda冲突(studio不添加retrolumbda不支持lumbda表达式,不添加jack不支持java8,都添加会冲突报Error:Cannot get property 'destinationDir' on null object)。java工程不需要API Level,但是studio中的java工程是在Android project的基础上修改的,还是会报API Leve异常
解决方式:在eclip中使用
步骤:
1.下载最新的eclipse(地址:https://www.eclipse.org/downloads/download.php?file=/oomph/epp/neon/R/eclipse-inst-win64.exe)
neon现在提高了对java8特性的支持,对java9也有一定的支持(更多特性查看https://www.eclipse.org/neon/noteworthy/),同时还支持gradle工程,下载完直接运行就可以
2.创建java工程时选择java8
public class TestLambda {
public static void main(String[] args) {
System.out.println("main method run ................");
testBeforeForEach();
testForEach();
}
private static void testForEach() {
List features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
features.forEach(n -> System.out.println("Java 8之后.................................................."+n));
}
private static void testBeforeForEach(){
// Java 8之前:
List<String> features = Arrays.asList("Lambdas", "Default Method", "Stream API", "Date and Time API");
for (String feature : features) {
System.out.println("Java 8之前................"+feature);
}
}
}
运行结果:
参考资料:https://developer.android.com/guide/platform/j8-jack.html
https://wiki.eclipse.org