Android插件化开发指南——插件化技术简介
文章目錄
- 1. 為什么需要插件化技術
- 2. 插件化技術的歷史
- 3. 插件化實現思路
- 3.1 InfoQ:您在 GMTC 中的議題叫做《Android 插件化:從入門到放棄》,請問這個標題代表什么意思?
- 3.2 InfoQ:請問您是如何學習的?對于初學者有什么建議?
- 4. 其他
1. 為什么需要插件化技術
插件化技術最初源于將app中一些不常用的功能模塊做成插件,主要有兩個方面的好處:
- 減小了安裝包的大小;
- 實現app功能的動態擴展;
但實際上現在插件化80%的使用場景都是為了修復線上BUG。當將一個項目的各個功能抽離為單獨的可運行的模塊的時候,也就是插件化的時候。如果項目的某個模塊出現了問題,那么需要在短時間內修復這個問題,而重新打包發布Android版到各大應用市場卻已經來不及了。而插件化就可以做到只需要重新打包這個模塊的代碼,生成增量包,放到服務器上供用戶下載即可更新。
當然,針對上述場景可選的技術方案不止插件化開發,Android熱修復技術也可以解決這個問題。但是插件化技術能做到的確不止是修復BUG。比如吃雞中的地圖更新、皮膚更新等,這些都不需要重新打包一個新的發布版本。因為此時各個業務模塊不再是事先分離的組件(即:aar)包,而是一個打包好的APK文件,放在宿主APP的assets的目錄下,用戶只需要下載就可以實現更新操作,而這個方面的內容才是插件化技術的價值所在。
2. 插件化技術的歷史
| AndroidDynamicLoader | 2012年大眾點評的屠毅敏(最早的動態加載實現方案)【代理Fragment】 | https://github.com/mmin18/AndroidDynamicLoader | 只支持Activity | 否 |
| Altas | 2013年淘寶的伯奎 【hook底層】 | https://alibaba.github.io/atlas/ | 支持四大組件 | 否 |
| dynamic-load-apk | 2014年百度的任玉剛 【代理Activity】 | https://github.com/singwhatiwanna/dynamic-load-apk | 只支持Activity | 否 |
| DroidPlugin | 2015年奇虎360的張勇【hook】 | https://github.com/Qihoo360/DroidPlugin | 支持四大組件 | 否 |
| DynamicAPK | 2015年攜程【基于OpenAltas】 | https://github.com/CtripMobile/DynamicAPK | 只支持Activity | 否 |
| Small | 2015年二手車交易平臺林光亮【hook】 | https://github.com/wequick/Small | 支持四大組件 | 是 |
| RePlugin | 2017年奇虎360手機衛士【hook】 | https://github.com/Qihoo360/RePlugin | 支持四大組件 | 否 |
| VisualApk | 2017年滴滴 | https://github.com/didi/VirtualAPK | 支持四大組件 | 否 |
值得注意的是,插件化開發技術一直是我們中國的開發者在積極探索。這是因為在國外一般都使用Google Play,在這個官方市場不允許插件化APP的存在。且因為國內的場景不同,在國內任何數據的顯示錯誤或者奔潰都直接導致更過利潤的丟失,所以在國內這個相對寬松的環境下,插件化技術運營而生。
3. 插件化實現思路
利用hook技術實現欺上瞞下。Android系統是多進程的,所以系統服務實際上不知道App進程中具體運行的代碼,所以使得欺上瞞下成為了可能。欺上是指讓系統不知道我們的插件在宿主App中運行;瞞下是指讓插件以為自己已經被安裝。當然也有使用Java動態代理來實現的欺上瞞下,比如DroidPlugin。
無意間看到《Android插件化開發指南》這本書作者包老師的專訪記錄:專訪包建強:為什么我說 Android 插件化從入門到放棄?。這里簡單做一個摘要:
3.1 InfoQ:您在 GMTC 中的議題叫做《Android 插件化:從入門到放棄》,請問這個標題代表什么意思?
包建強:哈哈哈。我是覺得,如果這個演講主題是《Android 插件化:從入門到精通》的話,就體現不出真是想明白了這個領域。所以最近冒出來各種從入門到放棄、改行、住院、出家的技術書籍,我覺得那反而是說明作者是真的大徹大悟了,武俠小說里面有寫,雖“飛花摘葉皆可傷人,草木竹石均可為劍”,就是這種境界。
不過要聲明的是,我對 Android 插件化的認識,遠不如馮森林、張勇、羅迪這些人。
我有一個 Android 插件化研究的群,三十多人,都是國內各個插件化開源項目的作者、公司插件化的實施者,以及傳經授道的博客作者。我們都感受到 Android 插件化技術基本已經成型了,隨著 React Native 的橫空出世,Android 插件化會慢慢退出歷史舞臺,也就是這一兩年的事情吧,所以要給后人留下點什么,于是便有了這次技術分享。
我的分享講包括插件化技術的歷史和各種八卦,各個技術流派,一些小例子,各個開源項目的思想,插件化實施過程中遇到的問題,以及未來的發展方向。45 分鐘,我盡量講的生動有趣一些。
3.2 InfoQ:請問您是如何學習的?對于初學者有什么建議?
- 首先就是去寫代碼。有一個做 Android 的哥們升級為架構師,需要了解 iOS 這門技術,來問我怎么能迅速精通 iOS,我就告訴他,別玩虛的,腳踏實地跟著 iOS 開發團隊做幾個需求,半年之后再來談這個話題。Android 和 iOS 的很多現金思想可以相互借鑒,我建議做一門技術的同學,也適當學習另一門技術。
- 咬著牙看開源項目。比如說 JSPatch,怎么看?我有個建議,你看 JSPatch 的版本提交歷史,從第一次提交看起,這時候的功能應該是最簡單的,也是最容易看懂的,然后看歷史每次提交都修改了哪些東西,你能搞清楚作者的思路是什么。
- Android 插件化雖然有被 React Native 取代的勢頭,但還是要搞清楚插件化所涉及的各種思想和技術。我這一年來的心得是,這是提高自身內功的極好辦法。尤其是涉及到 Android 系統底層的各種 Hook。
- 寫技術博客吧。每天看文章只能是看過,一個月后能沉淀下來的沒有多少,好記性不如爛筆頭。一開始你可以轉載或羅列精品文章的鏈接,慢慢的開始分享自己的心得,翻譯些技術文章,技術水平提高是一個循序漸進的過程。
4. 其他
除了插件化和熱修復可以用來修復bug以外,React Native也可以用來修復bug和動態發布新功能,和Android插件化開發有異曲同工之妙。值得注意的是React Native雖然是H5編寫,但是和Hybrid技術不同。由于H5很慢所以React Native將HTML5翻譯為了原生代碼。
既然React Native也可以達到效果,且效率上可以得到滿足。那么未來React Native會成為App開發的主流?
References
- 專訪包建強:為什么我說 Android 插件化從入門到放棄?
總結
以上是生活随笔為你收集整理的Android插件化开发指南——插件化技术简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二十一世纪大学英语读写基础教程学习笔记(
- 下一篇: 发卡行机构代码表大全