Android升级butterknife,Android组件化开发中使用Butterknife的坑
近來整理代碼的時候,要對代碼做一些模塊化組件化的處理。想要在一個BaseLib里面引入ButterKnife,在這個BaseLib里面聲明一個BaseActivty,然后其他module的Activity里面繼承這個BaseActivity,直接可以使用BindView,沒想到直接報NPE了。
第一反應就是把問題google了一下,搜索結果大多指向了ButterKnife的issue了。然后發現也有不少人又碰到相似的問題(看著相似其實又略有不同),按照上面的方法嘗試了幾個發現都沒有解決這個問題。最終看到有一篇類似的博客,幫忙解決了這個問題。原文鏈接,在此感謝原文作者。
因為按照原文的處理方法還是碰到了一個小問題,我把這個問題解決了,重新整理了一篇文章。雖然不知道是不是最好的解決方案,那現在就先這樣處理吧。
首先,需要在工程的module聲明:
image.png
repositories {
google()
jcenter()
maven { url "http://objectbox.net/beta-repo/" }
mavenCentral()
maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.0.0'
//ObjectBox
classpath "io.objectbox:objectbox-gradle-plugin:$objectboxVersion"
classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-SNAPSHOT'
}
然后再baseLib中添加:
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
dependencies {
compile rootProject.ext.libButterKnife
}
然后在每一個Module中添加如下引用
apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.butterknife'
dependencies {
annotationProcessor rootProject.ext.libButterKnifeCompile
}
這樣就可以解決NPE的問題了。
注意, rootProject.ext.libButterKnife, rootProject.ext.libButterKnifeCompile我使用了全局的聲明,如下:
libButterKnife = "com.jakewharton:butterknife:8.8.1"
libButterKnifeCompile = "com.jakewharton:butterknife-compiler:8.8.1"
版本自己更新到需要的版本。
另外,Java代碼中,使用R2代替R,這樣就可以實現ButterKnife在組件化開發過程中出現的空指針問題。
如果有其他更好的解決辦法,也請留下您的方法,感謝。
總結
以上是生活随笔為你收集整理的Android升级butterknife,Android组件化开发中使用Butterknife的坑的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux组的管理命令,linux 用户
- 下一篇: div上下展开收缩 html,js实现d