接入sdk庫的幾點心得體會

由于項目的特殊性挖藏,最近一直在往app工程里接入(更新)第三方sdk,并且app的一些基礎(chǔ)控件也被其他項目組封裝成了sdk來導(dǎo)入。在不停的sdk更新迭代過程中碰到了一些問題碎赢,記錄一下為后續(xù)排查問題依據(jù)荚虚。

  • sdk本身內(nèi)部可以依賴其他sdk庫(假設(shè)為庫A)薛夜,此時庫A不需要app顯示導(dǎo)入,它在導(dǎo)入sdk時會自動導(dǎo)入進來(sdk發(fā)布時的aar文件有一個配對的pom.xml文件版述,他可以用來描述依賴)却邓,但可以通過exclude關(guān)鍵字取消對庫A的自動導(dǎo)入。

  • 如果sdk本身依賴另一個庫A院水,且app本身也對A庫有導(dǎo)入依賴腊徙,這時就存在有兩個地方對同一個庫A的導(dǎo)入了。如果兩處的版本號不一致的話檬某,最終庫A的什么版本是哪個呢撬腾?是以app的導(dǎo)入為準(zhǔn)嗎?還是以版本高的為準(zhǔn)恢恼?結(jié)論是以版本號高的引用那個為準(zhǔn)(打印依賴有向圖可以看出)民傻。
    問題:明明我只是升級了sdk的版本,但最終的依賴庫A的版本怎么也變了场斑?由于庫A的內(nèi)容變了漓踢,那調(diào)用庫A的代碼就有可能存在不一致性了,特別是涉及到大版本更新時漏隐。這是可以通過依賴關(guān)系圖來查看依賴的變化點和變化來源在哪里喧半。

  • 另外一種情況:還是以上面的結(jié)論為基礎(chǔ),假設(shè)app依賴的庫A版本比較高(最終以這個高版本為準(zhǔn))青责,且這個高版本庫A相比sdk依賴的低版本剛好刪掉某一個API接口(比如是大版本升級)挺据,而sdk內(nèi)部又剛好有調(diào)用這個刪掉了的接口。
    問題此時是app竟然可以編譯過2绷ァ1饽汀! 只是會等到在運行時拋出找不到方法的異常产阱。這怎么辦婉称?很嚴(yán)重,很隱秘的問題。
    原因:針對這種情況剛開始還不能理解王暗,都少了一個調(diào)用方法了為啥編譯時沒報錯榨乎?后來想想也是正常的,這是因為app導(dǎo)入的sdk是以aar的形式引入的瘫筐,而這個aar在sdk發(fā)布時就已經(jīng)編譯成字節(jié)碼(class)了蜜暑,所以此時編譯app時編譯器并不會再用javac去編譯aar了(直接將aar的class類merge到app中),于是最終編譯器沒有檢查調(diào)用關(guān)系的錯誤策肝。
    驗證:即使使用exclude將依賴庫A排除依賴(最終的apk不包含庫A的代碼)也仍可以編譯過肛捍。
    今天碰到了這種情況,一時無法理解:
    首先是一個sdk依賴的庫A低版本(3.0.1)的接口:

//3.0.1
public static Context build(Activity activity, boolean param1, boolean param2) {
    //...
}

然后是app依賴的庫A高版本(3.0.3)的接口:

//3.0.3
public static Context build(Context context, boolean param1, boolean param2) {
    //...
}

3.0.1版本與3.0.3版本的差異只是build()函數(shù)的第一個參數(shù)Activity變?yōu)榱?code>Context之众,但app升級了庫A3.0.3版本后編譯能通過拙毫,sdk內(nèi)部卻必現(xiàn)拋找不到方法異常:

java.lang.NoSuchMethodError: No static method build(Landroid/app/Activity;ZZ)Landroid/content/Context;

且我測試在app里調(diào)用這個build()方法又是正常的。為什么呢棺禾?原因就是上面說的(刪掉了方法與修改了方法簽名本質(zhì)上是一樣的)缀蹄,即使這里滿足多態(tài)性(ContextActivity的基類)也不行。

  • 在編寫sdk時膘婶,暴露的API類和接口不宜輕易改動缺前,否則可能會出現(xiàn)上述的依賴問題。廢棄的方法和類可以使用注解@Deprecated標(biāo)識起來悬襟,需要改動的接口使用方法重載的方式增加接口衅码,而不是去改動接口。

查看app的依賴關(guān)系的命令:

./gradlew :app:dependencies
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末脊岳,一起剝皮案震驚了整個濱河市逝段,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌割捅,老刑警劉巖奶躯,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異亿驾,居然都是意外死亡嘹黔,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進店門颊乘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來参淹,“玉大人,你說我怎么就攤上這事乏悄。” “怎么了恳不?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵檩小,是天一觀的道長。 經(jīng)常有香客問我烟勋,道長规求,這世上最難降的妖魔是什么筐付? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮阻肿,結(jié)果婚禮上瓦戚,老公的妹妹穿的比我還像新娘。我一直安慰自己丛塌,他們只是感情好较解,可當(dāng)我...
    茶點故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赴邻,像睡著了一般印衔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上姥敛,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天奸焙,我揣著相機與錄音,去河邊找鬼彤敛。 笑死与帆,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的墨榄。 我是一名探鬼主播鲤桥,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渠概!你這毒婦竟也來了茶凳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤播揪,失蹤者是張志新(化名)和其女友劉穎贮喧,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猪狈,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡箱沦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了雇庙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓形。...
    茶點故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疆前,靈堂內(nèi)的尸體忽然破棺而出寒跳,到底是詐尸還是另有隱情,我是刑警寧澤竹椒,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布童太,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏书释。R本人自食惡果不足惜翘贮,卻給世界環(huán)境...
    茶點故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望爆惧。 院中可真熱鬧狸页,春花似錦、人聲如沸扯再。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽叔收。三九已至齿穗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饺律,已是汗流浹背窃页。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留复濒,地道東北人脖卖。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像巧颈,于是被迫代替她去往敵國和親畦木。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,499評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,761評論 25 707
  • 用兩張圖告訴你砸泛,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料十籍? 從這篇文章中你...
    hw1212閱讀 12,699評論 2 59
  • 饑腸轆轆何人知, 心焦口苦食難咽唇礁, 一杯濁酒對空飲勾栗, 以酒澆愁愁更愁, 余恨自身惘奈何盏筐, 闕嘆有心身無力围俘, 口笨言...
    另類小伙閱讀 163評論 0 0
  • 作為一個擁有七年育兒經(jīng)歷界牡、且有著兩個孩子的媽媽,我想我總該寫點什么去記錄下人生中最值得記憶的時刻漾抬。 寫什么呢宿亡?就從...
    育見閱讀 1,011評論 3 0
  • 咖啡_5b34閱讀 120評論 0 2