所需要環(huán)境 :
jdk sdk xposed激活安裝
xposed激活安裝 :https://blog.csdn.net/weixin_38927522/article/details/119832717
1.Android Studio 項(xiàng)目AndroidManifest.xml添加xml標(biāo)識(shí):
<!-- 添加標(biāo)識(shí) -->
<meta-data
android:name="xposedmodule"
android:value="true"/>
<!-- 載入Hook模塊之后顯示的信息 value可修改-->
<meta-data
android:name="xposeddescription"
android:value="Xposed Proxy For HOOK"/>
<!-- 規(guī)定jar包的版本信息 -->
<meta-data
android:name="xposedminversion"
android:value="54"/>
2. 引入jar包并添加依賴:
兩個(gè)jar包,Bridge是實(shí)現(xiàn),api-82是調(diào)用,調(diào)用無(wú)法查看源代碼實(shí)現(xiàn)邏輯,故而會(huì)小一些,這兩個(gè)用哪個(gè)都可以。
build.gradle下dependencies中引入:
compileOnly files('lib/api-82.jar')
全build.gradle文件如下:
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
defaultConfig {
applicationId "com.sun.xposed"
minSdkVersion 19
targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compileOnly files('lib/api-82.jar')
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}
3.創(chuàng)建hook類:
package com.sun.xposed;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
public class XposedHook implements IXposedHookLoadPackage{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
// 判斷當(dāng)前啟動(dòng)的目標(biāo)程序是否是要hook的應(yīng)用程序
if(loadPackageParam.packageName.equals("cn.com.cvsource")){
XposedBridge.log("編寫Xposed插件模板,開啟HOOK之路!");
XposedHelpers.findAndHookMethod("cn.com.cvsource.utils.EncryptUtils", // 包名+類名
loadPackageParam.classLoader,
// "encrypt", // 要hook的方法名稱
"getApiSalt", // 要hook的方法名稱
// String.class, String.class,String.class, // 參數(shù)列表
new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
// 打印參數(shù)信息
// 獲取第一個(gè)參數(shù)
// XposedBridge.log("String1:"+param.args[0]);
// // 獲取第二個(gè)參數(shù)
// XposedBridge.log("String2:"+param.args[1]);
// XposedBridge.log("String3:"+param.args[2]);
}
// hook之后 可以打印返回值信息 修改返回值
@Override
protected void afterHookedMethod(MethodHookParam param)
throws Throwable {
super.afterHookedMethod(param);
// 打印方法返回值信息
XposedBridge.log("result:"+param.getResult());
// 修改方法返回值
param.setResult(true);
}
});
}
}
}
4.在main下創(chuàng)建xposed入口:
? 創(chuàng)建assets文件夾 并創(chuàng)建 xposed_init,寫清入口類:com.sun.xposed.XposedHook。
5.運(yùn)行及打包:
可通過(guò)build編譯成apk,提供其他人使用。
?
指定目錄下創(chuàng)建秘鑰,并選擇release完成編譯。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-599907.html
6.總體結(jié)構(gòu)
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599907.html
到了這里,關(guān)于Xposed插件編寫的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!