天天看點

360 黑科技 Droid Plugin

droid plugin 詳細介紹

droidplugin 是360手機助手在 android 系統上實作了一種新的插件機制:它可以在無需安裝、修改的情況下運作apk檔案,此機制對改進大型app的架構,實作多團隊協作開發具有一定的好處。

host程式:插件的宿主。

插件:免安裝運作的apk

無法在插件中發送具有自定義資源的notification,例如: a. 帶自定義remotelayout的notification b. 圖示通過r.drawable.xxx指定的通知(插件系統會自動将其轉化為bitmap)

無法在插件中注冊一些具有特殊intent filter的service、activity、broadcastreceiver、contentprovider等元件以供android系統、已經安裝的其他app調用。

對activity的launchmode支援不夠好,activity stack管理存在一定缺陷。activity的onnewintent函數可能不會被觸發。 (此為bug,未來會修複)

缺乏對native層的hook,對某些帶native代碼的apk支援不好,可能無法運作。比如一部分遊戲無法當作插件運作。

支援androd 2.3以上系統

插件apk完全不需做任何修改,可以獨立安裝運作、也可以做插件運作。要以插件模式運作某個apk,你無需重新編譯、無需知道其源碼。

插件的四大元件完全不需要在host程式中注冊,支援service、activity、broadcastreceiver、contentprovider四大元件

插件之間、host程式與插件之間會互相認為對方已經"安裝"在系統上了。

api低侵入性:極少的api。host程式隻是需要一行代碼即可內建droid plugin

超強隔離:插件之間、插件與host之間完全的代碼級别的隔離:不能互相調用對方的代碼。通訊隻能使用android系統級别的通訊方法。

支援所有系統api

資源完全隔離:插件之間、與host之間實作了資源完全隔離,不會出現資源竄用的情況。

實作了程序管理,插件的空程序會被及時回收,占用記憶體低。

插件的靜态廣播會被當作動态處理,如果插件沒有運作(即沒有插件程序運作),其靜态廣播也永遠不回被觸發。

在host中內建droid plugin項目非常簡單:

我們隻是需要将droid plugin當作一個lib工程應用到主項目中,然後:

在androidmanifest.xml中使用插件的com.morgoo.droidplugin.pluginapplication:

如果你使用自定義的application,那麼你需要在自定義的application class oncreate和attachbasecontext方法中添加如下代碼:

将插件中librariesdroidpluginandroidmanifest.xml中所有的provider對應的authorities修改成自己的,預設為com.morgoo.droidplugin_stub_p00,如下:

可以修改為自己的包名,如: com.example.droidplugin_stub_p00 防止跟其它本插件使用者沖突:

內建完成。

安裝、更新插件,使用如下方法:

解除安裝插件,使用如下方法:

啟動插件:啟動插件的activity、service等都和你啟動一個以及安裝在系統中的app一樣,使用系統提供的相關api即可。元件間通訊也是如此。

請參見源碼

繼續閱讀