Android Studio 3.2 使用butterknife 8.8.1 等版本的诸多问题解决方案记录

经大神同事介绍,了解到一款使用依赖注入方式实例化安卓空间的第三方library,然而初次使用遇到诸多问题,通过搜索引擎和同事的指导下,记录一下问题的解决方案。

首先,开发环境:

1.Windows 7 64位操作系统

2.Android Studio 3.2,SDK版本Level 28

3.安卓终端测试时有两个,分别是 android 6.0 和 android 5.1.1的终端操作系统

先把配置文件的资源地址放上来(已测试编译通过):资源链接

首先我是找到的网上入门指导教程中,教程中使用的版本是 butterknife 8.8.1.于是,照猫画虎配置一番

a.在Project级别的build.gradle文件中配置butterknife插件,如下所示

buildscript {
    
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.2.0'
        //下面一行添加插件
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

b.在app级别的build.gradle配置文件添加插件引用,如下

apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife' //添加这一行

c.添加library依赖,如下所示

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'
    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'

    //添加下面两行,引用依赖
    implementation 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

}

到这里,理论上就应该结束了,然而,我的安卓工程遇到报错,如下:

Unable to find method 'com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;'.
Possible causes for this unexpected error include:<ul><li>Gradle's dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)</li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)</li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.

解决方案:

一·使用版本9.0.0-SNAPSHOT

将butterknife版本更换为9.0.0-SNAPSHOT,修改代码如下

// 1. project级别的build.gradle,首先修改插件版本
//classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'  
  classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-SNAPSHOT' 

// 2. app级别的build.gradle修改引用依赖的版本
//implementation 'com.jakewharton:butterknife:8.8.1'
//annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
  implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'
  annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'

//3.project级别的build.gradle配置文件新增maven仓库的snapshots地址

repositories {
   ...
   maven {url "https://oss.sonatype.org/content/repositories/snapshots/"}
}

repositories {
    ....
    maven {url "https://oss.sonatype.org/content/repositories/snapshots/"}
 }

//4.还有最后一步

走完前三步之后,编译之后还会报错,报错信息如下所示

Error: Static interface methods are only supported starting with Android N (--min-api 24): void butterknife.Unbinder.lambda$static$0()

所以最后一步需要配置jdk环境,在app级别的build.gradle配置文件中新增配置项,如下:

android {
   ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

ok,butterknife:9.0.0-SNAPSHOT版本的环境搭建到此成功,编译运行成功。

ps:参考链接:https://github.com/JakeWharton/butterknife/issues/1125

方案二·使用 butterknife:9.0.0-rc2,这是最简单的引用方式

提醒一下,使用这个版本,就不需要其他的配置了,说明如下

//在使用butterknife:9.0.0-rc2的环境中,如果有以下的配置,全部删除
project级别的build.gradle文件
//maven {url "https://oss.sonatype.org/content/repositories/snapshots/"}  //删除
//classpath 'com.jakewharton:butterknife-gradle-plugin:8.8.1'             //删除
//classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-SNAPSHOT'    //删除

app级别的build.gradle文件
//apply plugin: 'com.jakewharton.butterknife'                             //删除

app级别中的依赖版本修改为9.0.0-rc2
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'
    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'

//    implementation 'com.jakewharton:butterknife:8.8.1'
//    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
//    implementation 'com.jakewharton:butterknife:9.0.0-SNAPSHOT'
//    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-SNAPSHOT'
    implementation 'com.jakewharton:butterknife:9.0.0-rc2'
    annotationProcessor 'com.jakewharton:butterknife-compiler:9.0.0-rc2'
}


方案三·如果有强迫症晚期患者,就是非要用8.8.1版本的怎么办呢?笔者瞎猫碰见死耗子还真找到了办法,如下

apply plugin: 'com.android.application'
//apply plugin: 'com.jakewharton.butterknife'  //app级别的build.gradle中把这行注释掉

就是在方案一的基础上,注释掉那一行代码就行了,至于为什么?奈何小弟才疏学浅,真的不知道,如有大神屈尊读到本博客,还希望能够给小弟解惑。还有,只是8.8.1版本测试过,其他版本不敢保证这个方法能行的通哦。

本博客参考链接:

1.https://stackoverflow.com/questions/46955653/butterknife-gradle-error-on-android-studio-3-0-due-to-android-apt-plugin

2.https://github.com/JakeWharton/butterknife/issues/1125

3.https://stackoverflow.com/questions/52294319/why-is-butterknife-9-0-0-snapshot-not-resolving/52308912#52308912

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android StudioButterKnife是一个用于简化Android开发中视图绑定的开源库。它可以帮助开发者通过注解方式快速地绑定视图资源,减少findViewById的使用,提高开发效率。 使用ButterKnife,首先需要在项目的build.gradle文件中添加依赖: ```groovy dependencies { implementation 'com.jakewharton:butterknife:10.2.1' annotationProcessor 'com.jakewharton:butterknife-compiler:10.2.1' } ``` 然后,在需要使用ButterKnife的Activity或Fragment中,使用`@BindView`注解来绑定视图资源。 例如,在Activity中绑定一个TextView: ```java public class MainActivity extends AppCompatActivity { @BindView(R.id.textView) TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); // 视图绑定 // 使用textView textView.setText("Hello ButterKnife!"); } } ``` 在Fragment中使用类似的方式绑定视图资源。 需要注意的是,使用ButterKnife进行视图绑定时,必须在`setContentView()`之后调用`ButterKnife.bind(this)`来完成绑定。 除了`@BindView`注解外,ButterKnife还提供了其他注解,如`@OnClick`用于点击事件的绑定、`@Nullable`用于可为空的注解等。 值得一提的是,自从Android Studio 3.6版本起,Google推出了ViewBinding功能,它提供了类似ButterKnife的视图绑定功能,并且是官方支持的。如果使用最新版本Android Studio,建议使用ViewBinding来代替ButterKnife

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值