最近搞了一个包含几点解耦思路的Android示例工程 , 使用ButterKnife的时候碰到一些问题 , 在这里记录下来 , 也包括以后会碰到的问题.
1. 问题 : 在Library中使用Butterknife时, bindview注解参数会报Attribute value must be constant.
----原因是library中的R.id.xx 这个id值不是一个常量(static final 修饰的)
我的解决方案 : 引入8.4.0版本的Butterknife :
在主工程的build.gradle 添加两个classpath
dependencies{
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
}
在目标library的build.gradle添加两个plugin, 以及对butterknife的依赖
apply plugin: 'com.jakewharton.butterknife'
apply plugin: 'com.neenbedankt.android-apt'
apt 'com.jakewharton:butterknife-compiler:8.4.0'
compile 'com.jakewharton:butterknife:8.4.0'
最后使用Butterknife gradle插件生成的R2类来绑定View
@BindView(R2.id.id_demoText)
TextView mTextView;
2. 问题 : 引用 library中的Butterknife 绑定无效
----猜测是apt插件必须要在使用butterknife的module中声明 , 被依赖library的module只需要声明compile.
我的解决方案 : 在使用Butterknife的module中引入
apply plugin: 'com.neenbedankt.android-apt'
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
apt 'com.jakewharton:butterknife-compiler:8.4.0'
compile project(path: ':common')
}
在common模块中只用compile库就OK
dependencies {
compile 'com.jakewharton:butterknife:8.4.0'
}
原理的话对gradle研究的不多 , 以后再补上.
另外附上示例项目的git地址 https://github.com/baoyin152/by_mvp-bus_app.git