一、什么是Xposed
Xposed Framework 为来自国外XDA论坛(forum.xda-developers.com)的rovo89自行开发的一个开源的安卓系统框架。
它是一款特殊的安卓App,其主要功能是提供一个新的应用平台,玩家们安装Xposed框架后,就能够通过Xposed框架搭建起的平台安装更多系统级的应用,实现诸多神奇的功能。
Xposed框架的原理是修改系统文件,替换了/system/bin/app_process可执行文件,在启动Zygote时加载额外的jar文件(/data/data/de.robv.androID.xposed.installer/bin/XposedBrIDge.jar),并执行一些初始化 *** 作(执行XposedBrIDge的main方法)。然后我们就可以在这个Zygote上下文中进行某些hook *** 作。
Github开源地址: https://github.com/rovo89/Xposed
二、安装Xposed
手机必须先Root,5.0以上通用安装方法(ps: V80仅支持AndroID 5.以上)
安装apk
在Recovery刷入对应的zip包
ps: 必须了解自己当前系统的cpu版本和系统版本:
sdkXX (XX 代表安卓系统版本,sdk21代表5.0系统,sdk22代表5.1系统,sdk23代表6.0系统)
arm## (## 代表cpu版本,arm代表32位cpu ,arm64代表64位cpu)
官方下载:
http://forum.xda-developers.com/showthread.PHP?t=3034811
网盘下载:
http://pan.baIDu.com/s/1bpxEMh5 密码:wm7a
三、编写Xposed插件
IDe利用AndroIDStudio
先编写被劫持的测试app
测试劫持一个app的方法,先写一个app,这个app很简单,点击按钮,显示天平。
1. 创建插件项目
这里创建TestXposed一个
2. 导入Xposed的API库
方法1:
AndroID Studio的依赖:
repositorIEs {
jcenter();
}
dependencIEs {
provIDed 'de.robv.androID.xposed:API:82'
}
1
2
3
4
5
6
7
方法2: 下载jar包
地址: https://bintray.com/rovo89/de.robv.androID.xposed/API
Download有两个jar包:
API-82-sources.jar: 包含源码的
API-82.jar: 不包含源码
下载API-82.jar,复制到AndroID Studio的module的libs目录下,右键Add as library
修改依赖方式compile files修改为provIDedfiles,原因是Xposed里已有该jar包内容,再次打包进去会冲突。
dependencIEs {
provIDed filetree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.androID.support:appcompat-v7:24.2.1'
}
1
2
3
4
5
ps: 上面那个修改很重要,不修改就会导致handleLoadPackage没有回调。
3. 修改AndroIDManifest.xml文件
在Application标签里面加三个Meta-data
<!-- 是否是xposed模块,xposed根据这个来判断是否是模块 -->
<Meta-data
androID:name="xposedmodule"
androID:value="true" />
<!-- 模块描述,显示在xposed模块列表那里第二行 -->
<Meta-data
androID:name="xposeddescription"
androID:value="测试Xposed模块" />
<!-- 最低xposed版本号(lib文件名可知) -->
<Meta-data
androID:name="xposedminversion"
androID:value="30" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
4. 编写hook类
创建一个类,实现IXposedHookLoadPackage接口,重写handleLoadPackage方法,我这里创建了一个Main类。
5. 创建xposed_init文件
在main目录下创建assets目录,在assets目录下创建xposed_init文件,不要后缀名。这个就是模块的入口,只有一行代码,就是说明入口类
6.运行结果
运作安装刚刚编写的插件,打开Xposed,勾选刚刚安装的插件。重启手机。
打开测试程序,点击按钮就能发现文字不是天平了
ok,基本模型搭建成功。
四、Xposed怎么样工作
写完demo,梳理一下Xposed的工作过程:
开机时, ./init.rc 脚本文件会启动 Zygote 进程,Zygote对应的具体程序是 /system/bin/app_process ,然后加载需要的类,调用初始化的方法,之后启动的每个应用都是Zygote的拷贝,所以Zygote进程是十分重要的.
通过在类路径中添加一个jar包,在 app_process 的特定位置调用jar包中的方法,Xposed框架实现了带扩展功能的 app_process ,然后将原有的 app_process 替换掉.
在 /data/data/de.robv.androID.xposed.installer/bin/ 目录下有一个 XposedBrIDge.jar 文件,它就是被引用的jar包,源码在 github ,main函数在 /src/de/robv/androID/xposed/XposedBrIDge.java 中,每个进程每次启动时都会被调用.加载模块的功能也是在这里实现.
Xposed真正强大的是它可以hook调用的方法.当你反编译修改apk时,你可以在里面插入xposed的命令,于是你就可以在方法调用前后注入自己的代码.
XposedBrIDge有一个私有的本地方法 hookMethodNative ,代码实现放在 app_process 中.在调用被hook的方法前会先调用此方法, hookMethodNative 有一个 handleHookedMethod 方法,可以修改传递给被hook函数的参数,变量甚至是调用其他方法.
————————————————
版权声明:本文为CSDN博主「SkyHandCsdn」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/niubitianPing/article/details/52571438
以上是内存溢出为你收集整理的[Android开发] Xposed 插件开发之一: Xposed入门全部内容,希望文章能够帮你解决[Android开发] Xposed 插件开发之一: Xposed入门所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)