一種新的插件機制,一種免安裝的運作機制,是一個沙箱(就是對于使用者來說,并不知道他會把apk怎麼樣), 是子產品化的基礎。
droidplugin的缺點是什麼?
a.通知欄限制(無法在插件中發送具有自定義資源的notification
,例如: 1. 帶自定義remotelayout的notification 2. 圖示通過r.drawable.xxx指定的通知(插件系統會自動将其轉化為bitmap)
b.安全性擔憂(可以修改,hook一些重要資訊)
c.機型适配(不是所有機器上都能行,因為大量用反射相關,如果rom廠商深度定制了framework層,反射的方法或者類不在,容易插件運用失敗)
d. 需要預先注冊權限(在library中申請了原生系統所有的權限)
e. 無法在插件中注冊一些具有特殊intent filter的service
、activity
、broadcastreceiver
、contentprovider
等元件以供android系統、已經安裝的其他app調用。
f. 缺乏對native層的hook,對某些帶native代碼的apk支援不好,可能無法運作。比如一部分遊戲無法當作插件運作。
droidplugin的特點是什麼?
a.免安裝(就是如果隻要從網上下載下傳一個apk,不用安裝apk,在插件機制下,就能運作)
b.無需修改源碼(因為大量反射,代理,binder相關,這些足以騙過framework層)
c.二進制級别隔離
d.插件之間可以互相調用
e.解除耦合
f.靜默安裝,就是前面說的不用安裝,就可在插件機制中運作apk
g.崩潰隔離,插件崩潰,對主應用來說,不會有明顯影響
h.還原插件自己的多程序機制,适配性
i.子產品隔離,如可以把ui和控制邏輯進行隔離,控制邏輯可用插件化的方式
官方特點說明:
支援androd 2.3以上系統
插件apk完全不需做任何修改,可以獨立安裝運作、也可以做插件運作。要以插件模式運作某個apk,你無需重新編譯、無需知道其源碼。
插件的四大元件完全不需要在host程式中注冊,支援service、activity、broadcastreceiver、contentprovider四大元件
插件之間、host程式與插件之間會互相認為對方已經"安裝"在系統上了。
api低侵入性:極少的api。host程式隻是需要一行代碼即可內建droid plugin
超強隔離:插件之間、插件與host之間完全的代碼級别的隔離:不能互相調用對方的代碼。通訊隻能使用android系統級别的通訊方法。
支援所有系統api
資源完全隔離:插件之間、與host之間實作了資源完全隔離,不會出現資源竄用的情況。
實作了程序管理,插件的空程序會被及時回收,占用記憶體低。
插件的靜态廣播會被當作動态處理,如果插件沒有運作(即沒有插件程序運作),其靜态廣播也永遠不會被觸發。
droidplugin的的基本原理是什麼?
a.共享程序:為android提供一個程序運作多個apk的機制,通過api欺騙機制瞞過系統
b.占坑:通過預先占坑的方式實作不用在mainfest注冊,通過一帶多的方式實作服務管理
c.hook機制:動态代理實作函數hook,binder代理繞過部分系統服務限制,io重定向(先擷取原始object-->read,然後動态代理hook object後-->write回去,達到瞞天過海的目的)
插件host的程式架構: