开发流程备忘
基于AndroidStudio开发xp插件基本步骤
- 新建Project(No/Empty Activity)
- android模式切换到project模式
- 找到/app/src/main下的AndroidManifest.xml 并在application内添加以下内容:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="插件描述文字" />
<meta-data
android:name="xposedminversion"
android:value="30" />
- 找到build.gradle文件并添加以下内容
repositories {
jcenter()
}
dependencies新增如下内容, 新增完成后点击Sync:
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
- /app/src/main/java/包路径/下找到MainActivity, 在同级目录下新建名为Main或者其他名字的Class, 该Class即Hook入口点
- main下新建folder选择assets, 并在该目录下新建xposed_init文件(txt类型即可)
文件写入Hook脚本入口Class, 例如 pkg.MyClassName
- main下新建folder选择assets, 并在该目录下新建xposed_init文件(txt类型即可)
- 实现Main Class内部逻辑
package com.willson.myapplication;
import android.widget.TextView;
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 Main implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable{
if(lpparam.packageName.equals("com.willson.firstapp")) {
XposedBridge.log("测试程序加载成功");
XposedBridge.log("开始劫持com.willson.firstapp包");
XposedHelpers.findAndHookMethod(TextView.class, "setText", CharSequence.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
if(param.args[0].toString().startsWith("支付宝到账:")){
XposedBridge.log("成功Hook到setText方法");
param.args[0] = "支付宝到账: ¥10,000,000";
XposedBridge.log("修改成功!");
}
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
XposedBridge.log("Hook Done!");
}
});
}
}
}
网友评论