From bc8b4c69a5ceaa6b8d99158e9f9d28185d1d7f72 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Fri, 25 Feb 2022 20:17:57 +0800 Subject: [PATCH] Fix parasitic manager hooker in 8.1 (#1724) --- .../lspd/util/ParasiticManagerHooker.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java index 38b6da30..cea431ee 100644 --- a/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java +++ b/core/src/main/java/org/lsposed/lspd/util/ParasiticManagerHooker.java @@ -116,6 +116,7 @@ public class ParasiticManagerHooker { } }); + var activityClientRecordClass = XposedHelpers.findClass("android.app.ActivityThread$ActivityClientRecord", ActivityThread.class.getClassLoader()); var activityHooker = new XC_MethodHook() { @Override protected void beforeHookedMethod(MethodHookParam param) { @@ -141,19 +142,20 @@ public class ParasiticManagerHooker { @Override protected void afterHookedMethod(MethodHookParam param) { - var aInfo = (ActivityInfo) XposedHelpers.getObjectField(param.thisObject, "activityInfo"); - Hookers.logD("loading state of " + aInfo.name); - states.computeIfPresent(aInfo.name, (k, v) -> { - XposedHelpers.setObjectField(param.thisObject, "state", v); - return v; - }); - persistentStates.computeIfPresent(aInfo.name, (k, v) -> { - XposedHelpers.setObjectField(param.thisObject, "persistentState", v); - return v; - }); + if (activityClientRecordClass.isInstance(param.thisObject)) { + var aInfo = (ActivityInfo) XposedHelpers.getObjectField(param.thisObject, "activityInfo"); + Hookers.logD("loading state of " + aInfo.name); + states.computeIfPresent(aInfo.name, (k, v) -> { + XposedHelpers.setObjectField(param.thisObject, "state", v); + return v; + }); + persistentStates.computeIfPresent(aInfo.name, (k, v) -> { + XposedHelpers.setObjectField(param.thisObject, "persistentState", v); + return v; + }); + } } }; - var activityClientRecordClass = XposedHelpers.findClass("android.app.ActivityThread$ActivityClientRecord", ActivityThread.class.getClassLoader()); XposedBridge.hookAllConstructors(activityClientRecordClass, activityHooker); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.O_MR1) {