室內定位APP--使用Library--Android Studio 之導入Module / Library

簡書:https://www.jianshu.com/p/a0e90bed6a47

轉載:Android添加library/moudle踩坑總結
https://www.2cto.com/kf/201712/708739.html
Android添加library/moudle踩坑總結,最近需要將我之前開發的一個功能模塊以library的形式集成到公司的項目中,由於本人小菜鳥一個,之前項目也從未涉及過library相關。蒐集了一些資料後感覺挺簡單就開始了我的集成之路,沒想到是山路十八彎,經歷了九九八十一坑之後,糾結了三天的心情豁然開朗,最最重要的是我這老男人也戀愛了!哈哈哈!滿懷着春光得意之情,待我將降魔伏妖的故事娓娓道來!

第一回合 新建或者引入library

我們有兩種方式新建或者引入,具體操作流程網上一大堆。(上述便是)

注意:1、新的library的buid.gradle 文件第一行確保是apply plugin: ‘com.android.library’,而非apply plugin: ‘com.android.application’,如圖:
在這裏插入圖片描述

2、注意若是引入的library,需要將引入前library(還是個工程)下的build.gradle中的相關配置複製到新工程下的build.gradle中,如在我的項目中新的library有mpAndroidchart 依賴庫,引入前需要在工程下的build.gradle中做如下配置,
在這裏插入圖片描述
當我引入爲library後,只包含app下的build.gradle,這樣就需要在新工程下的build.gradle中做相同的配置。

第二回合 sdk匹配

新的library中的各種sdk版本需要和主工程的一致,打開library的build.gradle文件參考主工程中build.gradle文件進行一一對應,各種sdk版本如圖所示:
在這裏插入圖片描述

第三回合 各種第三方依賴版本的“匹配”問題

確切的來說,應該是第三方依賴版本的“限制”,而非“匹配”。爲什麼這樣說呢?因爲對於library可以說是一個獨立的模塊,即便是主工程和library分別引用了某個第三方庫,比如同時引用了圖片加載框架 Glide3.7 和Glide4.0,按道理是可以編譯運行的,只要你的compile sdk version 的版本支持即可。可偏偏這種問題會被我們忽略掉,因爲我們的主工程很有可能是以前開發的由於歷史原因沒有來得及匹配最新的sdk版本,而我們新建或最新添加的library默認是高版本的 “各種sdk版本”,通常在第二回合匹配的過程中需要手動降低版本,這就有可能出現編譯不通過。
拿我來說剛進公司,項目經理要求我寫個功能模塊,我已迅雷不及掩耳之勢寫完後,又給了哥公司以前的項目,要我將該模塊以library的形式添加到項目中,起初我提過有無版本要求,被告訴無所謂啊!無所謂啊無所謂! 望着滿屏的錯誤,我很崩潰,關鍵是還未意識到是低版本限制了我library第三方庫。開始我是直接導入,後來我新建,然後是一點點的複製,還是報錯,我絕望之下,將build.gradle中的代碼複製一句編譯一下,終於排查出來 原來是 compile ‘pub.devrel:easypermissions:1.0.1’ 要求的是高版本的SDK,當我降低版本之後,裏面的一些資源文件找不到了或者是所依賴的appCompact庫版本太低,類似的還有compile ‘com.jwenfeng.pulltorefresh:library:1.2.7’,還有compile ‘com.android.support:appcompat-v7:26.+’等等。
錯誤代碼如:error: Error retrieving parent for item: No resource found that matches the given name ‘Theme.AppCompat.Light’.

第四回合 greenDao的問題

我剛集成那會報了個錯 ,錯誤的地方在之前已有library中greenDAO的實體類中,如下:
Constructor (see ExampleEntity:21) has been changed after generation.
Please either mark it with @Keep annotation instead of @Generated to keep it untouched,
or use @Generated (without hash) to allow to replace it.
對於這個錯誤有兩種解決方案:一是找到報錯的bean類,將greendao自動生成的get set 以及構造方法刪掉重新make project生成。二是上面的提示將構造方法的註解@Generated 替換爲@keep即可; 我採用的是第一種方法。
注意:這個錯誤可能會持續好幾個回合,耐心一點就好。

第五回合 butterknife的問題
集成前:看看自己用的butterknife,看看公司項目中的findviewbyid ,我感覺自己很牛B!集成後:看着自己library中所有butterknife找不到ID我很憂傷!當我發現ID明明存在,我的butterknife就是不識別 瞬間感覺自己很SB。

第六回合 總結
其實在我的集成路上,當初只顧降妖除魔,還有好多的問題沒有記錄下來,也有點想不起來了,包括一些錯誤代碼也沒有記錄。以上只是我現在能回想起來印象比較深刻的幾個大坑。 所以以後遇到問題要及時記錄問題所在,錯誤代碼及解決方案!希望我這還是菜鳥的老男人能在程序猿的道路上修成正果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章