interface XposedInterface 核心接口
Xposed 框架提供给模块操作应用进程的核心接口。
| 接口 | 描述 |
|---|---|
XposedInterface.Chain | 方法或构造函数的拦截器链 |
XposedInterface.CtorInvoker<T> | 构造函数的调用器 |
XposedInterface.ExceptionMode | Hook 异常处理模式枚举 |
XposedInterface.HookBuilder | Hook 配置构建器 |
XposedInterface.Hooker | Hooker 接口 |
XposedInterface.HookHandle | Hook 句柄 |
XposedInterface.Invoker<T,U> | 通用调用器 |
| 常量 | 值 | 描述 |
|---|---|---|
API_101 | 101 | 第一个 API 版本,且模块不能注入 zygote,只在作用域进程内加载。 |
LIB_API | 101 | 此库的 API 版本,模块应使用 getApiVersion() 检查运行时版本。 |
PROP_CAP_SYSTEM | 1<<0 | 框架有能力 Hook system_server 和其他系统进程。 |
PROP_CAP_REMOTE | 1<<1 | 框架提供远程配置和远程文件支持。 |
PROP_RT_API_PROTECTION | 1<<32 | 禁止通过反射或动态加载的代码访问 Xposed API。 |
PRIORITY_DEFAULT | 50 | 默认优先级 |
PRIORITY_LOWEST | 0 | 链末尾执行 |
PRIORITY_HIGHEST | 100 | 链开头执行 |
default int getApiVersion()获取运行时 Xposed API 版本。框架实现不应重写此方法。
@NonNull String getFrameworkName()获取当前 Xposed 框架实现的名称。
@NonNull String getFrameworkVersion()获取当前 Xposed 框架实现的版本字符串。
long getFrameworkVersionCode()获取当前 Xposed 框架实现的版本号(长整型)。
long getFrameworkProperties()获取 Xposed 框架属性 (PROP_CAP_* 和 PROP_RT_*)。
@NonNull HookBuilder hook(@NonNull Executable origin)Hook 一个普通方法或构造函数。
@NonNull HookBuilder hookClassInitializer(@NonNull Class<?> origin)Hook 类的静态初始化器 <clinit>。如果类已初始化,Hook 不会被调用。
boolean deoptimize(@NonNull Executable executable)去优化一个方法/构造函数,解决因内联导致 Hook 不生效的问题。
@NonNull Invoker<?, Method> getInvoker(@NonNull Method method)获取方法调用器(绕过访问检查,默认 FULL)。
@NonNull <T> CtorInvoker<T> getInvoker(@NonNull Constructor<T> constructor)获取构造函数调用器(绕过访问检查,默认 FULL)。
void log(int priority, @Nullable String tag, @NonNull String msg)向 Xposed 日志写入消息。
void log(int priority, @Nullable String tag, @NonNull String msg, @Nullable Throwable tr)向 Xposed 日志写入带异常的消息。
@NonNull ApplicationInfo getModuleApplicationInfo()获取模块自身的 ApplicationInfo。
@NonNull SharedPreferences getRemotePreferences(@NonNull String group)获取远程配置(在被 Hook 应用中只读)。支持 UnsupportedOperationException。
@NonNull String[] listRemoteFiles()列出模块共享数据目录下的所有文件。
@NonNull ParcelFileDescriptor openRemoteFile(@NonNull String name) throws FileNotFoundException只读方式打开模块共享文件,文件名不能包含路径分隔符和 . .. 。
interface XposedInterface.Chain
拦截器链,代表一次方法或构造函数的调用。Chain 对象不能跨线程共享,也不能在 intercept 结束后重用。
@NonNull Executable getExecutable()Object getThisObject() — 返回 this 指针(静态方法返回 null)@NonNull List<Object> getArgs() — 不可变的参数列表Object getArg(int index) throws IndexOutOfBoundsException, ClassCastExceptionObject proceed() throws Throwable — 使用相同 this 和参数继续链Object proceed(@NonNull Object[] args) throws Throwable — 替换参数继续链Object proceedWith(@NonNull Object thisObject) throws Throwable — 替换 this 继续链(静态不可用)Object proceedWith(@NonNull Object thisObject, @NonNull Object[] args) throws Throwable — 替换 this 和参数继续链interface XposedInterface.CtorInvoker<T>
构造函数专用调用器,继承自 Invoker。
@NonNull T newInstance(Object... args) throws InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException@NonNull <U> U newInstanceSpecial(@NonNull Class<U> subClass, Object... args) throws InvocationTargetException, IllegalArgumentException, IllegalAccessException, InstantiationException说明:newInstanceSpecial 会跳过子类构造器初始化,可能使子类字段未初始化,用于高级自定义初始化场景。
enum XposedInterface.ExceptionMode
Hook 异常处理模式。
DEFAULT — 遵循 module.prop 配置,默认 PROTECTIVE。PROTECTIVE — 捕获并记录 Hooker 异常,调用继续(推荐)。PASSTHROUGH — 异常直接传播给调用者(调试用)。interface XposedInterface.HookBuilder
HookBuilder setPriority(int priority) — 设置优先级HookBuilder setExceptionMode(@NonNull ExceptionMode mode) — 设置异常模式@NonNull HookHandle intercept(@NonNull Hooker hooker) — 安装 Hook,返回句柄interface XposedInterface.Hooker
Object intercept(@NonNull Chain chain) throws Throwable拦截方法/构造函数调用,通常调用 chain.proceed() 并返回结果。
interface XposedInterface.HookHandle
@NonNull Executable getExecutable()void unhook() — 取消 Hook,幂等。interface XposedInterface.Invoker<T,U>
T setType(@NonNull Type type) — 设置调用器类型Object invoke(Object thisObject, Object... args) throws InvocationTargetException, IllegalArgumentException, IllegalAccessExceptionObject invokeSpecial(@NonNull Object thisObject, Object... args) throws InvocationTargetException, IllegalArgumentException, IllegalAccessExceptioninterface XposedInterface.Invoker.Type
调用器类型的密封接口,有两个实现:
Type.Origin — 调用原始方法,跳过所有 Hook。常量 ORIGINType.Chain — 从中间执行,跳过优先级高于 maxPriority 的 Hook。常量 FULL (maxPriority = PRIORITY_HIGHEST)class XposedInterfaceWrapper
包装类,屏蔽框架实现细节。模块通常不直接使用。
public final void attachFramework(@NonNull XposedInterface base) — 模块不应调用。其他方法均委托给内部 XposedInterface 实例,行为同上。
abstract class XposedModule
所有模块入口类的基类,每个进程只实例化一次。继承自 XposedInterfaceWrapper 并实现 XposedModuleInterface。
interface XposedModuleInterface
default void onModuleLoaded(@NonNull ModuleLoadedParam param) — 模块加载到进程时调用(一次)@RequiresApi(29) default void onPackageLoaded(@NonNull PackageLoadedParam param) — 有代码的包加载时调用,默认 ClassLoader 就绪。default void onPackageReady(@NonNull PackageReadyParam param) — AppComponentFactory 实例化类加载器后调用。default void onSystemServerStarting(@NonNull SystemServerStartingParam param) — system_server 启动时调用(替代第一个包加载阶段)。ModuleLoadedParam — 提供 isSystemServer() 和 getProcessName()PackageLoadedParam — 提供 getPackageName(), getApplicationInfo(), isFirstPackage(), getDefaultClassLoader() (API 29+)PackageReadyParam — 继承 PackageLoadedParam,增加 getClassLoader() 和 getAppComponentFactory() (API 28+)SystemServerStartingParam — 提供 getClassLoader()class XposedFrameworkError extends Error
表示 Xposed 框架功能出现问题。
public XposedFrameworkError(String message)public XposedFrameworkError(String message, Throwable cause)public XposedFrameworkError(Throwable cause)class HookFailedError extends XposedFrameworkError
表示 Hook 因框架内部错误而失败。设计为 Error,模块不应尝试捕获,应向框架维护者报告。
public HookFailedError(String message)public HookFailedError(String message, Throwable cause)public HookFailedError(Throwable cause)