目录
前言:
一、应用双开简介
1.1什么是应用双开
1.2 与多用户的区别
二、技术实现
2.1技术选择
2.1.1 修改包名重打包
2.1.2 虚拟引擎技术
2.1.3 Android的多用户机制
2.2具体实现
2.2.1 应用双开时进程信息
2.2.2 代码流程
2.2.2.2 在新用户上安装应用
2.2.2.3 控制和显示分身应用
2.3 最终效果
前言:
对于应用双开功能,很多国内的较大的手机厂商已经实现,例如小米、vivo、oppo等。这些厂商通常将应用双开的入口做在手机设置里,用户可以打开设置应用,在设置中选择需要双开的应用。手机的应用双开的功能应用场景有很多,例如双开微信,分别登录不同的账号,一个用于工作,一个用于日常生活。
那么实现应用双开(分身)有几种实现方式?具体实现的代码流程是怎样的?接下来我将手把手的带大家完成该功能。
在以下的代码和视图中,我选择的是Android14的平板的源码,手机以及电视的实现代码流程是类似的,触类旁通即可。
一、应用双开简介
1.1什么是应用双开
应用双开(又称应用分身)指在同一台Android设备上同时运行两个相同应用的独立实例,每个实例拥有独立的账号、数据存储及运行环境。例如:一部手机同时登录两个微信账号,工作号与生活号等,无需反复切换即可并行处理消息。
1.2 与多用户的区别
(1)多用户功能:
多用户是用户级别的数据隔离,切换用户的时候要会将主用户的所有应用都拷贝一份到新用户的专有目录下,默认主用户拥有的应用,在新用户下也存在,但主用户对应用的操作数据并不会被拷贝过来,接下来用户的所有操作数据都会存储在新用户独有的目录下。在用户体验上,最大的差异就是多用户需要显示的切换用户,类似window系统切换用户一样。
(2)应用双开:
而应用双开是应用级别的数据隔离,用户不需要切换用户就可以在主用户中打开同一应用的两个不同实例,而两个应用之间的数据是被隔离的,互不影响。
(3)技术联系与用户体验差异:
尽管许多手机厂商的“应用双开”功能是基于 Android 原生的多用户功能扩展实现的,但从终端用户的实际体验来看,两者差别显著:
• 如果设备开放了多用户功能,用户确实可以通过切换用户来打开同一应用的不同实例(例如,在主用户登录微信 A 账号,切换到新用户后打开微信则是全新的 B 账号实例)。从数据隔离的角度看,这某种程度上也可达到“双开”效果。
• 然而,这种方式的操作过于繁琐,需要切换整个用户环境。大多数用户往往只需要对少数特定应用进行双开,如微信、QQ等,并不希望复制所有应用。应用双开功能的核心体验在于用户可以在Launcher上看到不同图标,例如“微信”和“微信分身”,点击即可便捷地分别打开两个应用实例,完全省去了切换用户环境的步骤。
二、技术实现
2.1技术选择
要实现应用双开功能,其实是有多种实现方式的,如利用Android的多用户机制、修改包名重打包、虚拟引擎技术等,而本篇文章主要是介绍如何利用Android的多用户机制实现应用双开,对于另外两种方式,下面将只是简单的介绍以下。
2.1.1 修改包名重打包
• 原理:解压APK→修改包名/代码→重签名安装(系统视为新应用)。
• 优点:独立数据目录(隔离性强)、概念简单。
• 缺点:技术繁琐(易功能异常)、重签名导致校验失效、侵权风险、无法动态创建。
• 适用 :不推荐生产,仅限无法律风险的技术研究。
2.1.2 虚拟引擎技术
• 原理:主用户内构建虚拟环境(Hook系统API重定向数据/进程),模拟独立运行环境。
• 优点:灵活(支持任意设备)、桌面一键启动、可定制化(如模拟设备信息)。
• 缺点:技术复杂、兼容性差(Android版本升级易失效)、性能开销大、安全风险高(宿主可窃取数据)。
• 适用:第三方多开工具、测试沙盒。
2.1.3 Android的多用户机制
• 原理:利用Android原生多用户机制(每个用户独立存储空间)或工作资料(主用户下的隔离沙盒)。
• 优点:系统级隔离(最强安全性)、高兼容性、符合设计规范。
• 缺点:资料、资源占用高。
• 适用:企业设备管理、高安全需求场景。
根据以上的优缺点以及风险点对比可知,选择利用Android的多用户机制实现应用双开最为合适,风险也是最小的。事实上,很多国内的手机厂商,小米、oppo等都是使用该技术方案实现应用双开。
2.2具体实现
2.1节中我们提到要实现应用双开功能,有几种实现方式,但基于实现难度,优缺点、风险点的综合考虑,我最终是选择基于Android多用户机制实现双开功能。那么接下来我就该方案进行详细解析。