Xposed--初始化一个 Xposed 模块
初始化一个 Xposed 模块
资料来源:
https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API
https://yuanfentiank789.github.io/2017/04/01/xposeddev/更新
1
220.03.04 初始化
22.03.15 更新部分内容
导语
- 算是个远古坑,写 MyPrivacy 时候就该填了.
- 虽然说 xposed 的作者
- 以计划中的 NoWakeLock 为例了.
创建 Xposed 模板
因为去年 jcenter 的关闭,xposed 的引入也有了一点变化:
- 在项目的
setting.gradle
修改repositories
:
1 | dependencyResolutionManagement { |
引入 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
11class 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 中搜索关键字应该就可以看到对应的打印了.
如果是 Lsposed 或者 edxposed 还需要设置作用域.