最近幾年移動開發(fā)業(yè)界興起了「 插件化技術(shù) 」的旋風(fēng),各個(gè)大廠都推出了自己的插件化框架落剪,各種開源框架都評價(jià)自身功能優(yōu)越性睁本,令人目不暇接。隨著公司業(yè)務(wù)快速發(fā)展忠怖,項(xiàng)目增多呢堰,開發(fā)資源卻有限,如何能在有限資源內(nèi)滿足需求和項(xiàng)目的增長凡泣,同時(shí)又能快速響應(yīng)問題和迭代新需求枉疼,這就是一個(gè)矛盾點(diǎn)。此時(shí)鞋拟,插件化技術(shù)正好風(fēng)生水起骂维,去了解各個(gè)主流框架實(shí)現(xiàn)思路,看看能對目前工作是否有幫助贺纲,是很有必要的航闺。
插件化介紹
百度百科里是這么定義插件的:「 是一種遵循一定規(guī)范的應(yīng)用程序接口編寫出來的程序,只能運(yùn)行在程序規(guī)定的系統(tǒng)平臺下猴誊,而不能脫離指定的平臺單獨(dú)運(yùn)行潦刃。」懈叹,也就是說乖杠,插件可以提供一種動態(tài)擴(kuò)展能力,使得應(yīng)用程序在運(yùn)行時(shí)加載原本不屬于該應(yīng)用的功能项阴,并且做到動態(tài)更新和替換滑黔。
那么在 Android 中,何為「 插件化 」环揽,顧名思義,就是把一些核心復(fù)雜依賴度高的業(yè)務(wù)模塊封裝成獨(dú)立的插件庵佣,然后根據(jù)不同業(yè)務(wù)需求進(jìn)行不同組合歉胶,動態(tài)進(jìn)行替換,可對插件進(jìn)行管理巴粪、更新通今,后期對插件也可進(jìn)行版本管理等操作粥谬。在插件化中有兩個(gè)概念需要講解下:
- 宿主
所謂宿主,就是需要能提供運(yùn)行環(huán)境辫塌,給資源調(diào)用提供上下文環(huán)境漏策,一般也就是我們主 APK ,要運(yùn)行的應(yīng)用臼氨,它作為應(yīng)用的主工程所在掺喻,實(shí)現(xiàn)了一套插件的加載和管理的框架,插件都是依托于宿主的APK而存在的储矩。
- 插件
插件可以想象成每個(gè)獨(dú)立的功能模塊封裝為一個(gè)小的 APK 感耙,可以通過在線配置和更新實(shí)現(xiàn)插件 APK 在宿主 APK 中的上線和下線,以及動態(tài)更新等功能持隧。
那么為何要使用插件化技術(shù)即硼,它有何優(yōu)勢,能給我們帶來什么樣好處屡拨,這里簡單列舉了以下幾點(diǎn):
- 讓用戶不用重新安裝 APK 就能升級應(yīng)用功能只酥,減少發(fā)版本頻率,增加用戶體驗(yàn)呀狼。
- 提供一種快速修復(fù)線上 BUG 和更新的能力层皱。
- 按需加載不同的模塊,實(shí)現(xiàn)靈活的功能配置赠潦,減少服務(wù)器對舊版本接口兼容壓力叫胖。
- 模塊化、解耦合她奥、并行開發(fā)瓮增、 65535 問題。
深入理解Android插件化技術(shù)
現(xiàn)在普通人一聽“宿主”第一想到的就是歐美電影里的恐怖畫面哩俭,甚至感覺瘆得慌绷跑。但是在移動開發(fā)領(lǐng)域,我們經(jīng)常會提及的“宿主”卻有完全不一樣的意義凡资,那就是支持插件的app主體砸捏。
從2012年插件化概念被提出,到2016年的時(shí)候隙赁,插件化技術(shù)百家爭鳴垦藏,被一線大廠廣泛使用,可以說成為了Android高級工程師所必須具備的技能之一伞访,幾乎引領(lǐng)了Android技術(shù)的進(jìn)步掂骏!
近些年,一線互聯(lián)網(wǎng)大廠幾乎對移動互聯(lián)網(wǎng)形成了壟斷厚掷,app的功能越來越多弟灼,比如下面這些app(美團(tuán)级解、支付寶等):
每個(gè)app都集成了許多功能入口,美團(tuán)上有“美食”田绑、“電影”勤哗、“外賣”、“打車”等掩驱,其實(shí)每個(gè)入口都是一個(gè)app芒划,只不過被集成到這些入口里了。如果沒有插件化技術(shù)昙篙,美團(tuán)腊状、淘寶這些app會有多大?幾個(gè)G都有可能苔可!
這些大型app是如何把第三方app作為插件集成到自己的app里的缴挖?
隨便一個(gè)app就能隨意調(diào)用其他app嗎?
當(dāng)然不能焚辅!
插件化技術(shù)最初源于免安裝運(yùn)行apk的想法删咱,這個(gè)免安裝的apk可以理解為插件酣溃,而支持插件的app 我們一般叫宿主面睛。支持插件化的app可以在運(yùn)行時(shí)加載和運(yùn)行插件昵时,這樣便可以將app中一些功能獨(dú)立的模塊寫成獨(dú)立的插件,一方面減小了安裝包的大小湾蔓,另一方面可以實(shí)現(xiàn)app功能的動態(tài)擴(kuò)展瘫析。想要實(shí)現(xiàn)插件化,主要是解決下面三個(gè)問題:
1默责、插件中代碼的加載和與主工程的互相調(diào)用
2贬循、插件中資源的加載和與主工程的互相訪問
3、四大組件生命周期的管理
插件化技術(shù)涉及得非常廣泛桃序,其中最核心的就是Android的類加載機(jī)制和反射機(jī)制杖虾。
高級Android插件化強(qiáng)化實(shí)戰(zhàn)(附源碼)
雖然現(xiàn)在很多公司開源了插件化框架,但還有非常多的開發(fā)者對插件化一知半解媒熊。所以我特地給大家整理了167頁的高級Android插件化強(qiáng)化實(shí)戰(zhàn)(附源碼)奇适,一共分為四個(gè)部分:
- 第一章 插件化技術(shù)的前世今生
- 第二章 插件化原理
- 第三章 Android插件化初探
- 第四章 架構(gòu)演化(大廠篇)
從基礎(chǔ)的插件化原理到Android插件化初探再到大廠架構(gòu)演化實(shí)戰(zhàn)應(yīng)用,總結(jié)出了較為全面與完整的安卓插件技術(shù)與插件化對 Android開發(fā)的重要性芦鳍。
一嚷往、插件化技術(shù)的前世今生
1.1 插件化提要
1.2 插件化發(fā)展歷史
二、插件化原理
2.1 類加載
2.2 雙親委托機(jī)制
2.3 資源加載
2.4 四大組件支持
2.5 ProxyActivity代理
2.6 hook方式
2.7 其他組件
2.8 Android動態(tài)加載框架DL的架構(gòu)與基本原理解析
2.9 Android 插件化框架 DynamicLoadApk 源碼分析
三怜校、Android插件化初探
3.1 從零開始實(shí)現(xiàn)一個(gè)插件化框架
3.1.1 概念
3.1.2 插件化解決的問題
3.1.3 各插件化框架對比
3.1.4 插件化實(shí)現(xiàn)
3.1.5 ClassLoader實(shí)現(xiàn)類
3.2 從零開始實(shí)現(xiàn)一個(gè)插件化框架
3.2.1 Activity的啟動流程
3.2.2 尋找Hook點(diǎn)
3.2.3 擼碼階段
3.2.4 代理對象
3.2.5 偷天換日间影,替換原來的Intent
3.2.6 ActivityThread
3.2.7 將代理的intent替換回來
3.2.8 注意
3.3 從零開始實(shí)現(xiàn)一個(gè)插件化框架
3.3.1 插件資源加載
3.3.2 Android中資源加載流程
3.3.3 ActivityManager
3.3.4 ActivityThread
3.3.5 AppCompatActivity
四、架構(gòu)演化(大廠篇)
4.1 360插件開發(fā)之DroidPlugin
4.1.1 插件開發(fā)之360 DroidPlugin源碼分析
4.1.2 插件開發(fā)之360 DroidPlugin源碼分析之Hook機(jī)制
4.1.3 Hook機(jī)制的包結(jié)構(gòu)關(guān)系
4.1.4 Hook機(jī)制類圖關(guān)系
4.1.5 Hook機(jī)制的時(shí)序圖關(guān)系
4.1.6 Manifest權(quán)限申請
4.1.7 基類Hook做了什么茄茁?
4.1.8 ProxyHook
4.1.9 BaseHookHandle
4.1.10 HookedMethodHandler
4.1.11 ReplaceCallingPackageHookedMethodHandler
4.1.12 IO重定向
4.1.13 遞歸遍歷
4.1.14 以IPackageManager為例
4.1.15 插件開發(fā)之360 DroidPlugin源碼分析之Binder代理
4.2 滴滴VirtualApk實(shí)戰(zhàn)
4.2.1 配置
4.2.2 應(yīng)用
4.2.3 原理
4.2.4 總結(jié)
4.2.5 問題
4.3 基于VirtualAPK Android重構(gòu)之插件化
4.3.1 Plug-in Hello World
4.3.2 插件化框架的選擇
4.3.3 插件化原理
4.3.4 引入插件化之痛
4.4 愛奇藝插件化原理分析之 Neptune框架
4.4.1 插件化基礎(chǔ)知識點(diǎn)
4.4.2 類加載
4.4.3 插件化中資源使用限制
4.4.4 Apk打包流程
4.4.5 四大組件的插件化
4.4.6 插件Activity任務(wù)棧
4.4.7 處理插件中的廣播
4.4.8 處理插件中的Service
4.5 360開源全面插件化框架RePlugin 實(shí)戰(zhàn)
4.5.1 RePlugin 介紹
4.5.2 宿主接入步驟
4.5.3 插件接入步驟
4.5.4 使用插架
4.6 騰訊插件化框架 Shadow項(xiàng)目解析
4.6.1 框架簡單介紹
4.6.2 框架結(jié)構(gòu)分析
4.6.3 sample 示例代碼 AndroidManifest.xml 分析
4.6.4 Activity 實(shí)現(xiàn)
4.6.5 替換插件 Activity 的父類
4.6.6 Service 實(shí)現(xiàn)
4.6.7 BroadcastReceiver 實(shí)現(xiàn)
4.6.8 ContentProvider 實(shí)現(xiàn)
4.6.9 框架自身動態(tài)化
最后
插件化技術(shù)可以說是Android高級工程師所必須具備的技能之一魂贬,從2012年插件化概念的提出(Android版本),到2016年插件化的百花爭艷裙顽,直至現(xiàn)在拆件化已成為Android開發(fā)必不可少的重點(diǎn)付燥,可以說,插件化技術(shù)引領(lǐng)著Android技術(shù)的進(jìn)步愈犹。
我相信一個(gè)高級程序員一定是勤奮的键科,可以快速地掌握大量 的新技術(shù)、新框架漩怎,不僅懂得原理勋颖,還能把新的技術(shù)落地到公司的產(chǎn)品中去。這是衡量程序員 工作能力的一個(gè)重要標(biāo)準(zhǔn)勋锤,那么怎樣才能將技術(shù)運(yùn)用自如呢饭玲?唯有實(shí)踐!
最后上面分享的資源均免費(fèi)分享:
文末
歡迎關(guān)注我的簡書叁执,分享Android干貨茄厘,交流Android技術(shù)。
對文章有何見解谈宛,或者有何技術(shù)問題次哈,都可以在評論區(qū)一起留言討論,我會虔誠為你解答吆录。
最后窑滞,如果你想知道更多Android的知識或需要其他資料我這里均免費(fèi)分享,只需私信666找我獲取恢筝,也可以點(diǎn)贊加評論支持哦哀卫!