VirtualAPK滴滴 Android 插件化框架
VirtualAPK 是滴滴出行自研的一款優(yōu)秀的插件化框架,通過將業(yè)務(wù)模塊插件化,可隨時(shí)更新插件來發(fā)布新功能,具備版本隨時(shí)發(fā)布的能力。
VirtualAPK的特性
功能完備
支持幾乎所有的Android特性;
四大組件方面
四大組件均不需要在宿主manifest中預(yù)注冊(cè),每個(gè)組件都有完整的生命周期。
Activity:支持顯示和隱式調(diào)用,支持Activity的theme和LaunchMode,支持透明主題;
Service:支持顯示和隱式調(diào)用,支持Service的start、stop、bind和unbind,并支持跨進(jìn)程bind插件中的Service;
Receiver:支持靜態(tài)注冊(cè)和動(dòng)態(tài)注冊(cè)的Receiver;
ContentProvider:支持provider的所有操作,包括CRUD和call方法等,支持跨進(jìn)程訪問插件中的Provider。
自定義View:支持自定義View,支持自定義屬性和style,支持動(dòng)畫;
PendingIntent:支持PendingIntent以及和其相關(guān)的Alarm、Notification和AppWidget;
支持插件Application以及插件manifest中的meta-data;
支持插件中的so。
優(yōu)秀的兼容性
兼容市面上幾乎所有的Android手機(jī),這一點(diǎn)已經(jīng)在滴滴出行客戶端中得到驗(yàn)證;
資源方面適配小米、Vivo、Nubia等,對(duì)未知機(jī)型采用自適應(yīng)適配方案;
極少的Binder Hook,目前僅僅hook了兩個(gè)Binder:AMS和IContentProvider,hook過程做了充分的兼容性適配;
插件運(yùn)行邏輯和宿主隔離,確??蚣艿娜魏螁栴}都不會(huì)影響宿主的正常運(yùn)行。
入侵性極低
插件開發(fā)等同于原生開發(fā),四大組件無需繼承特定的基類;
精簡(jiǎn)的插件包,插件可以依賴宿主中的代碼和資源,也可以不依賴;
插件的構(gòu)建過程簡(jiǎn)單,通過Gradle插件來完成插件的構(gòu)建,整個(gè)過程對(duì)開發(fā)者透明。
VirtualAPK的工作過程
VirtualAPK 對(duì)插件沒有額外的約束,原生的apk即可作為插件。插件工程編譯生成apk后,即可通過宿主App加載,每個(gè)插件apk被加載后,都會(huì)在宿主中創(chuàng)建一個(gè)單獨(dú)的LoadedPlugin對(duì)象。如下圖所示,通過這些LoadedPlugin對(duì)象,VirtualAPK就可以管理插件并賦予插件新的意義,使其可以像手機(jī)中安裝過的App一樣運(yùn)行。
