butterknife 7.x 可以与 Kotlin M14 一起使用吗?

Does butterknife 7.x work with Kotlin M14?

我正在尝试将 Butterknife 与一些 Kotlin 代码和 Java 代码一起使用。我知道在 M12 之前,对 ButterKnife 所需的注释处理的支持很差或没有。所以我一直在 Java 中进行活动。它至少在 Java 中与 Butterknife 6.x 和 preM12 Kotlin 一起工作。 我现在正在尝试使用 M13 和 M14 进行 butterknife 7.x。它甚至应该具有注释处理支持,但它对我不起作用。 bind() 函数不绑定我的适配器中的任何内容,它是用 Java 编写的,也不在 activity 中用 Kotlin 编写的。

我在 build.gradle 中使用它(在 Github 上尝试了最新版本):

apply plugin: 'com.neenbedankt.android-apt'

dependencies {
   provided files('libs/butterknife-annotations.jar')
   kapt files('libs/butterknife-compiler-8.0.0-SNAPSHOT.jar')
   compile 'com.jakewharton:butterknife:8.0.0-SNAPSHOT@aar'
}

这无法编译。我也试过 'com.neenbedankt.android-apt' 可以编译但绑定不起作用。

我知道 butterknife 可能还不支持它。但是有什么技巧可以让它工作吗?

支持 Butterknife。使用 kapt:[1], [2].

请注意,Butterknife 不支持私有 Java 字段,因此您可以使用 lateinit 修饰符使其成为 public.

此外,如果您使用 kapt, apply plugin: 'com.neenbedankt.android-apt' 不再需要线路。

它确实适用于当前版本的 Kotlin (1.0.0-beta-3595),我建议您查看 android-butterknife project which can be found inside the JetBrains's kotlin-examples 存储库。简而言之,您需要做的就是:

  1. 将以下内容添加到您的 app/build.gradle 文件中:

    kapt {
        generateStubs = true
    }
    
  2. 将以下行放入同一 build.gradle 文件的 dependencies 块中(假设您已经将 compile 'com.jakewharton:butterknife:7.0.1' 添加到依赖项中):

    kapt 'com.jakewharton:butterknife:7.0.1'
    

应该就是这样了。