如何在 minsdk <24 上将 Kotlin 与 Butterknife 10.1.0 一起使用?
How to use Kotlin with Butterknife 10.1.0 on minsdk <24?
我正在将我的 Android 项目迁移到 AndroidX 库。 Butterknife 10.x 改进了对它的支持,所以我认为使用它很好。我的项目是用 Kotlin (1.3.30) 制作的。
Butterknife >8 版本要求您像这样使用 Java8:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
这适用于 >=24 的 minsdk。而且在很大程度上它也适用于较低版本。但是当 Kotlin 编译为 Java 8 时,一些功能在 minsdk <24 上不起作用。例如我收到以下异常的那个。
java.lang.NoSuchMethodError: No static method hashCode(J)I in class Ljava/lang/Long; or its super classes (declaration of 'java.lang.Long' appears in /system/framework/core-libart.jar)
Long.hashCode() 是 Java 8 中的新 api,但在旧的 android 版本中不受支持。 问题通过告诉编译器使用 Java 6 解决了同样的问题,但是 butterknife 10.x 不支持,我需要 AndroidX.
我想这是一个很常见的问题,但我还没有找到解决办法。我该如何解决?
当你有 Kotlin android extensions 时,你真的不需要 Butterknife。
使用起来就简单多了。
像这样:
myTextView.text = "Hello World!"
问题与使用 Kotlin 1.3.30 有关(请参阅 This issue). I have temporarily fixed the issue by using Kotlin 1.3.21. In a future version of D8 also the static methods of Long and Char will be desugared Issue here。它已经修复,但需要一些时间才能达到 D8 的稳定版本。之后就不会了不再是一个问题。
我正在将我的 Android 项目迁移到 AndroidX 库。 Butterknife 10.x 改进了对它的支持,所以我认为使用它很好。我的项目是用 Kotlin (1.3.30) 制作的。
Butterknife >8 版本要求您像这样使用 Java8:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
这适用于 >=24 的 minsdk。而且在很大程度上它也适用于较低版本。但是当 Kotlin 编译为 Java 8 时,一些功能在 minsdk <24 上不起作用。例如我收到以下异常的那个。
java.lang.NoSuchMethodError: No static method hashCode(J)I in class Ljava/lang/Long; or its super classes (declaration of 'java.lang.Long' appears in /system/framework/core-libart.jar)
Long.hashCode() 是 Java 8 中的新 api,但在旧的 android 版本中不受支持。
我想这是一个很常见的问题,但我还没有找到解决办法。我该如何解决?
当你有 Kotlin android extensions 时,你真的不需要 Butterknife。 使用起来就简单多了。
像这样:
myTextView.text = "Hello World!"
问题与使用 Kotlin 1.3.30 有关(请参阅 This issue). I have temporarily fixed the issue by using Kotlin 1.3.21. In a future version of D8 also the static methods of Long and Char will be desugared Issue here。它已经修复,但需要一些时间才能达到 D8 的稳定版本。之后就不会了不再是一个问题。