接口 XposedInterface
- 所有已知实现类:
XposedInterfaceWrapper,XposedModule
public interface XposedInterface
用于模块在应用进程中进行操作的 Xposed 接口。
-
嵌套类概要
嵌套类修饰符和类型接口说明static interface方法或构造函数的拦截器链(Interceptor Chain)。static interface构造函数的 Invoker。static enumHooker 的异常处理模式。static interface用于配置 Hook 的构建器。static interface方法或构造函数的 Hooker(拦截器实现)。static interfaceHook 的句柄(Handle)。static interfaceXposedInterface.Invoker<T extends XposedInterface.Invoker<T,U>, U extends Executable> 方法或构造函数的 Invoker(调用器)。 -
字段概要
字段修饰符和类型字段说明static final int行为变更:所有模块 模块不能注入到 zygote; 它们只会在作用域(scope)对应的进程中加载。static final int此库的 API 版本。static final int默认的 Hook 优先级。static final int在拦截链的开头执行。static final int在拦截链的末尾执行。static final long该框架提供远程 Preferences(配置)以及远程文件支持。static final long该框架具备 Hook system_server 以及其他系统进程的能力。static final long该框架禁止通过反射或动态加载的代码访问 Xposed API。 -
方法概要
修饰符和类型方法说明booleandeoptimize(Executable executable) 对方法 / 构造函数进行去优化(deoptimize),用于解决由于内联优化导致 hook 失效的问题。default int获取运行时的 Xposed API 版本。获取当前实现的 Xposed 框架名称。long获取 Xposed 框架的属性。获取当前实现的 Xposed 框架版本。long获取当前实现的 Xposed 框架版本号(version code)。<T> XposedInterface.CtorInvoker<T> getInvoker(Constructor<T> constructor) 获取指定构造函数的调用器(invoker)。getInvoker(Method method) 获取指定方法的调用器(invoker)。获取该模块的应用信息。getRemotePreferences(String group) 获取存储在 Xposed 框架中的远程偏好设置。hook(Executable origin) Hook 一个方法 / 构造函数。hookClassInitializer(Class<?> origin) Hook 一个类的静态初始化方法(<clinit>)。String[]列出模块共享数据目录中的所有文件。void向 Xposed 日志中写入一条消息。void向 Xposed 日志中写入一条消息。openRemoteFile(String name) 打开模块共享数据目录中的文件。
-
字段详细资料
-
API_101
static final int API_101行为变更:所有模块- 模块不能注入到 zygote; 它们只会在作用域(scope)对应的进程中加载。
- 这是第一个 API 版本。
- 另请参阅:
-
LIB_API
static final int LIB_API此库的 API 版本。 对于框架来说,这是一个静态值。 模块应使用getApiVersion()在运行时检查 API 版本。- 另请参阅:
-
PROP_CAP_SYSTEM
static final long PROP_CAP_SYSTEM该框架具备 Hook system_server 以及其他系统进程的能力。- 另请参阅:
-
PROP_CAP_REMOTE
static final long PROP_CAP_REMOTE该框架提供远程 Preferences(配置)以及远程文件支持。- 另请参阅:
-
PROP_RT_API_PROTECTION
static final long PROP_RT_API_PROTECTION该框架禁止通过反射或动态加载的代码访问 Xposed API。- 另请参阅:
-
PRIORITY_DEFAULT
static final int PRIORITY_DEFAULT默认的 Hook 优先级。- 另请参阅:
-
PRIORITY_LOWEST
static final int PRIORITY_LOWEST在拦截链的末尾执行。- 另请参阅:
-
PRIORITY_HIGHEST
static final int PRIORITY_HIGHEST在拦截链的开头执行。- 另请参阅:
-
-
方法详细资料
-
getApiVersion
default int getApiVersion()获取运行时的 Xposed API 版本。框架实现不得重写此方法。 -
getFrameworkName
获取当前实现的 Xposed 框架名称。 -
getFrameworkVersion
获取当前实现的 Xposed 框架版本。 -
getFrameworkVersionCode
long getFrameworkVersionCode()获取当前实现的 Xposed 框架版本号(version code)。 -
getFrameworkProperties
long getFrameworkProperties()获取 Xposed 框架的属性。 带有前缀PROP_RT_的属性可能会在不同的启动之间发生变化。 -
hook
Hook 一个方法 / 构造函数。- 参数:
origin- 要被 hook 的可执行对象- 返回:
- 用于构建 hook 的构建器
-
hookClassInitializer
Hook 一个类的静态初始化方法(<clinit>)。静态初始化方法会被当作一个普通的
static void()无参方法处理。 因此,在传递给 hooker 的XposedInterface.Chain中:XposedInterface.Chain.getExecutable()返回一个用于表示静态初始化方法的“合成”Method。XposedInterface.Chain.getThisObject()始终返回null。XposedInterface.Chain.getArgs()返回空列表。XposedInterface.Chain.proceed()返回null。
注意:如果该类已经完成初始化,则该 hook 永远不会被触发。
- 参数:
origin- 要 hook 的目标类(其静态初始化方法)- 返回:
- 用于构建 hook 的构建器
-
deoptimize
对方法 / 构造函数进行去优化(deoptimize),用于解决由于内联优化导致 hook 失效的问题。通过去优化该方法,运行时将回退到“不进行内联”的调用方式,从而确保所有被调用的方法都会以真实调用的形式执行。 例如,当方法 A 内联了一个较短的方法 B 时,即使你 hook 了 B,也可能不会触发回调。 这时可以对 A 进行去优化,使 A 必须通过真实调用方式调用 B,从而使 hook 生效。
通常情况下,你需要找到所有调用该方法(callee)的调用者,但这在实践中很难做到 (不过可以使用 DexKit 来搜索调用关系)。 建议仅在确定影响范围可控时使用该方法,否则更好的方案是调整 hook 点, 或者通过重新安装应用(不卸载直接覆盖安装)来整体触发去优化。
- 参数:
executable- 要进行去优化的方法 / 构造函数- 返回:
- 表示是否成功完成去优化操作
-
getInvoker
获取指定方法的调用器(invoker)。通过该调用器进行的方法调用将绕过访问权限检查。 默认的调用器类型为XposedInterface.Invoker.Type.Chain.FULL。- 参数:
method- 要获取调用器的目标方法- 返回:
- 该方法的调用器
-
getInvoker
获取指定构造函数的调用器(invoker)。通过该调用器进行的调用将绕过访问权限检查。 默认的调用器类型为XposedInterface.Invoker.Type.Chain.FULL。- 类型参数:
T- 构造函数对应的类型- 参数:
constructor- 要获取调用器的构造函数- 返回:
- 该构造函数的调用器
-
log
向 Xposed 日志中写入一条消息。- 参数:
priority- 日志优先级,请参见Logtag- 日志标签msg- 日志消息内容
-
log
向 Xposed 日志中写入一条消息。- 参数:
priority- 日志优先级,请参见Logtag- 日志标签msg- 日志消息内容tr- 要记录的异常
-
getModuleApplicationInfo
获取该模块的应用信息。 -
getRemotePreferences
获取存储在 Xposed 框架中的远程偏好设置。请注意,这些设置在已 Hook 的应用中是只读的。- 参数:
group- 组名- 返回:
- 偏好设置
- 抛出:
UnsupportedOperationException- 如果该框架是嵌入式实现,则抛出此异常
-
listRemoteFiles
列出模块共享数据目录中的所有文件。- 返回:
- 文件列表
- 抛出:
UnsupportedOperationException- 如果该框架是嵌入式实现,则抛出此异常
-
openRemoteFile
打开模块共享数据目录中的文件。该文件以只读模式打开。- 参数:
name- 文件名,不能包含路径分隔符以及 . 或 ..- 返回:
- 文件描述符
- 抛出:
FileNotFoundException- 如果文件不存在或路径被禁止UnsupportedOperationException- 如果该框架是嵌入式实现,则抛出此异常
-