1. 程式人生 > >android元件化開發解決使用butterknife出現的坑

android元件化開發解決使用butterknife出現的坑

先來一句一句媽賣批哦,搗鼓這個花了我近一下午的時間微笑

現在元件化開發火熱,的確是如此,程式碼簡介,思路明確,不繁瑣。。。。。。。但是,用butterknife的時候卻出現了找不到包的問題,,懵逼的我,看著懵逼的程式碼。

看下官方說如何解決。:

然而對我來說並沒什麼卵用~~。

直接看我的解決步驟吧~~~。

直接貼程式碼了。

buildscript {
    apply from: "config.gradle"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.2'
        //butterknife外掛
        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
        // 8.4.0、8.5.0、8.5.1可用,其他自己測試。

        // 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
}

在專案的build.gradle中配置上邊的程式碼。

if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
apply plugin: 'com.jakewharton.butterknife'


android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    defaultConfig {

        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    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'
//    annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
    api 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'

    api rootProject.ext.dependencies.appcompat_v7
    api rootProject.ext.dependencies.design
    api rootProject.ext.dependencies.retrofit
    api rootProject.ext.dependencies.retrofit_converter_gson
    api rootProject.ext.dependencies.retrofit_adapter_rxjava2
    api rootProject.ext.dependencies.gson
    api rootProject.ext.dependencies.rxandroid
    api rootProject.ext.dependencies.rxjava
    api rootProject.ext.dependencies.glide
    api rootProject.ext.dependencies.constraint_layout
    api rootProject.ext.dependencies.eventbus
    api rootProject.ext.dependencies.okhttp3_logging
    api rootProject.ext.dependencies.SmartRefreshLayout
    api rootProject.ext.dependencies.banner
    api rootProject.ext.dependencies.arouter_api
//    api rootProject.ext.dependencies.android_butterknife

}

上邊這段是公共類的butterknife配置,程式碼中新增紅色的。(所有的module都繼承的類,即公共類。)

if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
apply plugin: 'com.jakewharton.butterknife'

android {
    compileSdkVersion rootProject.ext.android.compileSdkVersion
    defaultConfig {

        minSdkVersion rootProject.ext.android.minSdkVersion
        targetSdkVersion rootProject.ext.android.targetSdkVersion
        versionCode rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support.constraint:constraint-layout:1.1.2'
//    annotationProcessor rootProject.ext.dependencies.arouter_compiler
    implementation project(':common_module')
    annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'

}

上邊這段是子module新增的依賴。。

好了配置就到這裡完事了,,一共有三步   

1 在專案的build.gradle新增依賴。 注意版本

2 在你的公共Module的build.gradle中新增依賴和配置,版本可選擇最新,

3 在你的子module的build.gradle中新增依賴和配置,版本可選擇最新。

以上都是我的測試多次得出的配置結果和版本號。。。。。。。。

最後看看在程式碼中如何。。。

使用的話正常使用就可以了,只要把報錯的R.改成R2.就可以了,當然選擇R2的時候一定要選擇當前activity/fragment所在的module內,,,如果你選擇了Onclick記得繫結程式碼用R2,,下邊switch程式碼ALT+/一下變成if語句就可以了。。。。

有什麼問題或者我做的不對的請留言,++++++++++++emmmmmmmmmmmm。再見。