Skip to content

反射镜像 mirror ​

mirror 是 Android 隐藏 API 的类型安全反射镜像。mirror.android.app.ActivityThread 镜像真实 android.app.ActivityThread,把隐藏字段/方法包装成普通静态字段访问。详见 反射框架 mirror。

工作原理 ​

RefClass.load(影子类, 真实类名) 扫描影子类的静态字段,按字段类型(RefMethod/RefObject/RefInt...)实例化引用对象,绑定到真实类的同名成员。

子包镜像映射 ​

mirror 按真实 Android 包结构组织,共 ~120 个文件:

mirror 子包真实包文件数镜像的典型类
android/contentandroid.content40ClipboardManager/ContentProvider
android/appandroid.app37ActivityThread/ActivityManagerNative/LoadedApk
android/osandroid.os16ServiceManager/Build/Handler
android/viewandroid.view9ViewRootImpl/WindowManagerImpl
android/telephonyandroid.telephony7TelephonyManager
android/netandroid.net6NetworkInfo
android/mediaandroid.media5AudioRecord/Camera
android/locationandroid.location4LocationManager
android/hardwareandroid.hardware4Camera/SensorManager
rms / rms/resourceandroid.rms3资源管理(见其他子包)
其他widget/webkit/ddm/util/service/renderscript/providers/graphics/bluetooth/accounts各 1-2—
com/android/internal/*com.android.internal.*~15内部框架类
dalvik/system java/lang libcore/io对应包~5DexFile/Libcore
mirror/android/security/net/config安全配置——

版本化镜像类

清单里会出现 IActivityManagerN、IActivityManagerL、ActivityManagerNativeOreo 这类带版本后缀的类——同一个真实类在不同 Android 版本方法集不同,按版本拆成多个影子类,运行时由 hook 代码按 BuildCompat 选正确版本。详见 Ref 引用框架。

引用类型 ​

类型用途用法
RefMethod<T>实例方法ref.call(obj, args...)
RefStaticMethod<T>静态方法ref.call(args...)
RefObject<T>实例字段ref.get(obj) / ref.set(obj, val)
RefStaticObject<T>静态字段ref.get() / ref.set(val)
RefInt/RefLong/...基本类型字段ref.get(obj)
RefConstructor<T>构造方法ref.newInstance(args...)

各子包文档见下方。完整类清单请直接对照源码目录。

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