文章轉(zhuǎn)自:http://blog.csdn.net/u013134391/article/details/51538511
在Android開發(fā)過程中我們多多少少會引入module,不僅會提高項目的開發(fā)進度,而且項目管理起來相當方便。
但是同一個項目中引入多個module引入同一個jar或有沖突的jar時候在編譯的時候會出現(xiàn)錯誤,這些錯誤往往讓人抓狂。
- 在解決這些錯誤之前,讓我們先了解下關(guān)于module的幾種依賴方式的區(qū)別(直接看解決方案請?zhí)^)
- compile
compile是對所有的build type以及favlors都會參與編譯并且打包到最終的apk文件中。 - Provided
Provided是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。 - APK
只會打包到apk文件中,而不參與編譯,所以不能再代碼中直接調(diào)用jar中的類或方法,否則在編譯時會報錯 - Test compile
Test compile 僅僅是針對單元測試代碼的編譯編譯以及最終打包測試apk時有效,而對正常的debug或者release apk包不起作用。 - Debug compile
Debug compile 僅僅針對debug模式的編譯和最終的debug apk打包 - Release compile
Release compile 僅僅針對Release 模式的編譯和最終的Release apk打包。
- 沖突解決方案
我們需要用的是Provided,這樣在寫代碼的時候可以在所屬的Module中正常使用jar中的類,但是要有一個Module以compile的方式依賴這個jar,這樣編譯的時候只有一個jar編譯進apk。
比如現(xiàn)在兩個module發(fā)生同時引用一個jar打包時候發(fā)生沖突。
- 第一個module不發(fā)生任何改變。
- 設(shè)置另一個module引入jar的方式為Provided,這樣改module引入的jar在編譯時候可以使用,即代碼不會報錯,生成的apk不會包含該jar。在apk運行時候第一個module的jar會共享該module使用,也就是說compile依賴方式是對共所有的調(diào)用,雖然在編譯時候不能被調(diào)用。(除了引用module的項目外)
- 注:使用Provided必須刪除compile fileTree(include: ['*.jar'], dir: 'libs') 不然lib下的jar均按照compile方式引入到Module
-
來個栗子
我在項目中使用了Alipay(支付寶),引用了一個Alipay的module。(其中在libs下 有一alipay.jar)
還在項目中引用了友盟推送,在推送的module中引入的jar文件和alipay.jar文件發(fā)生沖突。
-
首先選擇一個引入方式設(shè)置成Provided,因為Alipay只引入了alipay.jar所以選擇,Alipay在Alilpay.build文件中刪除
//刪除下面這行 compile fileTree(include: ['*.jar'], dir: 'libs') //添加 provided files('libs/Alipay.jar) 因為友盟推送jar是和Alipay的支付jar沖突,而不是引用同一個jar,所以解決方式是把友盟推送jar拆分成alipay.jar 和 去tuuid的友盟推送的jar。統(tǒng)一放入libs。
先在release apk 這樣就ok!!!!