我试图在Android上使用Xposed来挂钩Android资源,特别是Webview的loadUrl。下面的代码与loadUrl挂钩,如果成功,则在日志中打印一条消息。
findAndHookMethod("com.example.webview.MainActivity", lpparam.classLoader, "android.webkit.WebView.loadUrl", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("we are in loadurl!");
}
但是,这样做会抛出错误:
java.lang.NoSuchMethodError: android.webkit.WebView#android.webkit.WebView.loadUrl()#exact
它甚至可能挂钩到Android资源与暴露?
你可以直接使用"hookAllMethods"
XposedBridge.hookAllMethods("com.example.webview.MainActivity", "loadUrl", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
XposedBridge.log("we are in loadurl!");
}
它找不到方法,因为您没有指定方法参数。Xposed helper函数试图找到一个不存在的没有参数的loadUrl方法。
查看webView,有以下签名:
- loadUrl(String url)
- loadUrl(String url, Map additionalHttpHeaders).
我还没有测试,但这应该可以工作:
try {
Method loadUrl1 = android.webkit.WebView.class.getDeclaredMethod("loadUrl", String.class);
Method loadUrl2 = android.webkit.WebView.class.getDeclaredMethod("loadUrl", String.class, Map.class);
XposedBridge.hookMethod(loadUrl1, new XC_MethodHook() { /* your code here*/});
XposedBridge.hookMethod(loadUrl2, new XC_MethodHook() { /* your code here*/});
} catch (NoSuchMethodException e) { ... }
或者使用相同的API:
findAndHookMethod(classname, classloader, methodName, **ARGUMENTS[]**, xc_hook)
还有,你的意思是类名"android.webkit。"WebView"和方法"loadUrl"?
好运