29

I'm using annotated attributes all over my Android project to bind Views and events to fields and methods.

@BindView(R.id.textViewOrderId)
TextView textViewOrderId;

@OnClick(R.id.buttonDateFilter)
public void onButtonDateFilter(View view) {...}

Migrating out of ButterKnife has become a bit expensive now. I would like to clarify a few things about this new Gradle Plugin change,

  • How will non-final resource ids affect my current project?
  • Will I have to migrate out of ButterKnife for good if I update the Gradle Plugin?
  • How effective is the R2 class mentioned in this Reddit post?
Roshana Pitigala
  • 7,058
  • 8
  • 38
  • 66

2 Answers2

23

This still has no answer. But I suppose there is no option but to replace ButterKnife with an alternative, most probably View Binding.

As it states in this article, View Binding Tutorial for Android: Getting Started:

Additionally, ButterKnife’s development is coming to an end. Jake Wharton, the creator of this library, is deprecating it in favour of View Binding.

From the ButterKnife GitHub page:

Attention: This tool is now deprecated. Please switch to view binding. Existing versions will continue to work, obviously, but only critical bug fixes for integration with AGP will be considered. Feature development and general bug fixes have stopped.

Roshana Pitigala
  • 7,058
  • 8
  • 38
  • 66
Big_Chair
  • 960
  • 2
  • 14
  • 40
  • What if we're using a view holder in recyclerView? I don't think the view biding still works under this circumstance. So again, another disaster to developers. – Kimi Chiu Feb 24 '21 at 05:01
  • In Kotlin, there's no need to use view binding, because kotlin android extensions does the trick way better. However, still we need to set `onClickListener` in code, so that's no alternative to butter knife. – user1209216 Mar 31 '21 at 12:06
5

As suggested by Jake Wharton, you can apply the butterknife-plugin and use R2 instead of R to access resource ids.

Ridcully
  • 22,583
  • 7
  • 66
  • 81