ButterKnife绑定失败?android-apt没用?尝试用一下annotationProcessor

本文介绍了ButterKnife的原理及使用方法,详细解释了APT工具的作用,并提供了从APT迁移到annotationProcessor的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近新项目使用ButterKnife时遇到了一个问题,明明gradle依赖已经添加了,代码中也绑定了,但是却绑定失败了。查询资料原来是android apt的作者表示不再维护了,那这个apt不维护跟ButterKnife绑定失败有什么关系呢?
首先看看什么是android apt?APT(Annotation Processing Tool)是一个注解处理工具。该工具对源文件进行处理,找出其中的带有注解的代码,并且对其中注解的部分生成额外的文件。比如使用Butterknife写出的代码如下所示:

@BindView(R.id.tv_title)
TextView mTitle;

@OnClick(R.id.iv_back)
void onBackClicked(View view) {
    finish();
}

可以看出当获取布局中一个TextView时,在上面加上@BindView(R.id.id名)时,就相当于初始化了。是不是很简单?用法应该来说很简单,这里就不再多说了,不过需要注意的是,如果使用Android ButterKnife Zelezny一键注解生成插件时,则需要将光标放在当前布局代码上面右击,然后点击Generate中才会出现Generate ButterKnife Injections这个选项。否则找不到这个选项。
ButterKnife自动生成的源文件如下:

public class TestActivity_ViewBinding<T extends TestActivity> implements Unbinder {
  protected T target;
  private View view2131689760;

  public TestActivity_ViewBinding(final T target, View source) {
    this.target = target;
    View view;
    target.mTitle = Utils.findRequiredViewAsType(source, R.id.tv_title, "field 'mTitle'", TextView.class);
    view = Utils.findRequiredView(source, R.id.iv_back, "method 'onBackClicked'");
    view2131689760 = view;
    view.setOnClickListener(new DebouncingOnClickListener() {
      @Override
      public void doClick(View p0) {
        target.onBackClicked(p0);
      }
    });
  }

  @Override
  public void unbind() {
    T target = this.target;
    if (target == null) throw new IllegalStateException("Bindings already cleared.");
    target.mTitle = null;
    view2131689760.setOnClickListener(null);
    view2131689760 = null;
    this.target = null;
  }
}

我们可以看出当编译后会自动生成这个源文件,文件名就是TestActivity_ViewBinding,说明这是在TestActivity的基础上生成的源文件。这里Utils.findRequiredViewAsType()方法帮我们自动找到布局文件中的id,然后生成控件。用到@onCLick注解则自动加上了View.setOnClickListener()方法。在unBind()方法中则对目标进行清空,释放资源,应该说ButterKnife封装的非常好,使用很方便。
也就是说我们如此快捷的获取到当前控件的背后都是这个APT的功劳,那么现在这个APT不在维护了。我们应该如何使用这些注解类的工具呢?官方推荐是在gradle插件版本在2.2以上版本进行使用annotationProcessor。从apt换到annotationProcessor也是非常简单的。
如果原来已经用了apt的工具,那么首先将原来apt配置删除。在Module中的gradle中将下列apt语句删除:
dependencies {
apt ‘com.jakewharton:butterknife-compiler:8.3.0’
}
接着在Module中gradle的dependencies中加上下列代码:

    dependencies { 
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
        compile 'com.jakewharton:butterknife:8.5.1'
} 

好了,就是这么简单,其实就是把apt替换成了annotationProcessor,重新编译运行一下吧。。。
以后注解相关的插件慢慢不用android-apt啦,比如EventBus还有Google的dagger,可以尝试用下annotationProcessor吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值