美文网首页
多Module组件化开发使用ButterKnife的BUG处理

多Module组件化开发使用ButterKnife的BUG处理

作者: 招哥_aa30 | 来源:发表于2018-06-26 11:40 被阅读0次

    一.首先描述下使用场景和出现的问题:

    AS2.3.1  Gradle2.2.3   ButterKnite 7.0.1  升级了As到3.1.3 Gradle2.3.2 ButterKnite8.8.1

    因为新项目采用的是组件化开发,而且当中有一个Common的Module作为公共的BaseModule大部分公共库放在里面,当然butterKnite也放在里面。另外有个Module1的业务模块依赖了Common模块当中也使用了ButterKnite ,app的Module也依赖了Common模块当中也使用了ButterKnite  sync之后报了错。找不到id.

    下面我们先不管上面的问题先来认识一下apt和annotationProcessor

    1、android-apt

    android-apt是由一位开发者自己开发的apt框架,源代码托管在这里,随着Android Gradle 插件 2.2 版本的发布,Android Gradle 插件提供了名为 annotationProcessor 的功能来完全代替 android-apt ,自此android-apt 作者在官网发表声明最新的Android Gradle插件现在已经支持annotationProcessor,并警告和或阻止android-apt ,并推荐大家使用 Android 官方插件annotationProcessor。

    2、annotationProcessor

    annotationProcessor是APT工具中的一种,他是google开发的内置框架,不需要引入,可以直接在build.gradle文件中使用,如下

    dependencies{  

       xxx

       annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'

    }

    回到上面的问题,我们先来解决掉它。

    @1.在公共BaseModule:Common的library的build.gradle的

    dependencies {

        ...

        compile'com.jakewharton:butterknife:8.8.1'//最新版本

    }

    @2.在每个想使用butterknife的library的build.gradle头部加入apply

    applyplugin:'com.jakewharton.butterknife'

    //gradle2.2以前用apt

    //apply plugin: 'android-apt' //新添加

    dependencies {

        ...

        annotationProcessor'com.jakewharton:butterknife-compiler:8.8.1'//最新版本

      //gradle2.2以前用apt 如果2.2以后用apt会报警告编译会通过  

      //  apt'com.jakewharton:butterknife-compiler:8.8.1'

    }

    3.在项目build.gradle中

    buildscript {

      repositories {   

     mavenCentral()  

     }  

    dependencies {  

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

    //classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //gradle2.2以前用apt

      }

    }

    二、使用注意

    1)8.4.0之前的butterknife注解是不支持在library中使用的,library中定义的R文件中id都不是final的,8.4.0之后的butterknife版本加入了对library project支持,所以在library中使用时,和之前有所差异,自动生成的

    @BindView(R.id.xxx)EditTextusername;

    需要替换成

    @BindView(R2.id.xxx)EditTextusername;

    appModule还是用R.id.xxx.

    over到此结束!mark一下

    写的不好请指正!

    相关文章

      网友评论

          本文标题:多Module组件化开发使用ButterKnife的BUG处理

          本文链接:https://www.haomeiwen.com/subject/reepyftx.html