ButterKnife的官网:https://github.com/JakeWharton/butterknife
参考网址:https://blog.youkuaiyun.com/zyw0101/article/details/80399225
1.今天在引入ButterKnife框架时,发现官网上
- 项目根目录的build.gradle配置了:
classpath ‘com.jakewharton:butterknife-gradle-plugin:10.1.0’ - 而在app目录的build.gradle也配置了:
implementation ‘com.jakewharton:butterknife:10.1.0’
annotationProcessor ‘com.jakewharton:butterknife-compiler:10.1.0’ - 因为我项目里面只引用了app目录下面的引入,所以担心不引入根目录的会有问题,所以查找了下该问题,发现:
- 如果你引入的注解只在app里面使用,就只需要引入app里面的
- 如果你引入的注解是在Liabrary里面使用,就需要同时引入根目录里面的
2.引入成功后,运行项目发现报错,错误如下:
Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91
is also present at [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 value=(androidx.core.app.CoreComponentFactory).
解决:
参考网址:
Androidx和Android support库共存问题解决
https://blog.youkuaiyun.com/JoBo199501/article/details/86647711
开发问题记录:Manifest merger failed
https://msd.misuland.com/pd/2884250137616451450
原因如下:
经查是因为androidX和support库不能共存。(ButtrKnife10.1.0版本应该是引入了androidX,而我项目里面还是用的support库)
解决方法:
1.第一种方法:
把ButterKnife降版本到(因为其他框架可能还没兼容androidX,所以先降版本了)
implementation ‘com.jakewharton:butterknife:9.0.0-rc3’
annotationProcessor ‘com.jakewharton:butterknife-compiler:9.0.0-rc3’
2.第二种方法:
-
第一步:在gradle.properties添加:
android.useAndroidX=true
android.enableJetifier=true -
第二步
3.运行代码,发现点击事件没反应
经百度,发现别人引用Butterknife用的都是“kapt” 而不是“annotationProcessor”,修改为“kapt”运行成功,
原因是Kotlin中 Kotlin 注解处理工具(Kotlin Annotation processing tool,kapt)替代了 annotationProcessor
修改如下截图: