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


 

  一、引入開源項目的方式

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

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

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

2、創建為 library 包:在 https://github.com/drakeet/MultiType/releases 將開源項目 MultiType 下載下來,將其中的 library 包復制拷貝到與主 Module 同個目錄下並重命名為 multitype 如下:

 

 

項目目錄:

 

接着,修改 重命名為 multitype 后的文件夾下的 build.gradle 為

apply plugin: 'com.android.library'

最后,在主Module 中引入該 libaray,如下:

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

注意: maven 引入時若指定的 sdk最低版本 與開發的項目的 sdk最低版本 沖突則要在主Module (似乎是在這里,忘了)的中覆蓋引入項目的編譯版本。創建 library 包時則可以直接在該 library 包的 build.gradle 文件中修改這個開源項目的 sdk編譯版本。無論哪種方式都要注意 主Module的 sdk最低版本 不能低於 開源項目的 sdk最低版本,不然當手機的版本低於 開源項目的 最低版本則用不了這個開源項目。

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

 

  二、兩種方式各自出現的問題如下:

1、sdk最低版本沖突:開源項目指定的 sdk最低版本 與開發的項目的 sdk最低版本 沖突。提示如下:

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

 

2、依賴包重復:開源項目需要用 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

 

  三、解決方法

maven 引入的解決方法

1、sdk最低版本沖突

要在主Module (似乎是在這里,忘了)的中覆蓋引入項目的 minSdkVersion 。前提是主 Module 的 minSdkVersion 不能低於 開源項目的 minSdkVersion,否則在 系統版本 太低的手機上無法使用這一開源項目。

 

2、依賴包重復

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

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 包的解決方法

1、sdk最低版本沖突

可以修改 主 Module 的 minSdkVersion 或 開源項目的 minSdkVersion 使它們一致。前提是主 Module 的 minSdkVersion 不能低於 開源項目的 minSdkVersion,否則在 系統版本 太低的手機上無法使用這一開源項目。

 

2、依賴包重復

前提: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
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM