组件化开发中使用ButterKnife的使用

组件化开发中使用ButterKnife的使用,第1张

概述在组件开发中Butterknife的使用存在许多的问题,最开始的时候我以为直接引入Butterknife直接引入到项目中就可以了呢!但是后来发现不行,会有各种各样的错误,所以用这篇文章记录一下,防止其他人采坑!!!先来说一下项目,我们是在公共modules中引入了一些基础组件的!所以我的主要的一些引

在组件化开发中Butterknife的使用存在许多的问题,最开始的时候我以为直接引入Butterknife直接引入到项目中就可以了呢!但是后来发现不行,会有各种各样的错误,所以用这篇文章记录一下,防止其他人采坑!!!

先来说一下项目,我们是在公共modules中引入了一些基础组件的!所以我的主要的一些引用都放在那个基础模块中去了!其实这个基础组件也就相当于一个类库而已了!

先说一下你可能遇到的问题:编译不通过报错;butterknife报空指针问题;项目中一些类库不起作用;在其它Module中使用ButterknfIE怎么使用(主要是解决R资源的问题)

这些都是我在集成的时候遇到的问题,我们一个一个解决上面的问题;

1. 编译不通过怎么解决:

只要是配置正确的话(亲测可用),不会出现编译不通过的问题,但是这里要注意的就是各个配置的位置!!!

1.1 关于配置首先你要在 项目 的build.gradle中添加如下内容:

classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'复制代码

请注意这里使用的不是最新的版本(当前最新版本是8.8.1),这里使用的是8.4.0这个版本,别问我为什么!我是真的不知道,如果换成最新的话,各种报错!请原谅我的无知,就酱紫。。。

 

整体代码如下:

buildscript {

 

    repositorIEs {

        Google()

        jcenter()

    }

    dependencIEs {

        classpath "com.androID.tools.build:gradle:$localGradlePluginVersion"

        //为了解决Butterknife组件化开发中的问题,但是这里只能是8.4.0、8.5.0、8.5.1

        classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'

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

}

}复制代码

在主项目里,也就是(app的build.gradle中添加如下内容)

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'复制代码

这里为什么只添加了一个,没有添加另一个呢?因为我项目中把基础类库分到了相应的module中,所以这里这么写呢?因为**'com.jakewharton:butterknife:8.8.1'这个东西要写在相应的library module**中,否则会报相应的空指针。所以才把这两个内容分开的!

 

整体代码如下:

apply plugin: 'com.androID.application'

 

androID {

    compileSdkVersion rootProject.ext.compileSdkVersion

    defaultConfig {

        applicationID "com.jinlong.used"

        minSdkVersion rootProject.ext.minSdkVersion

        targetSdkVersion rootProject.ext.targetSdkVersion

        versionCode rootProject.ext.versionCode

        versionname rootProject.ext.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 project(':modules:common')

    //引入butterknife

    //这个东西一定要放在这个里面,否则会报错的(空指针)!

    annotationProcessor "com.jakewharton:butterknife-compiler:$butterknifeVersion"

}复制代码

别管我写的乱七八糟的,那个是便于版本管理的!

最后在library module的类库只添加相应butterknife的引用

API 'com.jakewharton:butterknife:8.8.1'复制代码

细心的朋友可能会问?这个API是个什么鬼?这里为什么用API呢?其实是这样的,在AndroID studio 3.1.2之后的版本中(据说是因为编译更快):

compile 要用 implementation 或 API 替换testCompile 要用 testImplementation 或 testAPI 替换androIDTestCompile 要用 androIDTestImplementation 或 androIDTestAPI 替换 有什么区别呢?是这样的,前面是implementation引用的只能在Module中使用,在其他引用这个类库的module中是使用不了的!而API这个呢,就可以在引用这个类库的module中去使用!因为我这个是在基础类库中使用的,所以只能使用API类型的!就这么简单。

 

整体代码如下:

apply plugin: 'com.androID.library'

 

androID {

    compileSdkVersion rootProject.ext.compileSdkVersion

 

    defaultConfig {

        minSdkVersion rootProject.ext.minSdkVersion

        targetSdkVersion rootProject.ext.targetSdkVersion

        versionCode rootProject.ext.versionCode

        versionname rootProject.ext.versionname

 

        testInstrumentationRunner "androID.support.test.runner.AndroIDJUnitRunner"

    }

 

    buildTypes {

        release {

            MinifyEnabled false

            proguardfiles getDefaultProguardfile('proguard-androID.txt'), 'proguard-rules.pro'

        }

    }

 

}

 

dependencIEs {

    //这里踩了一个坑 implementation 只能是在模块内部使用而API则是其他模块可以使用

    //compile 要用 implementation 或 API 替换

    //testCompile 要用 testImplementation 或 testAPI 替换

    //androIDTestCompile 要用 androIDTestImplementation 或 androIDTestAPI 替换

 

    implementation filetree(dir: 'libs', include: ['*.jar'])

    API "com.androID.support:appcompat-v7:$rootProject.appcompatVersion"

    API "com.androID.support.constraint:constraint-layout:$rootProject.constraintLayoutVersion"

    testImplementation "junit:junit:$rootProject.junitVersion"

    androIDTestImplementation "com.androID.support.test:runner:$rootProject.runnerVersion"

    androIDTestImplementation "com.androID.support.test.espresso:espresso-core:$rootProject.espressoCoreversion"

 

    //引入butterknife

    API "com.jakewharton:butterknife:$butterknifeVersion"

}复制代码

组件化开发的时候,要在相应的组件中添加下面这句

apply plugin: 'com.jakewharton.butterknife'复制代码

这句添加在最上面(也就是你判断是组件还是module的地方),就可以了!

在组件中把所有R换成R2就可以了!

 

 

总结

以上是内存溢出为你收集整理的组件化开发中使用ButterKnife的使用全部内容,希望文章能够帮你解决组件化开发中使用ButterKnife的使用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104731.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存