Android报错:Program type already present: android.support.v4(配置ButterKnife)

今天,在完成安卓组件化框架搭建的时候,真是被ButterKnife折磨了一番,各种错误。

1.使用ButterKnife8.4.0版本,运行正常,但是在moudle中代码的R2.id.**根本找不到,看着报错,就很不爽,然后就是各种版本号试来试去。

发现一个有意思的东西:

快速生成R2.java中fields的插件:

在主工程的 build.gradle 中添加插件

apply plugin: 'me.wangyuwei.r2assistant'
buildscript {
    repositories {
        maven {
            url 'https://dl.bintray.com/wangyuwei/maven'
        }
    }
    dependencies {
        classpath 'me.wangyuwei:r2assistant-plugin:1.0.0'
    }
}

如果你想对所有的子 module 生效,执行

 gradlew sweepR2

如果你只想对指定的子 module 生效,执行 

gradlew sweepR2 -PmoduleName=${subModuleName}

但是这个不能解决我的问题。

因为子项目中的配置apply plugin: 'com.jakewharton.butterknife'也都添加好了,就是不行。

最后发现原来是ButterKnife这个版本自带的bug,需要进行升级。

2.报错Execution failed for task ':app:transformClassesWithDexForDebug'.

在app的gradler配置文件中,添加 multiDexEnabled true 开启分包,然后添加

    dexOptions {
        javaMaxHeapSize "4g"
    }

3.警告:variantOutput.getPackageApplication()

解决:

classpath 'com.android.tools.build:gradle:3.3.0’

退回

classpath 'com.android.tools.build:gradle:3.2.1’

3.使用ButterKnife的9.0.0-rc2版本,瞬间就可以有R2.id.**就可以找到了,开心三秒,运行报错了。

问题:Program type already present: android.support.v4

说的是配置的support-v4跟butterknife中support-v4版本不一致。

项目配置的版本号是27.1.1,和butterknife所需要的版本不一致,最后降到了8.5.1,解决了问题。

 

你可能感兴趣的:(Android之开发问题)