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

2018-06-26  本文已影响0人  招哥_aa30

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

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一下

写的不好请指正!

上一篇下一篇

猜你喜欢

热点阅读