1. 程式人生 > >AndroidStudio中多個Module依賴同一個jar的解決方案

AndroidStudio中多個Module依賴同一個jar的解決方案

最近在做一個專案時,遇到一個問題:同一個Android工程中,多個Module依賴同一個Jar包,導致包衝突,解決如下:

解決步驟:

  • 將任意一個Module中的jar依賴更改為compile files('your jar name')
  • 其他需要依賴的地方改為provided files('your jar name')
  • 刪除所有gradle中的compile fileTree(include: ['*.jar'], dir: 'libs)

具體案例解決說明:

案例:

一個AndroidStudio工程中,存在app module以及環信Module,且兩者都依賴定位sdk,現出現依賴問題。

解決步驟:
  • 在app module的gradle中以compile方式引入:compile files('libs/AMap_Location_V2.4.1_20160414.jar')
  • 在環信 Module的gradle中以provided方式引入:provided files('libs/AMap_Location_V2.4.1_20160414.jar')
  • 在app module及環信module的gradle中去掉:compile fileTree(include: ['*.jar'], dir: 'libs')

原理講解:

多個Module依賴同一個jar時,直接把jar加入到對應需要的Module會導致編譯報類衝突。

AndroidStudio中的依賴的幾種方式:
  • compile
    compile是對所有的build type以及favlors都會參與編譯並且打包到最終的apk檔案中。
  • provided
    provided是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。
  • APK
    只會打包到apk檔案中,而不參與編譯,所以不能再程式碼中直接呼叫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。

注意事項:

在module改完後要clean project,一定要清除快取,本人就因為這個步驟沒做而一直報同個錯.
arr格式(適用於AndroidStudio)的包,不會出現上述問題