ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

VirtualApp:Android应用多开的 5 个常见场景与上手路径

VirtualApp:Android应用多开的 5 个常见场景与上手路径 VirtualAppAndroid应用多开的 5 个常见场景与上手路径【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualAppVirtualApp简称 VA是一个运行在 Android 上的轻量级沙盒框架它把其他应用当作虚拟应用装进你自己的 App 里运行从而在不 Root、不二次打包的前提下实现应用多开、数据隔离与运行时行为控制。本文讲清它的原理、环境要求和从零跑起来的路径以及常见问题的排查方法。 它是什么Android 上安装应用必须经过系统安装流程系统才会接纳。而 VirtualApp 里的应用并没有真正装进系统所以它的核心思路是让系统以为装过了VA 在虚拟应用与 Android 系统框架之间架了一层代理虚拟应用发出的请求包名、uid 等参数先被改写成宿主 App 的参数再放行返回时再还原。虚拟应用以为自己在和系统正常交互实际跑在 VA 自己的框架上。整体分三层VA Space 提供隔离的存储空间每个虚拟应用有独立数据目录VA Framework 是核心负责拦截并代理系统服务调用VA Native 处理底层文件 IO 重定向和 JNI 函数 Hook。VirtualApp 的 VA Space、VA Framework、VA Native 三层架构 它能帮你做什么应用双开/多开同一部手机运行同一个应用的两套账号数据互不干扰这是最典型场景。小游戏合集、插件化分发把 apk 从文件直接装进沙盒运行用户不用走系统安装确认体验接近小程序。移动安全隔离在 App 内建一个独立空间把工作与个人数据分开基于 Hook 能力可进一步做行为审计、数据防泄漏。免 Root 运行时控制开源版自带 Java 与 Native Hook 框架虚拟应用启动后即可注入逻辑、修改其行为不需要改应用源码。兼容与安全测试目标应用以为自己装在系统里你可以观察它的权限申请、文件访问等行为方便测试分析。⚙️ 开始之前的准备环境要求环境项要求Android 系统5.0 及以上支持 32 位与 64 位应用CPU 架构ARM 32/64 与 x86开发环境Android Studio JDK工程用 Gradle 构建宿主应用需要一个自研 App 做宿主要同时跑 32/64 位应用需主包与插件包配套安装权限声明宿主 AndroidManifest 中声明自定义权限名称与配置文件保持一致一点说明GitHub 上的开源版是 2017 年的快照更高 Android 版本如 14.0 及以上的兼容更新在商业版中。动手前请先确认你基于哪份代码评估兼容性。 从零跑起来首次安装步骤1. 获取源码git clone https://gitcode.com/GitHub_Trending/vi/VirtualApp用 Android Studio 打开 VirtualApp 目录工程包含:lib核心库与:app示例宿主应用两个模块。2. 修改宿主包配置把工程配置文件官方文档中称 VAConfig.gradle里的包名、权限名、ContentProvider 的 authority 改成你自己的值确保不与同设备上的其他应用冲突。VirtualApp 主配置文件主包与插件包包名、权限名等配置项3. 初始化 VA 引擎在宿主 App 的 Application 中调用 startup 启动引擎Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); VirtualCore.get().startup(base, mConfig); // 启动 VA 引擎 }mConfig是一个SettingConfig对象需要填主包名、插件包名、是否开启 IO 重定向等。4. 安装并启动虚拟应用基础使用只需要两个 API// 克隆系统已安装的应用等效双开 VirtualCore.get().installPackage(Uri.parse(package:com.example.app), params); // 启动虚拟应用0 为 userId VActivityManager.get().launchApp(0, com.example.app);如果不想让外部有已安装版本可以把 Uri 换成本地 apk 文件路径ap k 会被复制进沙盒独立运行。 进阶用法案例一免 Root 的行为 HookVA 内置了一套 Xposed 风格的接口并提供应用启动时的AppCallback回调可以在虚拟应用创建前后挂接自己的逻辑// 在虚拟进程初始化时注册回调 virtualCore.setAppCallback(new AppCallback() { public void beforeApplicationCreate(String pkg, String proc, Application app) { XposedHelpers.findAndHookMethod(android.app.ContextImpl, app.getClassLoader(), getOpPackageName, p - p.setResult(VirtualCore.get().getHostPkg())); } // 其余两个回调方法省略 });Hook 的作用范围仅限沙盒内的虚拟应用不会波及系统或外部其他应用。案例二IO 重定向与多进程架构虚拟应用如果写死绝对路径访问文件该路径在系统中并不存在VA Native 层会把这类读写重定向到沙盒内部空间。运行时 VA 共有五类进程要同时支持 32 位和 64 位应用需要主包加插件包两个包其中插件包只含加载主包的代码基本不需要维护。VirtualApp 运行时的五类进程宿主主进程、插件进程、虚拟应用进程、Server 进程等️ 遇到问题怎么排查常见报错排查问克隆进沙盒的应用闪退或打不开多数是兼容性问题开源版停在 2017 年高版本系统 API 变化较大先用 logcat 看崩溃堆栈确认是哪个系统服务调用失败带加固、反虚拟化检测的应用失败率更高。若必须在更新的系统版本上运行开源快照的兼容性有限。问虚拟应用的数据存在哪里怎么备份每个虚拟应用在沙盒内有独立数据目录默认位于宿主 App 目录下的virtual/data/user/0/目标包名路径。备份用adb pull把整个目录拉出来即可。问安装后应用不显示或启动失败检查两处配置里的宿主包名、权限名、ContentProvider authority 是否与设备上的其他应用重复主包与插件包是否都装了只装主包时另一种 ABI 的应用跑不起来。问虚拟应用里的权限弹窗和系统信息是不是真实的不是。虚拟应用的权限请求与系统信息请求都经过 VA 框架拦截拿到的是模拟信息和沙盒空间。这正是行为审计、数据管控这类能力的基础。问某个系统服务的代理实现在源码哪里com.lody.virtual.client包是虚拟应用进程侧的 Hook 端com.lody.virtual.server包处理安装等不交给系统的请求mirror包是系统隐藏类的引用工具。英文开发文档对每个目录都有说明。 进一步学习doc/VADev.md中文开发文档doc/VADev_eng.md英文开发文档含 SDK API 与源码目录说明VirtualApp/lib/src/main/java/com/lody/virtual/核心库源码client、server、ipcbus 等VirtualApp/lib/src/main/jni/Native 层源码IO 重定向、Hook 框架VirtualApp/app/src/main/java/io/virtualapp/示例宿主应用VirtualApp 适合需要在自己 App 内嵌沙盒能力、并愿意投入时间读框架源码的团队多开、数据隔离、行为控制如果你只想要一个开箱即用的多开工具或者目标运行在较新的系统版本上请先评估开源快照的兼容成本再决定是否采用。【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualApp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表