Cannot inline bytecode built with JVM target 1.8 into bytecode that is being built with JVM target 1.6. Please specify proper '-jvm-target' option
无法将使用JVM target 1.8构建的字节码内联到使用JVM target 1.6构建的字节码中。请指定正确的“ -jvm-target”选项。
解决
在 app/build.gradle 下
android {
...
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
// For Kotlin projects
kotlinOptions {
jvmTarget = "1.8"
}
}
Java 8 语言功能支持(Android Gradle 插件 3.0.0 及更高版本)
如需开始使用受支持的 Java 8 语言功能,请将 Android 插件更新为 3.0.0
(或更高版本)。在此之后,针对使用(在源代码中使用或通过依赖项使用)Java 8 语言功能的每个模块,更新模块的 build.gradle
文件,如上文所示。
使用 Android Gradle 插件 3.0.0 及更高版本构建应用时,插件并非支持所有 Java 8 语言功能。
Java 8 语言功能 | 备注 |
---|---|
lambda 表达式 | 请注意,Android 不支持 lambda 表达式的序列化。 |
方法引用 | |
类型注解 | 类型注解信息仅在编译时可用,在运行时不可用。此外,在 API 级别 24 及更低级别中,平台支持 TYPE ,而不支持 ElementType.<wbr style="box-sizing: inherit;">TYPE_<wbr style="box-sizing: inherit;">USE 或 ElementType.<wbr style="box-sizing: inherit;">TYPE_<wbr style="box-sizing: inherit;">PARAMETER 。 |
默认和静态接口方法 | |
重复注解 |
Java 8 及更高版本 API 脱糖支持(Android Gradle 插件 4.0.0 及更高版本)
如果您使用 Android Gradle 插件 4.0.0 或更高版本构建应用,插件扩展了对使用多种 Java 8 语言 API 的支持,而无需为应用设置最低 API 级别。
之所以能够实现对较低平台版本的这种额外支持,是因为脱糖引擎经过插件 4.0.0 及更高版本扩展后,也能使 Java 语言 API 脱糖。因此,您可以在支持较低 Android 版本的应用中添加过去仅在最新 Android 版本中可用的标准语言 API(如 java.util.streams
)。
使用 Android Gradle 插件 4.0.0 或更高版本构建应用时,支持下面一组 API:
- 顺序流 (
java.util.stream
) -
java.time
的子集 java.util.function
-
java.util.{Map,Collection,Comparator}
的最近新增内容 - 可选内容(
java.util.Optional
、java.util.OptionalInt
和java.util.OptionalDouble
)以及对上述 API 很有用的一些其他新类 -
java.util.concurrent.atomic
的一些新增内容(AtomicInteger
、AtomicLong
和AtomicReference
的新方法) -
ConcurrentHashMap
(包含 Android 5.0 的问题修复)
如需查看受支持的 API 的完整列表,请参阅通过脱糖获得 Java 8 及更高版本 API。
为了支持这些语言 API,插件编译了一个单独的 DEX 文件(其中包含缺失 API 的实现),并将其添加到您的应用中。脱糖过程会重新编写应用的代码,以便在运行时改用此库。
如需在任何版本的 Android 平台上启用对这些语言 API 的支持,请将 Android 插件更新为 4.0.0
(或更高版本),并在模块的 build.gradle
文件中添加以下内容:
android {
defaultConfig {
// Required when setting minSdkVersion to 20 or lower
multiDexEnabled true
}
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
}
网友评论