LBE平行空间的技术实现
鏈接:https://www.zhihu.com/question/42998620/answer/95418981
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
利益相關:本人是LBE員工,Parallel Space平行空間的名字就是我起的:)
前面有同學對LBE平行空間的原理做了一些推測和分析,有些正確,有些不完整,我再做些補充
LBE平行空間和市面上的其他應用雙開app有本質區別,其他方案是通過改包名、改Framework等非常粗糙的方式達到目的,而LBE平行空間的底層是一個完整的虛擬化引擎:MultiDroid
更準確的說,MultiDroid并不是硬件虛擬化或OS虛擬化 (譬如VMware, Xen, KVM),它也不是應用層虛擬化(譬如XenApp, Wine),MultiDroid更類似容器(Container),譬如Docker
MultiDroid的關鍵技術有:
1. Framework層的虛擬實現
在Android環境中,每個應用在運行時都需要和Android framework打交道。Android系統的System-Server進程提供了大部分的系統API。 應用程序通過Binder IPC調用系統API。LBE之前在安全大師產品中,也就是通過對System-Server的hook來實現主動防御和權限管理,但MultiDroid在設計之初的一個最重要的目標就是不需要root權限,從而不能通過hook的方式來實現虛擬化。為此,我們需要自行實現一套完整的System-Server API,這就是MultiDroid的核心,工作量非常大,更麻煩的是,我們的設計目標是支持所有Android 4.0以上版本,而每個版本的Framework實現又千差萬別……
2. 文件系統虛擬化
程序在運行的時候,會加載文件系統上的程序指令和程序數據。要建立虛擬的應用程序運行環境,需要模擬一個獨立的文件系統,在這個獨立的文件系統中,再針對不同的虛擬應用的主目錄進行區分和權限控制
3. Android系統組件管理
一個Android應用基本上是由Android四大組件(Activity, Service, Broadcast Receiver,Content Provider)構成。在Android環境中,System-Server和應用通過進程間通信交互,Android系統負責了四大組件的管理,包括創建,激活,銷毀等。MultiDroid引擎實現了一套Android組件管理系統,用來模擬系統對Android組件的管理。每個運行在虛擬環境中的應用,會把自己的組件注冊給MultiDroid引擎,由MultiDroid引擎負責各個組件的生命周期維護
4. 應用進程管理
Android本身在應用和進程之間做了隔離,應用幾乎不需要感知進程的存在,只需要關注應用自身的四大組件。但是應用本身還是需要在Dalvik進程中運行。虛擬環境中的進程仍然是一個Dalvik進程, MultiDroid引擎負責了虛擬應用進程的創建,進程ID的分配,進程的銷毀等
MultiDroid的未來發展:
目前的MultiDroid引擎已經相當完善,可以很好的運行市面上的絕大部分App,而且在耗電和內存使用上都做了非常多的優化,但這只是起步,我們期望下一版的MultiDroid引擎將會從某種程度上改變Android本身的生態環境和使用體驗,譬如支持整個虛擬環境的快照和恢復,發燒友就不用為了嘗試各種新鮮玩法而反復刷機了,當然,還有虛擬環境內應用數據的云備份,類似iCloud,雖然有Android廠商也支持類似功能,但跨廠商的設備同步目前還沒有;再譬如代碼動態優化,雖然目前的MultiDroid引擎并沒有性能問題,但我們希望可以借鑒ART的做法,通過在虛擬環境中的代碼預優化和動態轉換,來提升應用加載速度;同時,我們已經找到了一個辦法把具有某些特征的dex字節碼片段在虛擬環境中轉為native指令來運行,性能的提升非??鋸?。總之,MultiDroid打開了一個盒子,里面有無窮可能。
總結
以上是生活随笔為你收集整理的LBE平行空间的技术实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 资源隔离之 Linux namespac
- 下一篇: 《Android插件化技术——原理篇》