筆者從 2016 年初就因?yàn)楣緲I(yè)務(wù)需求轉(zhuǎn)戰(zhàn) android sdk 開發(fā), 應(yīng)用插件化技術(shù)將公司 android sdk 重新翻版。先來(lái)說(shuō)說(shuō)需求。

由于筆者所在一家創(chuàng)業(yè)公司, android sdk 實(shí)際運(yùn)營(yíng)時(shí)間并不長(zhǎng), 處于業(yè)務(wù)成長(zhǎng)階段, 經(jīng)常會(huì)面對(duì)各種需求更改以及運(yùn)營(yíng)通道穩(wěn)定性等個(gè)方面的問題。由于種種的不穩(wěn)定性, 會(huì)導(dǎo)致 sdk 可能會(huì)經(jīng)常出現(xiàn)小規(guī)模修改的問題, 用戶對(duì)這種行為當(dāng)然是非常不滿意的了。可以想象,每一次 sdk 更新商務(wù)部門的同學(xué)要扛著多少用戶口水去和用戶商談,而技術(shù)部門又要承受到少商務(wù)部門同學(xué)的白眼。

為了徹底解決這種現(xiàn)狀, 從 16 年初我就開始正式介入 android sdk 重新開發(fā)這邊的工作。 需求 (1) 很明確, 就是要能夠做到 一次對(duì)接。介紹一下這個(gè)需求, 一次對(duì)接, 對(duì)于正常的 sdk 開發(fā)來(lái)說(shuō)是最基本的需求, 因?yàn)?sdk 就應(yīng)該處于長(zhǎng)期穩(wěn)定的狀態(tài), 要不然用戶不太愿意使用。 可是這對(duì)我們公司的現(xiàn)狀來(lái)說(shuō)是致命的, 恰恰是最基本的我們保障不了。為了能夠留下為數(shù)可憐的那些用戶們,一定要做些事情。需求 (2) 能夠做到及時(shí) 升級(jí)。 當(dāng)然這個(gè) 升級(jí) 的需求就是針對(duì)我們自己的現(xiàn)實(shí)狀況, 產(chǎn)品處于成長(zhǎng)期迭代的功能多少都會(huì)有。

主要的需求就是這兩個(gè)。 從技術(shù)的角度仔細(xì)去分析這兩個(gè)需求, 其實(shí)就是一個(gè)需求。 就是做 sdk 的 熱更。筆者之前從事的是 cocos2d-x 游戲開發(fā), 對(duì) 熱更 不可謂不熟。對(duì)于移動(dòng)領(lǐng)域的 app 開發(fā)熱更技術(shù)也都是了解的, 不過都是建立在腳本語(yǔ)言基礎(chǔ)上的。 如大家經(jīng)常提及的 cocos2d-x/u3d lua/js, android/iOS h5等, 這些都有成熟的方案做參考, 而當(dāng)時(shí)擺在我面前的卻是翻閱了所有搜索引擎都沒找到先例的問題。經(jīng)過一番苦思冥想之后, 從自己的記憶中提取到了一個(gè)片段 - 插件化。

15 年年底的時(shí)候, 快放假那段時(shí)間翻閱 github, 看到了一個(gè)很簡(jiǎn)明的 android 插件化框架 PluginMgr。果斷翻閱了當(dāng)時(shí)能找到的關(guān)于 插件化 的所有技術(shù)文章, 看懂看不懂的都閱讀一邊。 最終還是選擇了 PluginMgr。 我需要一個(gè)只需要支持 android activity 的插件化框架就可以了,另外,在 sdk 中使用也不能體積太大。它能滿足我目前的所有需求。 但是缺點(diǎn)卻也很明顯, 作者當(dāng)時(shí)已經(jīng)在開發(fā)新的插件化框架了, 并沒有太多的時(shí)間去做維護(hù)和更新, 這意味著我自己需要能夠把控這個(gè)框架,這讓我一度很遲疑。 經(jīng)過一段時(shí)間后, 發(fā)現(xiàn)自己能夠完全掌握所需要的技術(shù)棧。于是開始動(dòng)手, 新版 sdk 框架部分開發(fā)大概一周左右,然后另一位同事加入, 幫我開發(fā)我們 sdk 業(yè)務(wù) apk。

業(yè)務(wù) apk 的開發(fā)是一個(gè)正常的 android 項(xiàng)目, 插件化框架對(duì)他開始就是個(gè)黑匣子, 他不需要關(guān)心。 在后來(lái)實(shí)際上線的時(shí)候, 我提供了一些 宿主 和 插件 交互的 api 給他替換掉以前的一些 api 調(diào)用就可以了。 最后索性將這部分封裝做的徹底了點(diǎn), 讓他自己去調(diào)試自己的 業(yè)務(wù) apk, 成功了就可以直接發(fā)布。

而我這邊需要做的前期工作就是把 PluginMgr 做一些定制化的修改, 并修復(fù)一些原本的 bug。 然后就是做動(dòng)態(tài)更新部分的, 這很好做, 完全可以把以前做過的 熱更 部分拿過來(lái)做相應(yīng)的改動(dòng)就好了。 只不過我需要面向的是 更新 apk, 而不是原來(lái)的一個(gè)加密后的 腳本壓縮包。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式