From 715a25d0bd0cef3c4bb04019e314764015f4f289 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Thu, 28 Jan 2021 01:08:09 +0800 Subject: [PATCH] Match original Xposed --- .../edxp/yahfa/dexmaker/DynamicBridge.java | 8 +--- .../de/robv/android/xposed/LspHooker.java | 41 +++++++++++-------- 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/edxp-core/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java b/edxp-core/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java index 0ab52658..9ae98604 100644 --- a/edxp-core/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java +++ b/edxp-core/src/main/java/com/elderdrivers/riru/edxp/yahfa/dexmaker/DynamicBridge.java @@ -74,13 +74,7 @@ public final class DynamicBridge { if (hooker == null) { throw new IllegalStateException("method not hooked, cannot call original method."); } - try { - return hooker.callBackup(thisObject, args); - } catch (IllegalAccessException e) { - throw e; - } catch (Throwable e) { - throw new InvocationTargetException(e); - } + return hooker.callBackup(thisObject, args); } } diff --git a/edxp-core/src/main/java/de/robv/android/xposed/LspHooker.java b/edxp-core/src/main/java/de/robv/android/xposed/LspHooker.java index b6418b94..7424c64a 100644 --- a/edxp-core/src/main/java/de/robv/android/xposed/LspHooker.java +++ b/edxp-core/src/main/java/de/robv/android/xposed/LspHooker.java @@ -18,29 +18,32 @@ public class LspHooker { this.backup = backup; } - public Object callBackup(Object thisObject, Object[] args) throws Throwable { - try { - if (args == null) { - args = new Object[0]; - } - if (Modifier.isStatic(method.getModifiers())) { - return backup.invoke(null, args); - } else { - Object[] newArgs = new Object[args.length + 1]; - newArgs[0] = thisObject; - System.arraycopy(args, 0, newArgs, 1, args.length); - return backup.invoke(null, newArgs); - } - } catch (InvocationTargetException ite) { - throw ite.getCause(); + public Object callBackup(Object thisObject, Object[] args) throws InvocationTargetException, IllegalAccessException { + if (args == null) { + args = new Object[0]; + } + if (Modifier.isStatic(method.getModifiers())) { + return backup.invoke(null, args); + } else { + Object[] newArgs = new Object[args.length + 1]; + newArgs[0] = thisObject; + System.arraycopy(args, 0, newArgs, 1, args.length); + return backup.invoke(null, newArgs); } } @SuppressWarnings({"unused", "RedundantSuppression"}) public Object handleHookedMethod(Object[] args) throws Throwable { + if (disableHooks) { + try { + return backup.invoke(null, args); + } catch (InvocationTargetException ite) { + throw ite.getCause(); + } + } Object[] callbacksSnapshot = additionalInfo.callbacks.getSnapshot(); final int callbacksLength = callbacksSnapshot.length; - if (disableHooks || callbacksLength == 0) { + if (callbacksLength == 0) { try { return backup.invoke(null, args); } catch (InvocationTargetException ite) { @@ -84,7 +87,11 @@ public class LspHooker { // call original method if not requested otherwise if (!param.returnEarly) { - param.setResult(callBackup(param.thisObject, param.args)); + try { + param.setResult(callBackup(param.thisObject, param.args)); + } catch (InvocationTargetException e) { + param.setThrowable(e.getCause()); + } } // call "after method" callbacks