ARTICLE DETAIL

资讯详情

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

VirtualApp 沙盒多开全景图:五类进程 + 一套配置的最短跑通路径

VirtualApp 沙盒多开全景图:五类进程 + 一套配置的最短跑通路径 VirtualApp 沙盒多开全景图五类进程 一套配置的最短跑通路径【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualAppVirtualApp 是一个 Android 沙盒 / 应用多开框架它把宿主 App 变成虚拟机在内部安装、运行、多开第三方应用同时隔离数据、重定向文件 IO、接管系统服务。本文按「先懂进程模型 → 最短路径跑通 → 读懂配置 → 排错自查 → 进阶」的顺序帮你从零把功能跑起来。一、先建立运行时心智模型看懂 VirtualApp 进程模型在写任何集成代码之前先搞清楚一个事实VirtualApp 双开一个应用时系统里实际跑着不止一个进程。整个 VirtualApp 进程模型由五类进程组成各司其职进程职责你什么时候会碰到它主进程宿主 UI默认 32 位写宿主界面、调用 install/launch API插件进程承载 64 位目标应用的加载跑 64 位 App 时自动拉起虚拟应用进程真正运行被沙盒化的目标 App执行 Hook 与文件重定向调试目标 App 崩溃时服务端进程处理安装请求、管理虚拟应用、代理系统服务排查安装失败、Provider 异常其他子进程保活、推送等辅助任务一般无需关心初始化只发生在两个时机记住这个时序就不会把代码放错位置startup()必须在attachBaseContext阶段调用它负责启动引擎、初始化 IPC 总线、注入全部 Hook、修复 Contextinitialize()放在onCreate引擎会识别当前进程类型回调对应的初始化钩子。二、最短路径跑通从加依赖到启动虚拟应用下面六步是最小集成路径每步一句白话加一段最小代码照抄即可验证。第 1 步引入 lib 模块。沙盒能力全部在lib模块里app只是宿主示例。dependencies { implementation project(:lib) implementation com.android.support:appcompat-v7:25.4.0 }第 2 步写清身份与架构参数。这组 ext 参数是整个 VAConfig 配置的地基集中放在根工程或独立配置脚本里写法参考 doc/VADev.md。ext { PACKAGE_NAME com.yourcorp.sandbox EXT_PACKAGE_NAME com.yourcorp.sandbox.ext VA_MAIN_PACKAGE_32BIT true VA_ACCESS_PERMISSION_NAME com.yourcorp.sandbox.permission.GATE VA_AUTHORITY_PREFIX com.yourcorp.sandbox VA_EXT_AUTHORITY_PREFIX com.yourcorp.sandbox.ext VA_VERSION 1.0.0 }第 3 步声明保护权限并保持两侧一致。manifest 里用占位符引用${VA_ACCESS_PERMISSION_NAME}同时用manifestPlaceholders把第 2 步的值注入进来两边永远只改一处android { manifestPlaceholders [ VA_ACCESS_PERMISSION_NAME: rootProject.ext.VA_ACCESS_PERMISSION_NAME ] }第 4 步在 Application 里接住引擎。参考仓库自带的宿主实现 VApp.javaOverride protected void attachBaseContext(Context base) { super.attachBaseContext(base); VirtualCore.get().startup(base); // 引擎启动 Hook 注入 } Override public void onCreate() { super.onCreate(); VirtualCore.get().initialize(new VirtualCore.VirtualInitializer() { public void onMainProcess() { /* 仅主进程的初始化 */ } public void onVirtualProcess() { /* 沙盒应用进程初始化 */ } public void onServerProcess() { /* 服务端进程初始化 */ } }); }第 5 步安装一个目标应用。安装协议有两种package:走系统里已安装的目标 AppVirtualApp 双开模式file:直接吃 APK 文件独立安装模式目标设备没装过也能开。// 双开目标应用已装在设备上 VirtualCore.get().installPackage(Uri.parse(package: targetPkg), params); // 独立安装从文件直接装载 APK VirtualCore.get().installPackage(Uri.fromFile(apkPath), params); // 启动装好的虚拟应用第一个参数是 userId VActivityManager.get().launchApp(0, targetPkg);第 6 步验证。宿主启动 → 安装回调返回成功 → 目标 App 出现在你的应用列表里 → 点图标能进目标 App 首页。跑到这里最小闭环已经通了。三、读懂 VAConfig 配置按身份、架构、行为三组过一遍把所有参数按用途分成三组每个参数一行说清管什么 / 怎么填 / 填错会怎样。身份组决定你是谁PACKAGE_NAME宿主的包名必须全局唯一填了已存在的包名会被系统判为安装冲突。EXT_PACKAGE_NAME插件包身份约定在主包名后加.ext与主包脱钩会导致 64 位应用的加载链路找不到宿主。VA_AUTHORITY_PREFIX/VA_EXT_AUTHORITY_PREFIX主包与插件包 ContentProvider 的 authority 前缀必须全局唯一冲突的典型症状是Failed to find provider info。VA_ACCESS_PERMISSION_NAME组件间访问保护权限名必须与 manifest 声明逐字符一致靠第 3 步的占位符保证。架构组决定跑在哪VA_MAIN_PACKAGE_32BITtrue表示主包 32 位、插件包 64 位默认你的主包是 64 位就改成false否则 64 位目标应用起不来。VA_VERSION/VA_VERSION_CODE库内部版本管理一般不动。行为组SettingConfig里的运行时开关挑高频的isEnableIORedirect()默认true虚拟文件系统总闸关掉后沙盒应用会直接读写真实目录隔离形同虚设。isUseRealDataDir(pkg)默认false控制数据目录是否模拟真实路径格式。isAllowCreateShortcut()默认false是否允许为虚拟应用建桌面快捷方式。isEnableVirtualSdcardAndroidData()Android 11 及以上默认true外置存储重定向开关。onHandleLauncherIntent(intent)拦截桌面拉起的 Intent可重定向到你自己的首页。isDisableDrawOverlays(pkg)按包名禁用虚拟应用的悬浮窗权限做敏感应用管控时用它。参数之间的关联约束一张表看全参数关联约束填错后果PACKAGE_NAMEVA_AUTHORITY_PREFIX通常与其一致authority 与他人冲突Provider 查找失败EXT_PACKAGE_NAME跟随主包名加.ext插件进程与主进程身份错位VA_ACCESS_PERMISSION_NAME与 manifest 占位符严格一致组件互调被系统拒绝VA_MAIN_PACKAGE_32BIT必须与真实主包架构相符64 位应用无法加载四、踩坑与自查三类典型故障的定位方法先给一张 ⚠️ 排错表覆盖 90% 的集成期问题现象原因处理编译通过但运行时找不到 ProviderVA_AUTHORITY_PREFIX与他人重复或前缀不匹配改唯一前缀并同步 manifest 占位符权限拒绝 / 组件无法互调权限名在 gradle 与 manifest 两处不一致只保留占位符单一来源删掉硬编码64 位目标应用闪退或装不上VA_MAIN_PACKAGE_32BIT与实际架构不符主包为 64 位时改为false重新打包安装回调一直不返回目标包名写错或该进程没走服务端初始化核对包名检查onServerProcess是否执行场景要点企业多开。主包建议 64 位VA_MAIN_PACKAGE_32BIT false包名前缀按部门/产品线规划避免日后改名isAllowCreateShortcut按 IT 规范开关isDisableDrawOverlays对高敏应用统一禁用悬浮窗。场景要点游戏兼容。主包保持 32 位以覆盖更多老游戏优先保证isEnableIORedirect为true游戏存档多落在外置存储isEnableVirtualSdcardAndroidData不要关。场景要点发布到 Google Play。64 位主包 独立前缀全套自查一遍重点回归64 位应用闪退这一行。五、进阶方向从能跑到能控IO 重定向定制默认已开启若要对特定包放行真实路径在 SettingConfig 的目录类钩子里按包名分流实现见 VASettings。桌面快捷方式放开isAllowCreateShortcut后配合onHandleLauncherIntent重写跳转目标让用户从桌面直达你的宿主页面。悬浮窗与组件管控isDisableDrawOverlays之外onVirtualProcess回调里的 ComponentDelegate 还能伪造 IMEI、MAC 等设备信息宿主侧示例见 VApp.java。引擎级排障Hook 注入与进程分发的核心逻辑都在 VirtualCore 源码startup/initialize两阶段的内部动作可在这里逐行确认。下一步把第二节的六步贴进你的宿主工程装一个测试 APK 跑通 install 回调再对照第四节排错表逐项核对包名、authority 与权限名。【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualApp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表