Android Studio 3开始支持Java 7全部的特性,以及内置支持Java 8部分特性。
原理
Android Studio 3支持Java 8做法是使用称为desugar工具把javac编译后的.class做字节转换,转换为新的.class文件,最后使用dex转换为dex文件。
配置
Android Studio 3使用Java 8需要做以下配置:
1、升级Android的Grad了插件
在项目的build.gradle修改为
buildscript {
repositories {
// 配置google maven仓库
google()
...
}
dependencies {
//插件需要3.0.0或以上
classpath 'com.android.tools.build:gradle:3.0.1'
}
}
2、禁用Jack
Jack不再被支持,如果项目里有使用Jack,需要先禁用jack,删除jackOptions配置块即可。
android { ... defaultConfig { ... // 删除jackOptions配置 jackOptions { enabled true ... } } }
注意:如果Android Studio 3检测到项目支持使用Jack/ Retrolambda或 DexGuard,它默认会使用这些插件提供的Java 8功能。
3、设置sourceCompatibility 和 targetCompatibility
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
支持Java 8的特性列表
- Lambda expressions
- Method references
- Type Annotations (用在编译时,运行时不可用)
- Repeating annotations
- Default and static interface methods
API level 24开始支持一下Java 8 API:
java.util.stream
java.util.function
java.lang.FunctionalInterface
java.lang.annotation.Repeatable
java.lang.reflect.AnnotatedElement.getAnnotationsByType(Class)
java.lang.reflect.Method.isDefault()
所有的Android API level支持try-with-resources
参考:https://developer.android.com/studio/write/java8-support.html