安裝開源項目 MultiType (基於 RecyclerView)出現的各類問題 -- 本身的第一篇博客

 

  1、引入開源項目的方式java

使用開源項目 MultiType 的兩種方式:android

一、maven引入:在主Module 的 build.gradle 中加入git

dependencies {
    ......
    compile 'me.drakeet.multitype:multitype:2.3.0'
}

二、建立爲 library 包:在 https://github.com/drakeet/MultiType/releases 將開源項目 MultiType 下載下來,將其中的 library 包複製拷貝到與主 Module 同個目錄下並重命名爲 multitype 以下:github

 

 

項目目錄:api

 

接着,修改 重命名爲 multitype 後的文件夾下的 build.gradle 爲app

apply plugin: 'com.android.library'

最後,在主Module 中引入該 libaray,以下:maven

dependencies {
......
    compile project(':multitype')
}

注意: maven 引入時若指定的 sdk最低版本 與開發的項目的 sdk最低版本 衝突則要在主Module (彷佛是在這裏,忘了)的中覆蓋引入項目的編譯版本。建立 library 包時則能夠直接在該 library 包的 build.gradle 文件中修改這個開源項目的 sdk編譯版本。不管哪一種方式都要注意 主Module的 sdk最低版本 不能低於 開源項目的 sdk最低版本,否則當手機的版本低於 開源項目的 最低版本則用不了這個開源項目。gradle

 例子:公司項目中的 minSdkVersion 8  而 開源項目的 minSdkVersion 9  ,只能修改 公司項目的 minSdkVersion 爲 9。ui

 

  2、兩種方式各自出現的問題以下:spa

一、sdk最低版本衝突:開源項目指定的 sdk最低版本 與開發的項目的 sdk最低版本 衝突。提示以下:

Error:Execution failed for task ':xxx:processXxxDebugManifest'.
> Manifest merger failed with multiple errors, see logs

 

二、依賴包重複:開源項目須要用 RecyclerView,爲兼容低版本的系統,引入了 v7包(目錄結構以下:)中的 recyclerview 的包。

 

開源項目中的 build.gradle 中的依賴以下:

dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-annotations:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
}

而 RecyclerView 的使用是依賴於 v4 包的。而公司項目中有將 v7 中的 v4的jar包(v4的jar包下含 annotation 和 v4)引入單獨成爲一個 library 包,這會於引入的 開源項目的依賴包()重複。

 

公司項目將 v7 自成一個 library 包以下:

 

錯誤提示:

Error:Execution failed for task ':taojinroad:transformClassesWithJarMergingForXxxDebug'.
> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: android/support/annotation/IntegerRes.class

 

  3、解決方法

maven 引入的解決方法

一、sdk最低版本衝突

要在主Module (彷佛是在這裏,忘了)的中覆蓋引入項目的 minSdkVersion 。前提是主 Module 的 minSdkVersion 不能低於 開源項目的 minSdkVersion,不然在 系統版本 過低的手機上沒法使用這一開源項目。

 

二、依賴包重複

將開源項目中的依賴包去掉,以下:

dependencies {
    ......
    compile ('me.drakeet.multitype:multitype:2.3.0'){
    exclude group: 'com.android.support', module: 'support-v4'
    exclude group: 'com.android.support', module: 'support-annotations'
  }
}

 

建立開源項目爲 library 包的解決方法

一、sdk最低版本衝突

能夠修改 主 Module 的 minSdkVersion 或 開源項目的 minSdkVersion 使它們一致。前提是主 Module 的 minSdkVersion 不能低於 開源項目的 minSdkVersion,不然在 系統版本 過低的手機上沒法使用這一開源項目。

 

二、依賴包重複

前提:library 包中含 build.gradle 文件且可在裏面修改相應的依賴。也就是說不能將 開源項目的 jar包 或 aar包 直接引入成爲一個 library(上面提到的 公司裏的建立的一個 v7 的 library 包就是這種狀況。以 jar包形式引入則沒法在 build.gradle 中看到引入的依賴,所以沒法修改這些依賴),而應該直接將源代碼引入成爲一個 library 包。以下:

不能用此方法的:

 

可用此方法的:

 將 build.gradle 中的

dependencies {
testCompile 'junit:junit:4.12'
compile 'com.android.support:support-annotations:24.2.1'
compile 'com.android.support:recyclerview-v7:24.2.1'
}

修改成
dependencies {    testCompile 'junit:junit:4.12'    //    compile 'com.android.support:support-annotations:24.2.1'    //    compile 'com.android.support:recyclerview-v7:24.2.1'    compile('com.android.support:recyclerview-v7:23.2.1') {//注意:這裏的RecyclerView 的版本與 v7的 library中的 v4包的版本同樣是 23.2.1//        exclude group: 'com.android.support'//這個是 exclude 掉全部 support 包        exclude group: 'com.android.support', module: 'support-v4'        exclude group: 'com.android.support', module: 'support-annotations'    }    compile project(':android-support-v7-appcompat')//這是 v7 的 library包 含 v4 和 annotation }
相關文章
相關標籤/搜索