Butter Knife github地址:https://github.com/JakeWharton/butterknife/

官方配置方法(有几个坑):

第一步:在app gradle中添加:

android {  ...  // Butterknife requires Java 8.  compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8    targetCompatibility JavaVersion.VERSION_1_8  }}dependencies {    implementation 'com.jakewharton:butterknife:10.1.0'    annotationProcessor 'com.jakewharton:butterknife-compiler:10.1.0'}

第二步:在project gradle中添加:

dependencies {    classpath 'com.jakewharton:butterknife-gradle-plugin:10.1.0'  }

第三步:在app gradle顶部中添加:

apply plugin: 'com.android.library'apply plugin: 'com.jakewharton.butterknife'

sync,然后报错

Android Gradle plugin 3.2.1 must not be applied to project 'E:\Android_studio_workspace2\gongxiangdanche\app' since version 3.2.1 was already applied to this projectOpen File
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id 'com.android.library']

我通过注释掉app gradle里的apply plugin: 'com.android.library’解决了

继续sync,报错

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). Suggestion: add 'tools:replace="android:appComponentFactory"' to  element at AndroidManifest.xml:5:5-47:19 to override.

里面有建议怎么做,试了一下,嗯,不行。

问题的原因是Android Studio3(我的是3.2)配置butterknife对版本有要求,需要9.0.0-rc2以上(我试过8.8.0、8.4.0的都报错),但butterknife10.0.0以上只支持Androidx,如果没有使用androidx配置butterknife10.0.0以上会报这个异常,这里的配置没有使用androidx,是android,所以把butterknife版本换为9.0.0-r2。
参考:https://blog.csdn.net/Night_X/article/details/86653715

再次sync

终于可以用了!
如果出现错误:Error: Static interface methods are only supported starting with Android N (–min-api 24): void butterknife.Unbinder.lambda$static$0()
在app gradle脚本中的android或defaultConfig中添加以下内容,或可解除错误:

// Butterknife requires Java 8.  compileOptions {    sourceCompatibility JavaVersion.VERSION_1_8    targetCompatibility JavaVersion.VERSION_1_8  }

最终gradle文件:

app gradle:

apply plugin: 'com.android.application'//apply plugin: 'com.android.library'apply plugin: 'com.jakewharton.butterknife'android {    compileSdkVersion 28    defaultConfig {        applicationId ""        minSdkVersion 15        targetSdkVersion 28        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }    // Butterknife requires Java 8.//    compileOptions {//        sourceCompatibility JavaVersion.VERSION_1_8//        targetCompatibility JavaVersion.VERSION_1_8//    }}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support:appcompat-v7:28.0.0'    implementation 'com.android.support.constraint:constraint-layout:1.1.3'    implementation 'com.android.support:design:28.0.0'    implementation 'com.android.support:support-v4:28.0.0'    //ProgressBar动画    implementation 'com.lsjwzh:materialloadingprogressbar:0.5.8-RELEASE'    //圆形图像    implementation 'de.hdodenhof:circleimageview:3.0.0'    //Butter Knife注解    implementation 'com.jakewharton:butterknife:9.0.0-rc2'    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc2'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:1.0.2'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'}

project gradle:

buildscript {        repositories {        google()        jcenter()    }    dependencies {        classpath 'com.android.tools.build:gradle:3.2.1'        //Butter Knife注解        classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2'        // NOTE: Do not place your application dependencies here; they belong        // in the individual module build.gradle files    }}allprojects {    repositories {        google()        jcenter()    }}task clean(type: Delete) {    delete rootProject.buildDir}

是可以用了,但是generate自动生成代码里面没有自动生成ButterKnife的选择啊。
解决方法:file->Settings->Plugins->Browse Repositories->搜索ButterKnife->选择Android ButterKnife Zelezny->install->restart android studio。


重启后点击资源id R.layout.activity_main里的activity_main,然后alt+Insert弹出


confirm就完成辣。再也不用一个一个findViewById了。

更多相关文章

  1. Android(安卓)Jetpack Compose 之 Text
  2. application全局变量
  3. 【Android】向sdcard中写入文件
  4. Android(安卓)4.0 HttpURLConnection 下载失败问题
  5. Android(安卓)Studio配置Android(安卓)annotation(注解)
  6. android添加各种权限整理
  7. android ScrollView--Linearlayout可以上下拖动
  8. Android(安卓)Fragment页打开相册
  9. 启动 flutter项目时报Could not find com.android.tools.build:g

随机推荐

  1. Android动画效果-更新中
  2. Android应用开发之RelativeLayout (相对
  3. android 程序启动界面的短暂黑屏解决办法
  4. [Android]发布Sqlite数据库
  5. Android(安卓)onDraw
  6. Android的数据过滤机制
  7. Android(安卓)AIDL 双向调用的使用及相关
  8. android 动画
  9. 【Android】GridView添加网格线
  10. Android动态效果Animation