Skip to content

client/fixer · 修复器 ​

修复目标 App 对 Android 框架内部状态的误判,共 3 个文件。目标 App 跑在虚拟进程里,很多框架对象(Context/ApplicationInfo/Activity)是宿主的,字段值不对,需要修复器校正。

文件组成 ​

文件职责
ContextFixer.java修复 Context 的包名/资源/ClassLoader/AttributionSource
ActivityFixer.java修复 Activity 的 ApplicationInfo/资源
ComponentFixer.java修复组件(Service/Provider)的类名与信息

修复方法清单 ​

从源码提取的静态修复入口:

类方法修复内容
ContextFixerfixContext(Context)改 Context 的 mPackageInfo/applicationInfo.packageName/资源/ClassLoader 为目标 App
ContextFixerfixAttributionSource(attr, pkg, uid)修正 AttributionSource 链上的包名与 uid(Android 10+)
ActivityFixerfixActivity(Activity)改 Activity 的 ApplicationInfo/资源指向目标 App
ComponentFixerfixComponentClassName(pkgName, className)修正组件类名的包名前缀
ComponentFixerfixComponentInfo(PackageSetting, ComponentInfo, userId)按用户修正 ComponentInfo 的 name/packageName

核心机制 ​

bindApplication 后,目标 App 拿到的 Context 实际是宿主的——ContextFixer 把 mBase/mPackageInfo/applicationInfo.packageName 等字段改成目标 App 的值,让目标 App 以为 Context 是自己的。

基于 VirtualApp 与 epic,仅供学习研究。VirtualApp 禁止商用。