The butterknife-reflect
artifact is an API-compatible replacement for butterknife
which uses
100% reflection to fulfill field and method bindings for use during development.
The normal butterknife
artifact requires the use of butterknife-compiler
as an annotation
processor for compile-time validation of your bindings and code generation for runtime performance.
This is a desirable feature for your CI and release builds, but it slows down iterative development.
By using butterknife-reflect
for only your IDE builds, you have one less annotation processor
sitting between you and your running app. This is especially important for Kotlin-only or
Java/Kotlin mixed projects using KAPT. And if butterknife-compiler
is your only annotation
processor for a module, using butterknife-reflect
means that zero annotation processors run
during development.
No.
Well technically you can, but don't. It's slow, inefficient, and lacks the level of validation that normal Butter Knife usage provides.
Kotlin modules:
dependencies {
if (properties.containsKey('android.injected.invoked.from.ide')) {
implementation 'com.jakewharton:butterknife-reflect:<version>'
} else {
implementation 'com.jakewharton:butterknife:<version>'
kapt 'com.jakewharton:butterknife-compiler:<version>'
}
}
Java modules:
dependencies {
if (properties.containsKey('android.injected.invoked.from.ide')) {
implementation 'com.jakewharton:butterknife-reflect:<version>'
} else {
implementation 'com.jakewharton:butterknife:<version>'
annotationProcessor 'com.jakewharton:butterknife-compiler:<version>'
}
}
(Replacing <version>
with whatever version you are using.)
If you have a dedicated variant for development you can skip the if
check and simply add
butterknife-reflect
to that variant and butterknife
+butterknife-compiler
for the regular
variants.