當前位置:
首頁 > 知識 > 解決插件ButterKnife在Library中使用的問題

解決插件ButterKnife在Library中使用的問題

前言

ButterKnife是控制項注入框架,可以幫助安卓開發者省去初始化控制項的重複性工作,簡單快捷地初始化布局文件中的控制項,極大地提升開發效率。

1. 背景

在一般app中我們都是單組件開發,即只有一個主moduel,所有代碼不管是java,xml,資源,依賴庫都在app中,此時使用 ButterKnife 是非常簡單的,參考 GitHub 官方文檔 就可完成。

2. 問題

但是,當你想對項目進行組件化開發,需要在 Library 中使用 ButterKnife 時,如果還是參照 GitHub 官方文檔 上的方法,你會發現不管你怎麼調整代碼,編譯永遠不通過,最終無法使用,這是一個巨大的坑啊!!!

這是 Android studio 3.0 與 ButterKnife 8.5.1 (含 8.5.1)的衝突所致,官方論壇 上給予了一些解釋。

3. 解決方案

1、在 Project 的 build.gradle 中引入 ButterKnife,特別注意 引入 ButterKnife 的版本,不要使用8.5.1及以上版本,使用 8.4.0版本。

buildscript {
repositories {
jcenter()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:3.1.2"
classpath "com.jakewharton:butterknife-gradle-plugin:8.4.0"
}
}
1
2
3
4
5
6
7
8
9
10

解決插件ButterKnife在Library中使用的問題

註:

如果這裡引入 ButterKnife 8.5.1 以上的版本,如:

classpath "com.jakewharton:butterknife-gradle-plugin:8.8.1"
1

會出現編譯異常:

Unable to find method "com.android.build.gradle.api.BaseVariant.getOutputs()Ljava/util/List;".
Possible causes for this unexpected error include:<ul><li>Gradle"s dependency cache may be corrupt (this sometimes occurs after a network connection timeout.)
Re-download dependencies and sync project (requires network)</li><li>The state of a Gradle build process (daemon) may be corrupt. Stopping all Gradle daemons may solve this problem.
Stop Gradle build processes (requires restart)</li><li>Your project may be using a third-party plugin which is not compatible with the other plugins in the project or the version of Gradle requested by the project.</li></ul>In the case of corrupt Gradle processes, you can also try closing the IDE and then killing all Java processes.
1
2
3
4

2、在 Library 的 build.gradle 中 引入 butterknife

  • 在library的build.gradle中引入插件

apply plugin: "com.jakewharton.butterknife"
1

解決插件ButterKnife在Library中使用的問題

  • 在 dependencies 中添加依賴,

    此處可以使用最新版 butterknife

implementation "com.jakewharton:butterknife:8.8.1"
annotationProcessor "com.jakewharton:butterknife-compiler:8.8.1"
1
2

若想 library 中的 butterknife 被主 module 使用,可將 implementation 改為 api:

api "com.jakewharton:butterknife:8.8.1"
annotationProcessor "com.jakewharton:butterknife-compiler:8.8.1"
1
2

到此,接入工作完畢。

4. 使用和注意事項

1、在 主module 中使用時,和單組件開發形式一樣使用

解決插件ButterKnife在Library中使用的問題

2、在library 中使用

  • 要用 R2 代替 R findviewid

解決插件ButterKnife在Library中使用的問題

  • 在 click方法 中同樣使用 R2,但是找 id 的時候使用 R。

解決插件ButterKnife在Library中使用的問題

  • 不能使用 switch- case 找 id 的,用 if-else 代替

解決插件ButterKnife在Library中使用的問題

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

SQL的語法
jQuery Mobile 事件

TAG:程序員小新人學習 |