您的位置:首页 > 其它

知乎上关于应用分身的问答

2018-03-09 14:02 429 查看
作者:方振宇
链接: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打开了一个盒子,里面有无穷可能。

----------------------------------------------------------------------------------------------------------

作者:王开心
链接:https://www.zhihu.com/question/45992098/answer/100406868
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

手机分身小米在两年前已经在探索,双系统在很早以前就实现并用在几乎所有机型上,只是用户没有太多感知。

小米的手机分身是基于Android多用户开发的,小米在Android多用户的基础上底层做了数据分和进程分离和很高强度的安全加固,保证了手机分身和主用户之间的高度安全隔离,同时在交互设计上又做了很多细节优化,这样主用户和分身用户的使用过程中就没有原生系统的割裂感.
手机分身因为要说的内容太多了,有空再补充吧.
然后说说应用分身。
MIUI8的应用分身,一个工程师,从调研到实现原型用了一个月,完成了雏形。
然后加入两个小伙伴,又用了一个多月,实现了产品化。
目前还有5%尚待完善和探索。
不是LBE类似的虚拟化技术,也不是Graphite Software 提供的“Secure Spaces”。
开发过程是有趣并轻松的(当然碰到难题也经常熬到凌晨一两点),因为可以合理的扩展和修改系统底层,所以我们实现要比LBE类似的虚拟化成本要低,分身应用运行效率要高,用户体验要好。
但是并不是100%完美,是的,我承认。
因为有很多三方应用调用接口不标准和Android AOSP原生逻辑bug。这些问题需要发现、解决、迭代,需要可爱的小米用户和我们继续优化和改进。
等大家用上了MIUI8,意见和建议报给我,掌声留给MIUI。
应米粉要求先贴几个应用分身的图吧:
是的,不是仅仅的微信双开,我们支持几乎所有应用的双开运行:
--------------------------------------------------

作者:方振宇
链接:https://www.zhihu.com/question/45992098/answer/100324898
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

谢邀!
小米昨天发布了MIUI8没多久,就有一些LBE的老用户问我,应用分身的功能,跟你们之前上线的LBE平行空间双开应用是不是一样的原理,是不是用了LBE的技术?MIUI8是怎么实现的?作为LBE平行空间的攻城狮,在这里回复下。
首先,MIUI8应用分身、手机分身背后的技术并不是LBE提供的。当然小米与LBE的合作一直比较多,应用权限管理一直采用的就是LBE的定制方案。这次更新的MIUI8中,还增加了新的技术合作,比如MIUI8支持链式启动管理,禁止应用互相调起的“葫芦娃”行为,这个功能用的就是LBE提供的数据。
据了解,小米是集成了国外一个OS虚拟化解决方案。没错,你看到了“虚拟化”的技术关键词。LBE平行空间背后的技术也是虚拟化技术引擎,我们内部代号是MultiDroid,当然我们的产品上架比MIUI8要早几个月。虚拟化可以在不同的软件层实现。MIUI作为一个手机ROM,极有可能是在OS层实现的虚拟化技术,需要通过修改Android Framework以及OS的源码。这个虚拟化的实现,与系统的耦合性很大,它比较依赖MIUI的定制系统,不能在其他Android版本上运行。
与MIUI8不同,LBE平行空间不是在操作系统层实现的,而是在应用层上实现的。它与OS的边界清晰,不依赖于特定的ROM。LBE平行空间兼容所有主流的Android版本,所有主流的国内外安卓手机,支持双开几乎所有的安卓应用。
(关于LBE平行空间的技术实现原理,请看我之前发的帖子:
发现一个支持微信双开的安卓应用(LBE平行空间)想知道这个技术是如何实现的?能否成为新移动入口级产品? - 方振宇的回答
还有朋友认为,MIUI8就是采用了原生Android多用户的机制,我认为并非仅限于此。多用户机制也可以实现所谓分身的功能,但对用户来说,使用体验相对较差。为了双开微信,还需要切换不同用户,使用繁琐,不能同时即时收到两个微信的消息等等。限于目前披露的技术细节并不多,也不好过多妄加猜测,等后续上手实际体验和研究了再说。
最后给大家出个题,小米手机分身x应用分身xLBE平行空间,一部手机可以同时登录几个微信?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: