From 47c500b96ded4da92aa59b7b8336ba556afa3716 Mon Sep 17 00:00:00 2001 From: solohsu Date: Sun, 10 Mar 2019 22:34:51 +0800 Subject: [PATCH] Clean up loaded module callbacks for blacklisted app Otherwise a few applications would get stuck at launch screen, for unknown reason. --- .../riru/xposed/proxy/yahfa/BlackWhiteListProxy.java | 12 ++++++++++++ .../java/de/robv/android/xposed/XposedBridge.java | 6 ++++++ 2 files changed, 18 insertions(+) diff --git a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java index 258bba99d..7b3ec5c9b 100644 --- a/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java +++ b/Bridge/src/main/java/com/elderdrivers/riru/xposed/proxy/yahfa/BlackWhiteListProxy.java @@ -9,6 +9,8 @@ import com.elderdrivers.riru.xposed.util.ProcessUtils; import com.elderdrivers.riru.xposed.util.Utils; +import de.robv.android.xposed.XposedBridge; + import static com.elderdrivers.riru.xposed.Main.isAppNeedHook; import static com.elderdrivers.riru.xposed.util.FileUtils.getDataPathPrefix; @@ -80,6 +82,7 @@ private static void onForkPreForNonDynamicMode(boolean isSystemServer) { // because installed hooks would be propagated to all child processes of zygote Router.startWorkAroundHook(); // loadModules once for all child processes of zygote + // TODO maybe just save initZygote callbacks and call them when whitelisted process forked? Router.loadModulesSafely(true); } @@ -112,6 +115,15 @@ private static boolean checkNeedHook(String appDataDir, String niceName) { // FIXME some process cannot read app_data_file because of MLS, e.g. bluetooth needHook = isAppNeedHook(appDataDir); } + if (!needHook) { + // clean up the scene + onBlackListed(); + } return needHook; } + + private static void onBlackListed() { + XposedBridge.clearLoadedPackages(); + XposedBridge.clearInitPackageResources(); + } } diff --git a/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java b/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java index 851d12ab4..82972fede 100644 --- a/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java +++ b/Bridge/src/main/java/de/robv/android/xposed/XposedBridge.java @@ -393,6 +393,12 @@ public static void hookInitPackageResources(XC_InitPackageResources callback) { // } } + public static void clearInitPackageResources() { + synchronized (sInitPackageResourcesCallbacks) { + sInitPackageResourcesCallbacks.clear(); + } + } + /** * Intercept every call to the specified method and call a handler function instead. * @param method The method to intercept