Fix `isFirstPackage` (#2424)
This commit is contained in:
parent
3f8ee48e14
commit
7112bb5a91
|
|
@ -38,6 +38,7 @@ import android.content.res.XResources;
|
|||
import android.os.Build;
|
||||
import android.os.IBinder;
|
||||
import android.os.Process;
|
||||
import android.util.ArrayMap;
|
||||
import android.util.Log;
|
||||
|
||||
import org.lsposed.lspd.impl.LSPosedContext;
|
||||
|
|
@ -241,6 +242,7 @@ public final class XposedInit {
|
|||
if (!LSPosedContext.loadModule(at, module)) {
|
||||
loadedModules.remove(module.packageName);
|
||||
}
|
||||
((ArrayMap<?, ?>) XposedHelpers.getObjectField(ActivityThread.currentActivityThread(), "mPackages")).clear();
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -43,10 +43,6 @@ public class LoadedApkCtorHooker extends XC_MethodHook {
|
|||
try {
|
||||
LoadedApk loadedApk = (LoadedApk) param.thisObject;
|
||||
String packageName = loadedApk.getPackageName();
|
||||
boolean isFirstPackage = packageName != null && ActivityThread.currentProcessName() != null && packageName.equals(ActivityThread.currentPackageName());
|
||||
if (!isFirstPackage && !XposedInit.getLoadedModules().getOrDefault(packageName, Optional.of("")).isPresent()) {
|
||||
return;
|
||||
}
|
||||
Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir");
|
||||
Hookers.logD("LoadedApk#<init> ends: " + mAppDir);
|
||||
|
||||
|
|
@ -81,7 +77,7 @@ public class LoadedApkCtorHooker extends XC_MethodHook {
|
|||
return;
|
||||
}
|
||||
|
||||
new LoadedApkGetCLHooker(loadedApk, isFirstPackage);
|
||||
new LoadedApkGetCLHooker(loadedApk);
|
||||
} catch (Throwable t) {
|
||||
Hookers.logE("error when hooking LoadedApk.<init>", t);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,11 +69,8 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
|||
private final LoadedApk loadedApk;
|
||||
private final Unhook unhook;
|
||||
|
||||
private final boolean isFirstPackage;
|
||||
|
||||
public LoadedApkGetCLHooker(LoadedApk loadedApk, boolean isFirstPackage) {
|
||||
public LoadedApkGetCLHooker(LoadedApk loadedApk) {
|
||||
this.loadedApk = loadedApk;
|
||||
this.isFirstPackage = isFirstPackage;
|
||||
unhook = XposedHelpers.findAndHookMethod(LoadedApk.class, "getClassLoader", this);
|
||||
}
|
||||
|
||||
|
|
@ -88,8 +85,15 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
|||
try {
|
||||
Hookers.logD("LoadedApk#getClassLoader starts");
|
||||
|
||||
final String processName = ActivityThread.currentProcessName();
|
||||
final String packageName = isFirstPackage && "android".equals(ActivityThread.currentPackageName()) ? "system" : loadedApk.getPackageName();
|
||||
String packageName = ActivityThread.currentPackageName();
|
||||
String processName = ActivityThread.currentProcessName();
|
||||
boolean isFirstPackage = packageName != null && processName != null && packageName.equals(loadedApk.getPackageName());
|
||||
if (!isFirstPackage) {
|
||||
packageName = loadedApk.getPackageName();
|
||||
processName = AndroidAppHelper.currentProcessName();
|
||||
} else if (packageName.equals("android")) {
|
||||
packageName = "system";
|
||||
}
|
||||
|
||||
Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir");
|
||||
ClassLoader classLoader = (ClassLoader) param.getResult();
|
||||
|
|
@ -99,6 +103,10 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
|
|||
return;
|
||||
}
|
||||
|
||||
if (!isFirstPackage && !XposedInit.getLoadedModules().getOrDefault(packageName, Optional.of("")).isPresent()) {
|
||||
return;
|
||||
}
|
||||
|
||||
XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam(
|
||||
XposedBridge.sLoadedPackageCallbacks);
|
||||
lpparam.packageName = packageName;
|
||||
|
|
|
|||
|
|
@ -17,5 +17,3 @@ android.enableAppCompileTimeRClass=true
|
|||
android.nonTransitiveRClass=true
|
||||
android.enableR8.fullMode=true
|
||||
android.useAndroidX=true
|
||||
|
||||
org.gradle.unsafe.configuration-cache=true
|
||||
|
|
|
|||
Loading…
Reference in New Issue