接口 XposedInterface

所有已知实现类:
XposedInterfaceWrapper, XposedModule

public interface XposedInterface
用于模块在应用进程中进行操作的 Xposed 接口。
  • 字段详细资料

    • API_101

      static final int API_101
      行为变更:所有模块
      • 模块不能注入到 zygote; 它们只会在作用域(scope)对应的进程中加载。
      行为变更:目标 API 版本为 101 或更高的模块
      • 这是第一个 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

      @NonNull String getFrameworkName()
      获取当前实现的 Xposed 框架名称。
    • getFrameworkVersion

      @NonNull String getFrameworkVersion()
      获取当前实现的 Xposed 框架版本。
    • getFrameworkVersionCode

      long getFrameworkVersionCode()
      获取当前实现的 Xposed 框架版本号(version code)。
    • getFrameworkProperties

      long getFrameworkProperties()
      获取 Xposed 框架的属性。 带有前缀 PROP_RT_ 的属性可能会在不同的启动之间发生变化。
    • hook

      @NonNull XposedInterface.HookBuilder hook(@NonNull Executable origin)
      Hook 一个方法 / 构造函数。
      参数:
      origin - 要被 hook 的可执行对象
      返回:
      用于构建 hook 的构建器
    • hookClassInitializer

      @NonNull XposedInterface.HookBuilder hookClassInitializer(@NonNull Class<?> origin)
      Hook 一个类的静态初始化方法(<clinit>)。

      静态初始化方法会被当作一个普通的 static void() 无参方法处理。 因此,在传递给 hooker 的 XposedInterface.Chain 中:

      注意:如果该类已经完成初始化,则该 hook 永远不会被触发。

      参数:
      origin - 要 hook 的目标类(其静态初始化方法)
      返回:
      用于构建 hook 的构建器
    • deoptimize

      boolean deoptimize(@NonNull Executable executable)
      对方法 / 构造函数进行去优化(deoptimize),用于解决由于内联优化导致 hook 失效的问题。

      通过去优化该方法,运行时将回退到“不进行内联”的调用方式,从而确保所有被调用的方法都会以真实调用的形式执行。 例如,当方法 A 内联了一个较短的方法 B 时,即使你 hook 了 B,也可能不会触发回调。 这时可以对 A 进行去优化,使 A 必须通过真实调用方式调用 B,从而使 hook 生效。

      通常情况下,你需要找到所有调用该方法(callee)的调用者,但这在实践中很难做到 (不过可以使用 DexKit 来搜索调用关系)。 建议仅在确定影响范围可控时使用该方法,否则更好的方案是调整 hook 点, 或者通过重新安装应用(不卸载直接覆盖安装)来整体触发去优化。

      参数:
      executable - 要进行去优化的方法 / 构造函数
      返回:
      表示是否成功完成去优化操作
    • getInvoker

      @NonNull XposedInterface.Invoker<?,Method> getInvoker(@NonNull Method method)
      获取指定方法的调用器(invoker)。通过该调用器进行的方法调用将绕过访问权限检查。 默认的调用器类型为 XposedInterface.Invoker.Type.Chain.FULL
      参数:
      method - 要获取调用器的目标方法
      返回:
      该方法的调用器
    • getInvoker

      @NonNull <T> XposedInterface.CtorInvoker<T> getInvoker(@NonNull Constructor<T> constructor)
      获取指定构造函数的调用器(invoker)。通过该调用器进行的调用将绕过访问权限检查。 默认的调用器类型为 XposedInterface.Invoker.Type.Chain.FULL
      类型参数:
      T - 构造函数对应的类型
      参数:
      constructor - 要获取调用器的构造函数
      返回:
      该构造函数的调用器
    • log

      void log(int priority, @Nullable String tag, @NonNull String msg)
      向 Xposed 日志中写入一条消息。
      参数:
      priority - 日志优先级,请参见 Log
      tag - 日志标签
      msg - 日志消息内容
    • log

      void log(int priority, @Nullable String tag, @NonNull String msg, @Nullable Throwable tr)
      向 Xposed 日志中写入一条消息。
      参数:
      priority - 日志优先级,请参见 Log
      tag - 日志标签
      msg - 日志消息内容
      tr - 要记录的异常
    • getModuleApplicationInfo

      @NonNull ApplicationInfo getModuleApplicationInfo()
      获取该模块的应用信息。
    • getRemotePreferences

      @NonNull SharedPreferences getRemotePreferences(@NonNull String group)
      获取存储在 Xposed 框架中的远程偏好设置。请注意,这些设置在已 Hook 的应用中是只读的。
      参数:
      group - 组名
      返回:
      偏好设置
      抛出:
      UnsupportedOperationException - 如果该框架是嵌入式实现,则抛出此异常
    • listRemoteFiles

      @NonNull String[] listRemoteFiles()
      列出模块共享数据目录中的所有文件。
      返回:
      文件列表
      抛出:
      UnsupportedOperationException - 如果该框架是嵌入式实现,则抛出此异常
    • openRemoteFile

      @NonNull ParcelFileDescriptor openRemoteFile(@NonNull String name) throws FileNotFoundException
      打开模块共享数据目录中的文件。该文件以只读模式打开。
      参数:
      name - 文件名,不能包含路径分隔符以及 . 或 ..
      返回:
      文件描述符
      抛出:
      FileNotFoundException - 如果文件不存在或路径被禁止
      UnsupportedOperationException - 如果该框架是嵌入式实现,则抛出此异常