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

最近在幫師兄做一個項目時,遇到一個問題:同一個Android工程中,多個Module依賴同一個Jar包,導致包沖突,解決如下:

解決步驟
  1. 將任意一個Module中的jar依賴更改為compile files('your jar name'),其他需要依賴的地方改為provided files('your jar name')
  2. 刪除所有gradle中的compile fileTree(include: ['*.jar'], dir: 'libs)
具體案例解決說明
  • 案例:一個AndroidStudio工程中,存在app module以及環信Module,且兩者都依賴定位sdk,現出現依賴問題。
  • 解決步驟:
  1. 在app module的gradle中以compile方式引入:
compile files('libs/AMap_Location_V2.4.1_20160414.jar')
  1. 在環信 Module的gradle中以provided方式引入:provided files('libs/AMap_Location_V2.4.1_20160414.jar')
  2. 在app module及環信module的gradle中去掉
compile fileTree(include: ['*.jar'], dir: 'libs')
原理講解
  • 多個Module依賴同一個jar時,直接把jar加入到對應需要的Module會導致編譯報類沖突。
  • AndroidStudio中的依賴的幾種方式:
  1. compile
    compile是對所有的build type以及favlors都會參與編譯并且打包到最終的apk文件中。
  2. Provided
    Provided是對所有的build type以及favlors只在編譯時使用,類似eclipse中的external-libs,只參與編譯,不打包到最終apk。
  3. APK
    只會打包到apk文件中,而不參與編譯,所以不能再代碼中直接調用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。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容