diff --git a/core/src/main/java/de/robv/android/xposed/XposedInit.java b/core/src/main/java/de/robv/android/xposed/XposedInit.java index 7532002b..7d3ef591 100644 --- a/core/src/main/java/de/robv/android/xposed/XposedInit.java +++ b/core/src/main/java/de/robv/android/xposed/XposedInit.java @@ -51,8 +51,9 @@ import java.io.File; import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import de.robv.android.xposed.callbacks.XC_InitPackageResources; @@ -359,5 +360,5 @@ public final class XposedInit { return initModule(mcl, apk, file.moduleClassNames); } - public final static HashSet loadedPackagesInProcess = new HashSet<>(1); + public final static Set loadedPackagesInProcess = ConcurrentHashMap.newKeySet(1); } diff --git a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkCstrHooker.java b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkCstrHooker.java index 0a26d7a0..5536db58 100644 --- a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkCstrHooker.java +++ b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkCstrHooker.java @@ -57,6 +57,11 @@ public class LoadedApkCstrHooker extends XC_MethodHook { return; } + if (XposedInit.loadedPackagesInProcess.isEmpty()) { + Hookers.logD("First LoadedApk should be called by handleBindApplication, skip: " + mAppDir); + return; + } + if (!XposedInit.loadedPackagesInProcess.add(packageName)) { Hookers.logD("LoadedApk# has been loaded before, skip: " + mAppDir); return;