问题
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?
回答1:
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:
Add the following to your
app/build.gradle
file:kapt { generateStubs = true }
Put the following line inside the
dependencies
block of the samebuild.gradle
file (assuming you already addedcompile 'com.jakewharton:butterknife:7.0.1'
to your dependencies):kapt 'com.jakewharton:butterknife:7.0.1'
And that should be it.
回答2:
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.
来源:https://stackoverflow.com/questions/32952049/does-butterknife-7-x-work-with-kotlin-m14