我将butterknife
升级到10.1.0,这引发了此错误:
Execution failed for task ':app:mergeDexDebug'.
> Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
> Failed to transform artifact 'butterknife-runtime.aar (com.jakewharton:butterknife-runtime:10.1.0)' to match attributes {artifactType=android-dex, dexing-is-debuggable=true, dexing-min-sdk=19}
> Execution failed for DexingTransform: /Users/<REMOVED>/.gradle/caches/transforms-2/files-2.1/65b6816001722128222b6880d16907c6/jars/classes.jar.
> Error while dexing.
所以我添加到build.gradle:
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
但是,minSdkVersion
是19,但是如果我没有记错的话,Java 8要求API> = 26。
仅出于测试目的,当我尝试使用Java stream
之类的Java 8功能时,编译器会显示预期的错误:
Call requires API level 24 (current min is 19): java.util.Collection#stream
项目编译没有错误,但是黄油刀是否会在运行中以较低的Android版本(试图使用Java 8语言功能)使应用程序崩溃?
答案 0 :(得分:-1)
但是,minSdkVersion为19,但如果我使用Java 8,则API> = 26 不要误会。
Android Studio 3.0+本机支持Java 8,而Jack则被用来为早期Android Studio版本提供Java 8支持。
要开始在您的项目中支持Java 8,应在build.gradle
中添加以下内容(假设您已经在使用Android Studio 3.0 +)。
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
注意: :根据Android Java 8 support documentation
如果Android Studio检测到您的项目正在使用Jack, Retrolambda或DexGuard,IDE使用Java提供的Java 8支持。 这些工具。但是,请考虑迁移到默认值 工具链。
现在,正如您所说的,您使用的是流api,仅Android 24+上才支持。
Java 8功能和api的完整支持列表如下:
如果minSdkVersion低于sourceCompatibility,会发生什么?
如果您故意在低于其支持的min-sdk版本中使用上述任何一种API,(或者在您的情况下,minSdkVersion低于sourceCompatibility),它将为您提供lint error“ NewApi 强>”。这表明代码中的某些内容不是最佳的,或者可能崩溃。这可以解决您的应用在Android版本较低的设备上崩溃的问题。