【发布时间】:2019-07-01 16:05:53
【问题描述】:
我将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。
只是为了测试,当我尝试使用像 stream 这样的 Java 8 功能时,编译器会按预期显示错误:
Call requires API level 24 (current min is 19): java.util.Collection#stream
项目编译时没有错误,但在尝试使用 Java 8 语言功能的低 Android 版本上,butterknife 会在运行时使应用程序崩溃吗?
【问题讨论】:
-
我的问题是什么意思?
-
所以如果我不使用 Jack 不会有任何问题吗?
-
是的,我理解,但是如果库使用流,Android 会检测到并抛出编译时错误吗?
-
德里克,我没有使用流。但是如果一个库使用它,Lint 会检测到它吗?
-
还是不明白,
butterknife使用 Java 8 功能(通过错误消息明显),但是当我通过sourceCompatibility启用 Java 8 功能时,minSdkVersion时没有警告19 岁?butterknife如何使用 Java 8 功能但不需要minSdkVersion> 19?
标签: android java-8 build.gradle android-min-sdk