本篇內(nèi)容主要講解“什么是插件化技術(shù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“什么是插件化技術(shù)”吧!
創(chuàng)新互聯(lián)建站憑借專業(yè)的設(shè)計(jì)團(tuán)隊(duì)扎實(shí)的技術(shù)支持、優(yōu)質(zhì)高效的服務(wù)意識(shí)和豐厚的資源優(yōu)勢(shì),提供專業(yè)的網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站優(yōu)化、軟件開(kāi)發(fā)、網(wǎng)站改版等服務(wù),在成都十載的網(wǎng)站建設(shè)設(shè)計(jì)經(jīng)驗(yàn),為成都數(shù)千家中小型企業(yè)策劃設(shè)計(jì)了網(wǎng)站。
什么是插件,一般指一個(gè)apk、dex、jar文件。插件化技術(shù)是指通過(guò)classloader將插件加載然后可以被宿主系統(tǒng)去使用。插件文件一般指從網(wǎng)絡(luò)獲取存放在sdcard上。當(dāng)然已安裝到手機(jī)data/app目錄下的apk也可以叫插件。
插件化技術(shù)主要難點(diǎn)是在如何用classloader加載插件。classloader加載分單classloader和多classloader,多classloader優(yōu)勢(shì)明顯,每個(gè)插件的類處在不同classloader隔離性非常好,對(duì)于同一個(gè)庫(kù)不同版本問(wèn)題不會(huì)有問(wèn)題。但是對(duì)于Android來(lái)說(shuō),多classloader hook系統(tǒng)api的點(diǎn)太多,(主要得hook LoadedApk里的classloader,將classloader替換為自定義classloader,這個(gè)過(guò)程比較曲折)單classloader hook要簡(jiǎn)單一些(只需在宿主APP內(nèi)獲得當(dāng)前classloader,一般是PathClassloader,拿到父類BaseDexClassLoader#pathList,它存放了插件文件生成的Element 對(duì)象,所以把我們的插件生成一個(gè)Element放進(jìn)去即可)
插件化思想比較簡(jiǎn)單,但是實(shí)現(xiàn)比較復(fù)雜,因?yàn)樾枰瓷鋒ook很多系統(tǒng)apk,最終對(duì)于系統(tǒng)的穩(wěn)定性不是很好。而且隨著Android系統(tǒng)升級(jí)需要不斷維護(hù),所以開(kāi)發(fā)一個(gè)這樣的插件得需要專門(mén)的一個(gè)團(tuán)隊(duì)維護(hù)成本比較高。
virtual APP實(shí)現(xiàn)是直接對(duì)系統(tǒng)主要的服務(wù)進(jìn)行了一個(gè)虛擬化代替,當(dāng)然實(shí)現(xiàn)過(guò)程也是通過(guò)反射系統(tǒng)api,然后將自己實(shí)現(xiàn)的替換達(dá)到APP運(yùn)行過(guò)程的攔截。
virtual app 應(yīng)用 安裝系統(tǒng)已存在的應(yīng)用并展示,點(diǎn)擊啟動(dòng)目標(biāo)應(yīng)用先啟動(dòng)virtual APP LeadingActivity,此時(shí)運(yùn)行在APP進(jìn)程。
然后通過(guò)VAMS啟動(dòng)activity,此時(shí)運(yùn)行在VAMS進(jìn)程,在這里做了目標(biāo)intent的替換操作,替換為StubAcitivy。然后啟動(dòng)StubActivity此時(shí)運(yùn)行在StubAcitity進(jìn)程:p,此時(shí)以下就運(yùn)行在:p進(jìn)程作為啟動(dòng)APP的進(jìn)程
然后通過(guò)反射調(diào)用ActivityManagerNative 再跨進(jìn)程調(diào)用系統(tǒng)AMS啟動(dòng)activity,走系統(tǒng)startActivity流程。之后因?yàn)閔ook了HCallbackHandler。在callback中又將原真實(shí)目標(biāo)intent替換回來(lái)。然后callback返回false,繼續(xù)交給ActivityThread#handlerLauncherAcitivty處理
到此,相信大家對(duì)“什么是插件化技術(shù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!