ARTICLE DETAIL

资讯详情

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

VirtualApp 安卓沙盒多开实战教程:从读懂架构到提交第一个贡献的完整指南

VirtualApp 安卓沙盒多开实战教程:从读懂架构到提交第一个贡献的完整指南 VirtualApp 安卓沙盒多开实战教程从读懂架构到提交第一个贡献的完整指南【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualAppVirtualApp 是一款运行在 Android 上的沙盒引擎轻量级「Android 虚拟机」让未安装到系统的 App 也能在容器内运行实现应用双开、多开与移动办公数据隔离。参与它的开发你将直接上手 Android Framework Hook拦截并替换系统方法、IO 重定向与 Native Hook 等底层技术是从 Java 层走向系统底层的高价值练手项目。️ 项目全景三层技术架构与模块地图VirtualApp 的核心思路是「欺骗」系统VA 内部的 App 并没有真正安装到 Android 系统Framework 层拦截其全部系统请求、改写参数后放行再在返回时还原App 便能在沙盒内跑通。整个技术栈分三层VA Space提供系统隔离的内部空间存放安装在容器内的 AppVA Framework核心代理层拦截并修改虚拟 App 与 Android 系统之间的所有请求VA NativeNative 层 Hook完成 IO 重定向把 App 写死的绝对路径转向沙盒内路径和 JNI 函数拦截仓库采用 Gradle 多模块结构核心模块如下模块/目录一句话职责示例主包 appDemo 宿主 App演示如何集成并调用 VA 的三大 API核心库 libVA 全部框架代码client Hook、server 服务端、mirror 反射工具Native 层 jni沙盒文件系统Foundation、Hook 框架HookZz、Substrate、fbjni开发文档 doc源码结构说明 SDK 使用指南读代码前的最佳入口VirtualApp 三层技术架构图VA Space、VA Framework 与 VA Native 的分工关系️ 环境搭建克隆、构建到首次运行的最小路径先说明一句实话仓库公开代码停留在早期版本构建脚本使用 Gradle 4.1 AGP 3.0.1建议使用较老的 Android Studio如 3.x 系列或 JDK 8 环境编译新版 IDE 直接打开大概率报错这本身就是很好的版本适配练习素材。git clone https://gitcode.com/GitHub_Trending/vi/VirtualApp cd VirtualApp/VirtualApp ./gradlew :app:assembleDebug构建产物在app/build/outputs/apk/安装到设备后启动即可在首页克隆外部已安装的 App如微信、QQ并在沙盒内打开。影响「能不能跑起来」的关键配置只有三处app/build.gradle 中的applicationId io.virtualapp宿主包名插件包必须与其匹配改了包名要同步改 ManifestVApp.java 中VASettings.ENABLE_IO_REDIRECT trueIO 重定向开关关闭后文件隔离失效部分 App 会打不开minSdkVersion 15/targetSdkVersion 22Demo 面向老版本 Android真机测试建议同时覆盖 Android 8 与 12 两台设备 代码地图五类进程中谁在哪个包里干活VA 运行时涉及 5 类进程VA Host Main主包 UI 进程、VA Host Plugin64 位插件包进程、VAPP Client虚拟 App 进程、VA Server处理安装等不交给系统的请求、CHILD保活等其他子进程。VirtualApp 五类进程架构图主包、插件包、VAPP Client 与 VA Server 的协作关系按「看哪个包做什么事」来定位代码建议顺序如下包路径运行进程职责com.lody.virtual.clientVAPP Client各系统 Service 的 Hook 与代理hook/proxies/下按 am、pm、notification 等分目录com.lody.virtual.serverVA ServerApp 安装、包管理pm/、活动调度am/等虚拟系统服务mirror全部对系统隐藏类的静态反射引用是减少反射代码的工具层jni 目录VAPP Client沙盒文件系统SandboxFs、IO 重定向与 ARM/X86 的 Hook 实现DelegateApplication64Bit.javaVA Host Plugin插件包加载主包代码的入口插件包通过 DelegateApplication 加载主包代码的进程结构一个实用技巧遇到「某系统 API 在沙盒里行为不对」先按包名在client/hook/proxies/下找到对应 Service 的 Stub 类再看mirror下对应版本分支类如IActivityManagerN.java对应 Android 8.0问题范围能立刻缩小一半。 实战演练用三步 API 完成你的第一个任务你的第一个贡献任务不妨就选「跑通安装—启动—卸载全链路并写一份可复现的验证记录」。VA 屏蔽了复杂细节三个 API 即可完成基础使用。第一步在宿主 Application 中启动引擎。可对照 VApp.java 的写法Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); VASettings.ENABLE_IO_REDIRECT true; VirtualCore.get().startup(base); }第二步安装并启动目标 App// 双开外部已安装的应用package 协议 VAppInstallerParams params new VAppInstallerParams(VAppInstallerParams.FLAG_INSTALL_OVERRIDE_NO_CHECK); VirtualCore.get().installPackage( Uri.parse(package:com.tencent.mobileqq), params); // 启动 / 卸载 VActivityManager.get().launchApp(0, com.tencent.mobileqq); VirtualCore.get().uninstallPackageAsUser(com.tencent.mobileqq, 0);注意package协议是「双开」跟随外部版本升级/卸载file协议则是把 APK 拷入容器内部安装的「免安装」模式二者对应PackageSetting中dynamic标志的不同取值理解这个区别是后续排查安装类 Bug 的基础。做完这一步你具备了独立复现任何「App 装不上 / 打不开」问题的能力——而这正是该项目最高频的贡献场景。 从 Issue 到 PR贡献流程与提交前自检清单完整链路建议按四步走认领在 Issues 列表中挑选带明确崩溃日志含 Android 版本、App 包名与版本的问题先在本地复现并定位到具体 Hook 或代理类编码遵循项目既有风格——Java 侧优先复用mirror包的静态引用而非裸反射Native 侧改动保持 ARM32/64 与 X86 多架构同步自测至少覆盖一个低版本8.x 及以下与一个高版本12 及以上设备并回归「启动主包 → 克隆 App → 杀进程重启」主链路提交分支名用fix/或feat/前缀如fix/pm-query-crash提交信息写清「现象—根因—修改点」三要素提交前自检清单改动未破坏client与server两端参数改写的对称性请求改了什么返回就要还原什么新增系统 API 处理时检查mirror下是否已有对应版本的隐藏类引用可复用32 位主包与 64 位插件包路径均验证通过无VLog之外的调试输出残留日志带统一 tag本地assembleDebug全量编译通过 高频贡献场景兼容性适配、Hook 修复与文档补全新 Android 版本适配系统升级后大量 API 参数变化是最高频的问题来源。思路是拿到崩溃堆栈定位到mirror中缺失的版本分支类如 N 与 O 之间的差异补上字段引用并在对应 Stub 中处理。特定 App 打不开的 Hook 修复先判断卡在哪一层——Framework 层请求被拦下看client/hook/proxies/路径找不到则是 IO 重定向问题去看Foundation/SandboxFs与VMPatch。文档补全仓库文档以 doc/VADev.md 为核心其中部分截图引用的是外部链接替换为仓库内图片、补全模块说明都是低风险且容易合并的贡献。 社区协作与贡献者成长阶梯问题与讨论主要通过仓库的 Issues 区进行提交 Bug 时附上 Android 版本、设备、目标 App 版本和完整 logcat维护者与社区才能快速判断对已有 Issue 补充复现信息同样是有效贡献。成长路径可以分三步走初级修复一个空指针或补齐一个缺失的 Stub 方法熟悉 client/server/mirror 三层分工中级独立完成某 App 或某 Android 版本的适配能自主判断问题在 Java 层还是 Native 层高级主导一个子系统如 IO 重定向或包安装流程的改造参与架构级讨论这个项目的价值在于它把 Android 系统最底层的 Framework 代理、沙盒隔离与 Native Hook 技术完整摊开在源码里。无论你最终提交的是一个小修复还是一份文档亲手让一个未安装的 App 在沙盒中跑起来的那一刻你对 Android 运行时的理解就已经和大多数开发者不同了。【免费下载链接】VirtualAppVirtual Engine for Android(Support 14.0 in business version)项目地址: https://gitcode.com/GitHub_Trending/vi/VirtualApp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表