Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Does butterknife 7.x work with Kotlin M14?

I'm trying to use Butterknife with some Kotlin code and also Java code. I know that before M12, there was bad or no support for annotation processing that ButterKnife required. So I have kept my activities in Java. It was working at least in Java with Butterknife 6.x and preM12 Kotlin. I'm trying now butterknife 7.x with M13 and M14. It should have even annotation processing support, but it's not working for me. bind() function doesn't bind anything in my adapter which is written in Java nor in activity written in Kotlin.

I'm using this in build.gradle (tried latest version on 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'
}

This doesn't compile. I tried also 'com.neenbedankt.android-apt' which does compile but binding is not working.

I know that there is probably not support in butterknife for that yet. But is there any hack to get it working?

like image 214
Vojtěch Sázel Avatar asked Oct 05 '15 15:10

Vojtěch Sázel


2 Answers

It does work with the current version of Kotlin (1.0.0-beta-3595), I suggest you to take a look at the android-butterknife project which can be found inside the JetBrains's kotlin-examples repo. In short all you need to do is:

  1. Add the following to your app/build.gradle file:

    kapt {
        generateStubs = true
    }
    
  2. Put the following line inside the dependencies block of the same build.gradle file (assuming you already added compile 'com.jakewharton:butterknife:7.0.1' to your dependencies):

    kapt 'com.jakewharton:butterknife:7.0.1'
    

And that should be it.

like image 89
aga Avatar answered Nov 18 '22 13:11

aga


Butterknife is supported. Use kapt: [1], [2].

Note that Butterknife does not support private Java fields, so you can use the lateinit modifier to make it public.

Also, if you use kapt, apply plugin: 'com.neenbedankt.android-apt' line is not needed anymore.

like image 30
yanex Avatar answered Nov 18 '22 14:11

yanex