APP項目如何與插件化無縫結合(一)
插件化之旅
一直熱衷于插件化,熱更新相關,利用每天下班后的空余時間去研究,踩過很多坑,曾經為了一個坑,不解決難以入睡。都是血淚史,請珍愛每一個搬磚碼字的程序猿。好吧,廢話不多說,進入正題。由于內容太多,很多人看到字太多,就沒有特別大的耐心,我將分為幾篇來介紹。希望能夠幫助大家理解,并且對于自身項目接入插件化有所幫助!
一、什么是插件化
談到插件化,很多人會想到熱修復,熱更新,組件化這些名詞。最近有網友在熱補丁介紹及Andfix的使用 看了這篇文章給我發私信問,想把Andfix集成在自身項目里面。因為阿里出品,而且比較火。其實我當時也有過這個考慮,后面真正深入后,發現其實還有很多坑,而且github上面也很久沒有代碼更新了。綜合各種原因,后面放棄了。(這里并不是詆毀Andfix,因為我自己也投入很多精力去研究,我敬佩每一個開源貢獻者!但是至少它確實還存在很多問題,現在還不適合)。其實準確的說,熱修復應該算是插件化過程中的一種附屬產物。另外,我們自己的項目中也開始組件化,組件化和插件化其實大體思路是差不多,但是還是有本質上的區別。組件化開發就是將一個項目app拆分成多個模塊,每個模塊都是一個組件,組件化開發過程中相互依賴或單獨調試,最終發布的時候是將這些組件合并統一成一個apk。插件化開發也是將一個項目app拆分成多個模塊,這些模塊包括宿主和插件。每個模塊相當于一個apk,而組件化相當于一個lib。最終發布的時候將宿主apk和插件apk單獨打包或者聯合打包。
二、插件化的作用
1.并發開發
當公司發展越來越大,項目越來越多,如何提高開發效率。這時插件化就將啟動巨大的作用,就想前面說的,可以把開發人員分成很多組,每個組負責一個插件,彼此之間沒有過多的依賴,可以單獨調試打包。有時發版其實就相當于發插件。
2.動態更新插件或遠端調試
app如果出現問題,不會像后臺或者web那樣,去改下線上的代碼就可以了。因為app發版是在多個應用市場里面,你很難有權利或者很麻煩去應用市場把有bug的包替換。這時就需要插件。app每次啟動回去校驗是否有插件更新,有的話,就去服務器上下載最新的插件替換掉已有的。另外還有在實際工作會出現的場景,就是其他用戶沒有問題,某個用戶,某個版本出現有問題,這時用戶的情況開發人員大概知道什么問題,修復好之后,卻找不到場景重現。這時可以通過給特定用戶推送插件更新,已確保確實已經修復成功。
3.按需下載模塊
app的設計,為了增加用戶量,可能會偏向于“全功能”,但是有些用戶又不需要太多功能,這時就可以按需下載。用戶需要使用到的時候,才去下載相應模塊。
4.方法數或變量數爆棚
Android應用方法數不能超過65k一直是硬傷,尤其是項目越來越大的情況。關于為什么方法數不能超過65k,自行谷歌。我就不過多介紹。插件化可以完美解決。想想如果有10個插件,每個插件60k的方法數,話說,你項目真的用得了這么多嗎?
5.數據統計
主要是A/B test,比如產品經理同一套邏輯,可能有兩種不同的交互體驗,那究竟哪種用戶體驗更好呢?插件化可以給不同的用戶更新不同的插件,然后去觀察他們的相關數據。
三、Small
前面提到放棄了Andfix,那么插件化應該是以后的主流趨勢,我該如何抉擇?我查了很多資料,也單獨去把插件化開源項目,一個個下載編譯研究,里面的血淚就省略很多字。然后發現了Small,頓時仿佛看到了曙光!!先上一張圖看看。
開源插件化項目對比
可以看到項目開發常用需要更新的地方,Small都支持,關于Service動態注冊不支持,small作者的解釋,我個人理解是因為sevice相關直接放在宿主apk里面就行了,service的更新不是特別頻繁,沒有必要花費精力去做不是特別有用的事情。也可以順便減少代碼量。關于AppCompat,是AndroidStudio默認添加的主題包,Google主推的Metrial Design包也依賴于此。未來的趨勢。
其實前面同事提出是否考慮攜程的DyAPK即DynamicAPK,因為攜程的,畢竟大公司。我后面也確實去看了下。后面發現release版本沒有,2個貢獻者,從去年11低到現在大半年都沒有更新維護過,而且我自己表示花了很長時間沒有編過,或許是我自身的問題。反觀Small,加了一個群,作者積極的幫助開發者去了解small,release版本也有,代碼更新維護也快,另外small慢慢也得到更多人的青睞。代碼的設計也很科學。我不是幫small作者打廣告,他可能也不需要我打廣告。我只是個人感受,實話實說。另外,對于攜程的開源插件化,并不是一點用沒有,里面有很多設計還是值得學習的,還有也算是對插件化的一種促進作用。
接下來來談談Small的原理,想要使用它,控制它,必須了解它的原理。APP項目如何與插件化無縫結合(二)
系列文章
APP項目如何與插件化無縫結合(一)
APP項目如何與插件化無縫結合(二)
APP項目如何與插件化無縫結合(三)
參考資料:
1.https://github.com/wequick/Small
2.http://www.tuicool.com/articles/NB32EjY
3.http://www.tuicool.com/articles/RR3QrmV
來自:http://www.jianshu.com/p/230311b9a16b