[core] Fix modules may be loaded twice in Android 12 (#1116)

In android 12, loaded apk may be loaded async before handleBindApp

Co-authored-by: 残页 <31466456+canyie@users.noreply.github.com>
This commit is contained in:
LoveSy 2021-09-15 23:52:45 +08:00 committed by GitHub
parent 1a4426d7cb
commit 695fe45c56
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 8 additions and 2 deletions

View File

@ -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<String> loadedPackagesInProcess = new HashSet<>(1);
public final static Set<String> loadedPackagesInProcess = ConcurrentHashMap.newKeySet(1);
}

View File

@ -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#<init> has been loaded before, skip: " + mAppDir);
return;