先看这里
android:versionName="2.0.3"
package="com.ss.android.ugc.aweme.lite"
使用Android Studio开发Xposed插件
Gradle中需要添加的配置
dependencies {
compileOnly 'de.robv.android.xposed:api:82'
compileOnly 'de.robv.android.xposed:api:82:sources'
implementation 'com.virjar:sekiro-api:1.0.1'
}
服务注入代码
package com.example.demo.hook;
import android.os.Bundle;
import com.example.demo.handler.DouYinUserSearchHandler;
import com.virjar.sekiro.api.SekiroClient;
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.LoadPackageParam;
public class HookMain implements IXposedHookLoadPackage {
public static LoadPackageParam loadPackageParam = null;
@Override
public void handleLoadPackage(final LoadPackageParam loadPackageParam) throws Throwable {
if (loadPackageParam.packageName.equals("com.ss.android.ugc.aweme.lite")) {
HookMain.loadPackageParam = loadPackageParam;
try {
// 在com.ss.android.ugc.aweme.splash.SplashActivity -> onCreate 注入服务
XposedHelpers.findAndHookMethod(
"com.ss.android.ugc.aweme.splash.SplashActivity", //Hook最先启动的类
loadPackageParam.classLoader,
"onCreate", //SplashActivity类中的方法
Bundle.class,
new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
//注册信息发送到服务端
final SekiroClient sekiroClient = SekiroClient.start(
"sekiro.virjar.com", //自建服务后修改serverHost
"97531", //每台设备配置不同的值
"97531" //每台设备配置不同的值
);
//一台设备中可以注册多个action(api), 每个action代表不同的服务
sekiroClient.registerHandler("dy_search", new DouYinUserSearchHandler());
XposedBridge.log("=========== sekiro服务启动成功 ===========");
}
});
} catch (Exception e) {
XposedBridge.log("=========== Sekiro服务启动失败 ===========");
}
}
}
}
接口代码
package com.example.demo.handler;
import com.example.demo.hook.HookMain;
import com.google.gson.Gson;
import com.virjar.sekiro.api.SekiroRequest;
import com.virjar.sekiro.api.SekiroRequestHandler;
import com.virjar.sekiro.api.SekiroResponse;
import de.robv.android.xposed.XposedHelpers;
public class DouYinUserSearchHandler implements SekiroRequestHandler {
@Override
public void handleRequest(SekiroRequest sekiroRequest, SekiroResponse sekiroResponse) {
Gson gson = new Gson();
//SearchApi类下的静态方法a所需要的三个参数
String query = sekiroRequest.getString("query");
String start = sekiroRequest.getString("start", "0");
String count = sekiroRequest.getString("count", "10");
long param2 = Long.parseLong(start);
int param3 = Integer.parseInt(count);
if (query == null || query.equals("")) {
sekiroResponse.send("请传入必需参数:query");
}
Class<?> SearchApi = XposedHelpers.findClass("com.ss.android.ugc.aweme.discover.api.SearchApi", HookMain.loadPackageParam.classLoader);
// 调用SearchApi类下的静态方法a,以及a方法所需的3个参数
Object object = XposedHelpers.callStaticMethod(SearchApi, "a", query, param2, param3);
sekiroResponse.send(gson.toJson(object));
}
}
最后
启动服务
安装模块并在xposed中勾选,重启设备,然后打开插件与dy极速版即可实现调用。