Xposed模块开发
- 有个进程叫做
Zygote这是Android运行环境的的核心。 - 每一个应用程序启动都是通过它
fork出来的。当手机被启动就会行 /init.rc这个脚本,这个进程会启动/system/bin/app_process然后他会调加载所需的类并调用初始化函数。 - 现在说说
Xposed什么时候开始启动。当您安装了Xposed,它会把修改的app_process可执行文件复制到/system/bin中。 - 这个修改过的启动进程增加了一个额外的
jar包到classpath路径,并在某些地方调用那里的方法。例如,在虚拟机刚刚创建后,在Zygote的main方法调用后。我们的jar包也可以Zygote里面工作。这个jar包位于:/data/data/de.robv.android.xposed.installer/bin/XposedBridge.jar和它的源代码可以在这里找到(Xposed模块)。 - 综观类
XposedBridge,你可以看到的main方法。这就是我上面写的,这个类会在进程启动之前被调用。在那时候执行一些初始化和模块的加载(我会在后面讲解模块的加载)。
自学推荐 :
基本用法
插件开发之二: Xposed一些知识
插件开发之三: 编写广告去除插件
Xposed系列之微信屏蔽拍一拍
开发文件 密码:GodXposed模块配置
Project--> app--> libs-->
XposedBridgeApi-82.jar添加
jar文件 右键Add as library添加到库Project -->app -->
build.gradleimage-20221013102255973.pngdependencies{ //在这里插入代码 //注意 IDA自动填写的要去掉 implementation : files('lib\\XposedBridgeApi-82.jar') //设置只编译不打包 compileOnly 'de.robv.android.xposed:api:82' }并删除
测试项Project --> app -->
src--> AndroidManifest.xml 添加以下三个
配置项<application ...... <meta-data android:name="xposedmodule" android:value="true" /> //让Xposed识别为模块 <meta-data android:name="xposedminversion" android:value="82" /> //最小支持Api版本 <meta-data android:name="xposeddescription" android:value="描述" /> //模块描述 </application>
- Project --> app -->
src--> main -->assets -->xposed_init
手动创建目录添加文件assets
里面写xposed启动函数入口 : Hook类的包名和类名
动态加载劫持
动态加载
DexXposedHelpers.findAndHookMethod - > Application.class, "attach", Context.class
动态加载
ClassXposedBridge.hookAllMethods -> ClassLoader.class, "loadClass"
ClassLoader
类加载器可以有很多个 , 都做着不同的事