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
無(wú)法將使用JVM target 1.8構(gòu)建的字節(jié)碼內(nèi)聯(lián)到使用JVM target 1.6構(gòu)建的字節(jié)碼中吻商。請(qǐng)指定正確的“ -jvm-target”選項(xiàng)往声。
解決
在 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 語(yǔ)言功能支持(Android Gradle 插件 3.0.0 及更高版本)
如需開始使用受支持的 Java 8 語(yǔ)言功能璧微,請(qǐng)將 Android 插件更新為 3.0.0
(或更高版本)嗦玖。在此之后片橡,針對(duì)使用(在源代碼中使用或通過(guò)依賴項(xiàng)使用)Java 8 語(yǔ)言功能的每個(gè)模塊妈经,更新模塊的 build.gradle
文件,如上文所示捧书。
使用 Android Gradle 插件 3.0.0 及更高版本構(gòu)建應(yīng)用時(shí)吹泡,插件并非支持所有 Java 8 語(yǔ)言功能。
Java 8 語(yǔ)言功能 | 備注 |
---|---|
lambda 表達(dá)式 | 請(qǐng)注意经瓷,Android 不支持 lambda 表達(dá)式的序列化爆哑。 |
方法引用 | |
類型注解 | 類型注解信息僅在編譯時(shí)可用,在運(yùn)行時(shí)不可用舆吮。此外揭朝,在 API 級(jí)別 24 及更低級(jí)別中,平臺(tái)支持 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 潭袱。 |
默認(rèn)和靜態(tài)接口方法 | |
重復(fù)注解 |
Java 8 及更高版本 API 脫糖支持(Android Gradle 插件 4.0.0 及更高版本)
如果您使用 Android Gradle 插件 4.0.0 或更高版本構(gòu)建應(yīng)用,插件擴(kuò)展了對(duì)使用多種 Java 8 語(yǔ)言 API 的支持锋恬,而無(wú)需為應(yīng)用設(shè)置最低 API 級(jí)別屯换。
之所以能夠?qū)崿F(xiàn)對(duì)較低平臺(tái)版本的這種額外支持,是因?yàn)槊撎且娼?jīng)過(guò)插件 4.0.0 及更高版本擴(kuò)展后与学,也能使 Java 語(yǔ)言 API 脫糖彤悔。因此,您可以在支持較低 Android 版本的應(yīng)用中添加過(guò)去僅在最新 Android 版本中可用的標(biāo)準(zhǔn)語(yǔ)言 API(如 java.util.streams
)索守。
使用 Android Gradle 插件 4.0.0 或更高版本構(gòu)建應(yīng)用時(shí)晕窑,支持下面一組 API:
- 順序流 (
java.util.stream
) -
java.time
的子集 java.util.function
-
java.util.{Map,Collection,Comparator}
的最近新增內(nèi)容 - 可選內(nèi)容(
java.util.Optional
、java.util.OptionalInt
和java.util.OptionalDouble
)以及對(duì)上述 API 很有用的一些其他新類 -
java.util.concurrent.atomic
的一些新增內(nèi)容(AtomicInteger
卵佛、AtomicLong
和AtomicReference
的新方法) -
ConcurrentHashMap
(包含 Android 5.0 的問(wèn)題修復(fù))
如需查看受支持的 API 的完整列表幕屹,請(qǐng)參閱通過(guò)脫糖獲得 Java 8 及更高版本 API。
為了支持這些語(yǔ)言 API级遭,插件編譯了一個(gè)單獨(dú)的 DEX 文件(其中包含缺失 API 的實(shí)現(xiàn))望拖,并將其添加到您的應(yīng)用中。脫糖過(guò)程會(huì)重新編寫應(yīng)用的代碼挫鸽,以便在運(yùn)行時(shí)改用此庫(kù)说敏。
如需在任何版本的 Android 平臺(tái)上啟用對(duì)這些語(yǔ)言 API 的支持,請(qǐng)將 Android 插件更新為 4.0.0
(或更高版本)丢郊,并在模塊的 build.gradle
文件中添加以下內(nèi)容:
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'
}