From 716dfae0f6425e1f58ccb78c4a4dad774800a87d Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 29 Jan 2021 04:36:11 +0800 Subject: [PATCH] Fix ShouldUseInterpreterEntrypoint for pendding hook --- .../java/io/github/lsposed/manager/App.java | 13 ----- .../io/github/lsposed/manager/Constants.java | 50 ++++--------------- .../manager/ui/activity/MainActivity.java | 2 - .../main/cpp/main/src/jni/pending_hooks.cpp | 9 ++-- .../de/robv/android/xposed/PendingHooks.java | 4 +- 5 files changed, 19 insertions(+), 59 deletions(-) diff --git a/app/src/main/java/io/github/lsposed/manager/App.java b/app/src/main/java/io/github/lsposed/manager/App.java index 83ff47f2..cef60f47 100644 --- a/app/src/main/java/io/github/lsposed/manager/App.java +++ b/app/src/main/java/io/github/lsposed/manager/App.java @@ -125,21 +125,8 @@ public class App extends Application { pref = PreferenceManager.getDefaultSharedPreferences(this); - master(); NotificationUtil.init(); Shizuku.addRequestPermissionResultListener(REQUEST_PERMISSION_RESULT_LISTENER); } - - private void master() { - // This will affect the fengshui of the whole app, don't remove this - Constants.getXposedVersionCode(); - Constants.getXposedVersion(); - Constants.getXposedApiVersion(); - Constants.getXposedVariant(); - Constants.getBaseDir(); - Constants.getModulesListFile(); - Constants.getEnabledModulesListFile(); - } - } diff --git a/app/src/main/java/io/github/lsposed/manager/Constants.java b/app/src/main/java/io/github/lsposed/manager/Constants.java index 42933a33..184720fc 100644 --- a/app/src/main/java/io/github/lsposed/manager/Constants.java +++ b/app/src/main/java/io/github/lsposed/manager/Constants.java @@ -4,62 +4,34 @@ import android.util.Log; public class Constants { public static int getXposedApiVersion() { - try { - Log.e(App.TAG, "getXposedApiVersion: Xposed is not active"); - return -1; - } catch (Exception e) { - return -1; - } + Log.e(App.TAG, "getXposedApiVersion: Xposed is not active"); + return -1; } public static String getXposedVersion() { - try { - Log.e(App.TAG, "getXposedVersion: Xposed is not active"); - return null; - } catch (Exception e) { - return null; - } + Log.e(App.TAG, "getXposedVersion: Xposed is not active"); + return null; } public static int getXposedVersionCode() { - try { - Log.e(App.TAG, "getXposedVersionCode: Xposed is not active"); - return -1; - } catch (Exception e) { - return -1; - } + Log.e(App.TAG, "getXposedVersionCode: Xposed is not active"); + return -1; } public static String getXposedVariant() { - try { - Log.e(App.TAG, "getXposedVariant: Xposed is not active"); - return null; - } catch (Exception e) { - return null; - } + Log.e(App.TAG, "getXposedVariant: Xposed is not active"); + return null; } public static String getEnabledModulesListFile() { - try { - return getBaseDir() + "conf/enabled_modules.list"; - } catch (Exception e) { - return null; - } + return getBaseDir() + "conf/enabled_modules.list"; } public static String getModulesListFile() { - try { - return getBaseDir() + "conf/modules.list"; - } catch (Exception e) { - return null; - } + return getBaseDir() + "conf/modules.list"; } public static String getBaseDir() { - try { - return App.getInstance().getApplicationInfo().deviceProtectedDataDir + "/"; - } catch (Exception e) { - return null; - } + return App.getInstance().getApplicationInfo().deviceProtectedDataDir + "/"; } } diff --git a/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java b/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java index 5f308c88..3d80a74a 100644 --- a/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java +++ b/app/src/main/java/io/github/lsposed/manager/ui/activity/MainActivity.java @@ -1,10 +1,8 @@ package io.github.lsposed.manager.ui.activity; import android.annotation.SuppressLint; -import android.content.Context; import android.content.Intent; import android.os.Bundle; -import android.view.View; import androidx.appcompat.widget.PopupMenu; import androidx.appcompat.widget.TooltipCompat; diff --git a/core/src/main/cpp/main/src/jni/pending_hooks.cpp b/core/src/main/cpp/main/src/jni/pending_hooks.cpp index 19563238..7ea97efe 100644 --- a/core/src/main/cpp/main/src/jni/pending_hooks.cpp +++ b/core/src/main/cpp/main/src/jni/pending_hooks.cpp @@ -19,11 +19,14 @@ namespace lspd { return pending_classes_.count(clazz); } - static void PendingHooks_recordPendingMethodNative(JNI_START, jclass class_ref) { + static void PendingHooks_recordPendingMethodNative(JNI_START, jobject method_ref, jclass class_ref) { auto *class_ptr = art::Thread::Current().DecodeJObject(class_ref); + auto *method = getArtMethod(env, method_ref); art::mirror::Class mirror_class(class_ptr); if (auto def = mirror_class.GetClassDef(); LIKELY(def)) { - LOGD("record pending: %p (%s)", class_ptr, mirror_class.GetDescriptor().c_str()); + LOGD("record pending: %p (%s) with %p", class_ptr, mirror_class.GetDescriptor().c_str(), method); + // Add it for ShouldUseInterpreterEntrypoint + recordHooked(method); pending_classes_.insert(def); } else { LOGW("fail to record pending for : %p (%s)", class_ptr, @@ -32,7 +35,7 @@ namespace lspd { } static JNINativeMethod gMethods[] = { - NATIVE_METHOD(PendingHooks, recordPendingMethodNative, "(Ljava/lang/Class;)V"), + NATIVE_METHOD(PendingHooks, recordPendingMethodNative, "(Ljava/lang/reflect/Member;Ljava/lang/Class;)V"), }; void RegisterPendingHooks(JNIEnv *env) { diff --git a/core/src/main/java/de/robv/android/xposed/PendingHooks.java b/core/src/main/java/de/robv/android/xposed/PendingHooks.java index 4c884077..9b04cd7f 100644 --- a/core/src/main/java/de/robv/android/xposed/PendingHooks.java +++ b/core/src/main/java/de/robv/android/xposed/PendingHooks.java @@ -33,12 +33,12 @@ public final class PendingHooks { }); pending.put(hookMethod, additionalInfo); - recordPendingMethodNative(hookMethod.getDeclaringClass()); + recordPendingMethodNative(hookMethod, hookMethod.getDeclaringClass()); } public synchronized void cleanUp() { sPendingHooks.clear(); } - private static native void recordPendingMethodNative(Class clazz); + private static native void recordPendingMethodNative(Member hookMethod, Class clazz); }