一.xposed工具简介

1.它部署在ROOT后的安卓手机上,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。可以让我们在不修改APK源码的情况下,通过自己编写的模块来影响程序运行的框架服务,实现类似于自动抢红包、微信消息自动回复等功能。

2.从本质讲xposed模块也是安卓程序,要想让写出的Andriod程序成为一个xposed模块,要完成以下四个硬件任务:

1. 让手机的xposed框架会知道我们安装的这个程序是个xposed模块
 2. 模块里要包含xposed的API的jar包,以实现下一步的hook模块
 3. 这个模块里面要有目标程序进行hook操作的方法
 4. 要让手机上的xposed框架知道,我们编写的sposed模块中, 哪一个方法实现hook的操作

即::::对应四大件(与以上四个任务一一对应)

1. AndroidManifest.xml
 2. XposeBridgeApi-xx.jar与build.gradle
 3. 实现hook操作的代码
 4. xposed_init<添加入口>

二.创建项目

1.root的手机(或模拟器)上安装Xposed Installe

2.打开andriod studio 编辑器,创建空白项目

3.将项目查看方式设置Project模式,在"项目名/app/main/"的目录下找到
AndroidManifest.xml文件,并在如下位置插入以下代码:

<meta-data
android:name="xposedmodule"

android:value="true" />

<meta-data

    android:name="xposeddescription"

    android:value="这是一个Xposed例程" />

<meta-data

    android:name="xposedminversion"

    android:value="53" />

位置如下图:

android 免root hook合并打包_android


4.导入XposedBridgeApi.jar包

方法一:自动导包

在"项目名/app/"目录下找到build.gradle文件,在图示的位置加代码如下:

repositories {

    jcenter()

}
compileOnly 'de.robv.android.xposed:api:82'

compileOnly 'de.robv.android.xposed:api:82:sources'

这句代码告诉android studio使用jcenter作为代码仓库,从这个仓库里面远程寻找

具体位置如下图:

android 免root hook合并打包_sed_02


方法二:手动导包

1.将下载的的.jar包复制到"项目名/app/libs"下

2.选中要导入的包 鼠标右击 点击Add As Library…

5.开始编写hook代码
1.在"项目/app/src/mainjava/包名"写代码

代码略

6.添加入口

1.在"项目名/app/src/main"目录先创建assets文件夹在该文件夹中创建名为xposed_init文件,文件中内容为 包名.写的hook类名

注:文件中的内容一定没有"package"这个单词

创建assets文件的方法如图

android 免root hook合并打包_xposed_03


复制xposed_init的内容如下:

选中写的hook类的文件,鼠标右击,点击Copy Reference然后直接粘贴到xposed_init文件中即可

小知识:
在build.gradle文件中compile和provide的区别:

compile汇编
	compile 把jar在项目运行的时候, 编译并且程序在打包为apk的时候也发布到apk里面去
	provided提供,假设,
	项目在编译或者运行的时候,会调用其描述的jarapi但是项目被发布为apk的时候,不会打包到apk中

文件打成.jar命令:

jar -cvf *****.jar 需要打包的文件

运行.jar包:

在这里插入代码片

java -jar myjar.jar

给jar包添加main class入口:

java -cp myjar.jar com.example.MainClass