2.1-基本环境
环境已经完全搞定【手机,刷机,权限】【注意:手机-》开发者模式-》调试模式 都要开启】!
真机参考本系列刷机或其它文章:
https://blog.csdn.net/qq_32667685/article/details/125909476
2.2-真机安装
下载软件:
- xposed installer:
https://repo.xposed.info/module/de.robv.android.xposed.installer 【apk】 - root explorer:
https://root-explorer.en.softonic.com/android 【apk】 - xposed framework【SDK25 目前最终版 Android7.1】:
- 没有科学
手动下载:https://dl-xda.xposed.info/framework/ 【zip】 - 存在科学
自动下载:下载梯子软件apk,安装,连接科学,打开Xposed自己下载!【apk】
- 没有科学
安装软件:
命令:adb install xxx.apk
adb:安装文件管理【root explorer】
adb:安装拦截框架【xposed installer】
打开软件:
打开xposed软件【打开xposed,re软件时:需要进行root授权【管家去找,设置里面】】
默认下载失败:
xposed右上角有个选项:Show outdated versions【打上勾,看到下载安装列表(本地-科学)】
- 梯子方式:
adb:安装梯子,运行,4G或者wifi!
自动下载xposed framework【v89】-》install-》ok! - 无梯方式:
adb push 参数1 参数2:
参数1:
xposed-v89-sdk25-arm64.zip
参数2:
/sdcard/Android/data/de.robv.android.xposed.installer/cache/downloads/framework/
手动放置xposed framework【v89】-》install-》ok!
正常成功:
安装完成【绿色样式】,自动重启【失败:手动重启】!
安装失败【黄色样式】
RE工具清理:/system/app/某手机系统应用目录 【建议:Mipay】【注意挂载方式:读,写,读写】
2.3-模拟安装
- 下载Xposed framework
https://dl-xda.xposed.info/framework/sdk25/ 下载x86,arm是真机手机用的! - 放置Xposed framework
/storage/emulated/0/Android/data/de.robv.android.xposed.installer/cache - 创建目录:
downloads/framework 目录 - 拷贝文件:
将文件拷贝至上述目录!
2.4-测试框架
基本介绍
Xposed是一个运行在Android高权限下的不改变apk的前提下,通过Hook【钩子技术】技术的拦截框架!
创建工程
模块配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myxposed">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyXposed">
<!--Xposed 模式配置:-->
<!--标识:Xposed模块-->
<meta-data
android:name="xposedmodule"
android:value="true"/>
<!--描述:Xposed描述-->
<meta-data
android:name="xposeddescription"
android:value="Xposed Test Model"/>
<!--支持:Xposed版本-->
<meta-data
android:name="xposedminversion"
android:value="53"/>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
编译模块API
- 源码地址
git clone https://github.com/rovo89/XposedBridge.git -b v89 - 打开编译
使用AndroidStudio打开源码工程!
注意1:使用JDK8
注意2:下载Android API 23【Android6.0】
//其它默认下载安装各种依赖,出现构建按钮,点击构建即可,正常情况可以正常编译!
这里我们改名:XposedBridgeApi【改不改都行,这里是区分XposedBridgeApi】
配置使用API
dependencies {
//添加库:自动生成
//implementation files('libs\\XposedBridgeApi.jar')
compileOnly files('libs\\XposedBridgeApi.jar')
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
测试使用API
package com.example.myxposedtest;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class MyHookTest implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.example.myxposedtest")) {
Class clazz = loadPackageParam.classLoader.loadClass("com.example.myxposedtest.MainActivity");
XposedHelpers.findAndHookMethod(clazz, "getString", new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
param.setResult("由xposed传来的点击事件");
}
});
}
}
}
package com.example.myxposedtest;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/*界面:按钮点击弹框消息,Xposed Hook拦截消息*/
public void onClickBtn(View view) {
Toast.makeText(MainActivity.this, getString(), Toast.LENGTH_SHORT).show();
}
public String getString() {
return "原本的点击事件";
}
}
配置模块入口
构建-编译-安装-xposed模块识别打钩-重启-执行!