Android Studio 中多個module引用同一個jar(或者沖突解決)解決方案


文章轉(zhuǎn)自:http://blog.csdn.net/u013134391/article/details/51538511

在Android開發(fā)過程中我們多多少少會引入module,不僅會提高項目的開發(fā)進度,而且項目管理起來相當方便。

但是同一個項目中引入多個module引入同一個jar或有沖突的jar時候在編譯的時候會出現(xiàn)錯誤,這些錯誤往往讓人抓狂。


  • 在解決這些錯誤之前,讓我們先了解下關(guān)于module的幾種依賴方式的區(qū)別(直接看解決方案請?zhí)^)
  1. compile
    compile是對所有的build type以及favlors都會參與編譯并且打包到最終的apk文件中。
  2. Provided
    Provided是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。
  3. APK
    只會打包到apk文件中,而不參與編譯,所以不能再代碼中直接調(diào)用jar中的類或方法,否則在編譯時會報錯
  4. Test compile
    Test compile 僅僅是針對單元測試代碼的編譯編譯以及最終打包測試apk時有效,而對正常的debug或者release apk包不起作用。
  5. Debug compile
    Debug compile 僅僅針對debug模式的編譯和最終的debug apk打包
  6. Release compile
    Release compile 僅僅針對Release 模式的編譯和最終的Release apk打包。

  • 沖突解決方案
    我們需要用的是Provided,這樣在寫代碼的時候可以在所屬的Module中正常使用jar中的類,但是要有一個Module以compile的方式依賴這個jar,這樣編譯的時候只有一個jar編譯進apk。
    比如現(xiàn)在兩個module發(fā)生同時引用一個jar打包時候發(fā)生沖突。
  1. 第一個module不發(fā)生任何改變。
  2. 設(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

  • 來個栗子

  1. 我在項目中使用了Alipay(支付寶),引用了一個Alipay的module。(其中在libs下 有一alipay.jar)

  2. 還在項目中引用了友盟推送,在推送的module中引入的jar文件和alipay.jar文件發(fā)生沖突。

  3. 首先選擇一個引入方式設(shè)置成Provided,因為Alipay只引入了alipay.jar所以選擇,Alipay在Alilpay.build文件中刪除

    //刪除下面這行
    compile fileTree(include: ['*.jar'], dir: 'libs')
    
    //添加
    provided files('libs/Alipay.jar)
    
    
  4. 因為友盟推送jar是和Alipay的支付jar沖突,而不是引用同一個jar,所以解決方式是把友盟推送jar拆分成alipay.jar 和 去tuuid的友盟推送的jar。統(tǒng)一放入libs。

  5. 先在release apk 這樣就ok!!!!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容