Xposed--初始化一个 Xposed 模块

  • 初始化一个 Xposed 模块

  • 资料来源:

    https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API
    https://yuanfentiank789.github.io/2017/04/01/xposeddev/

  • 更新

    1
    20.03.04 初始化

导语

  • 算是个远古坑,写 MyPrivacy 时候就该填了.
  • 虽然说 xposed 的作者
  • 以计划中的 NoWakeLock 为例了.

创建 Xposed 模板

  • 引入 Xposed API: 这里是 Android Studio,在 app/build.gradle 中声明

    1
    2
    3
    4
    //Xposed
    compileOnly 'de.robv.android.xposed:api:82'
    //如果需要引入文档,方便查看的话
    compileOnly 'de.robv.android.xposed:api:82:sources'
  • 之后同步一下 gradle ,对于低版本的 Android Studio 还需要禁用 instant run.(高版本暂时没理清楚 instant run 的变动)

  • AndroidManifest.xml 声明,需要在 Application => Application Nodes 下面添加模块声明,这样 xposed 管理器才能获取到这个 moudle 的信息.声明有一个适配到最低的 xposed api 版本,这里是 53 ,保持默认即可.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <meta-data
    android:name="xposedmodule"
    android:value="true" />
    <meta-data
    android:name="xposeddescription"
    android:value="@string/xposeddescription" />
    <meta-data
    android:name="xposedminversion"
    android:value="53" />
  • 创建 xposed 入口,这里我创建了一个 XposedModule 类作为整个的入口.实现了两个接口打印 log 来确认已经成功加载模块.一个是在 Zygote 启动时,一个是在每个 APP 进程启动时.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class XposedModule : IXposedHookZygoteInit, IXposedHookLoadPackage {
    private val TAG = "Xposed.NoWakeLock "

    override fun initZygote(startupParam: StartupParam?) {
    XposedBridge.log(TAG + "initZygote")
    }

    override fun handleLoadPackage(lpparam: LoadPackageParam) {
    XposedBridge.log(TAG + lpparam.packageName)
    }
    }
  • 创建 Main/assets/xposed_init 文件,声明 xposed 载入的初始位置.

    1
    com.js.nowakelock.XposedHook.XposedModule
  • 最后安装模块在 xposed 框架中启用模块.重启手机,在 Logcat 中搜索关键字应该就可以看到对应的打印了.