Fix `isFirstPackage` (#2424)

This commit is contained in:
LoveSy 2023-03-06 20:50:48 +08:00 committed by GitHub
parent 3f8ee48e14
commit 7112bb5a91
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 17 additions and 13 deletions

View File

@ -38,6 +38,7 @@ import android.content.res.XResources;
import android.os.Build; import android.os.Build;
import android.os.IBinder; import android.os.IBinder;
import android.os.Process; import android.os.Process;
import android.util.ArrayMap;
import android.util.Log; import android.util.Log;
import org.lsposed.lspd.impl.LSPosedContext; import org.lsposed.lspd.impl.LSPosedContext;
@ -241,6 +242,7 @@ public final class XposedInit {
if (!LSPosedContext.loadModule(at, module)) { if (!LSPosedContext.loadModule(at, module)) {
loadedModules.remove(module.packageName); loadedModules.remove(module.packageName);
} }
((ArrayMap<?, ?>) XposedHelpers.getObjectField(ActivityThread.currentActivityThread(), "mPackages")).clear();
}); });
} }

View File

@ -43,10 +43,6 @@ public class LoadedApkCtorHooker extends XC_MethodHook {
try { try {
LoadedApk loadedApk = (LoadedApk) param.thisObject; LoadedApk loadedApk = (LoadedApk) param.thisObject;
String packageName = loadedApk.getPackageName(); 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"); Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir");
Hookers.logD("LoadedApk#<init> ends: " + mAppDir); Hookers.logD("LoadedApk#<init> ends: " + mAppDir);
@ -81,7 +77,7 @@ public class LoadedApkCtorHooker extends XC_MethodHook {
return; return;
} }
new LoadedApkGetCLHooker(loadedApk, isFirstPackage); new LoadedApkGetCLHooker(loadedApk);
} catch (Throwable t) { } catch (Throwable t) {
Hookers.logE("error when hooking LoadedApk.<init>", t); Hookers.logE("error when hooking LoadedApk.<init>", t);
} }

View File

@ -69,11 +69,8 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
private final LoadedApk loadedApk; private final LoadedApk loadedApk;
private final Unhook unhook; private final Unhook unhook;
private final boolean isFirstPackage; public LoadedApkGetCLHooker(LoadedApk loadedApk) {
public LoadedApkGetCLHooker(LoadedApk loadedApk, boolean isFirstPackage) {
this.loadedApk = loadedApk; this.loadedApk = loadedApk;
this.isFirstPackage = isFirstPackage;
unhook = XposedHelpers.findAndHookMethod(LoadedApk.class, "getClassLoader", this); unhook = XposedHelpers.findAndHookMethod(LoadedApk.class, "getClassLoader", this);
} }
@ -88,8 +85,15 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
try { try {
Hookers.logD("LoadedApk#getClassLoader starts"); Hookers.logD("LoadedApk#getClassLoader starts");
final String processName = ActivityThread.currentProcessName(); String packageName = ActivityThread.currentPackageName();
final String packageName = isFirstPackage && "android".equals(ActivityThread.currentPackageName()) ? "system" : loadedApk.getPackageName(); 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"); Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir");
ClassLoader classLoader = (ClassLoader) param.getResult(); ClassLoader classLoader = (ClassLoader) param.getResult();
@ -99,6 +103,10 @@ public class LoadedApkGetCLHooker extends XC_MethodHook {
return; return;
} }
if (!isFirstPackage && !XposedInit.getLoadedModules().getOrDefault(packageName, Optional.of("")).isPresent()) {
return;
}
XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam( XC_LoadPackage.LoadPackageParam lpparam = new XC_LoadPackage.LoadPackageParam(
XposedBridge.sLoadedPackageCallbacks); XposedBridge.sLoadedPackageCallbacks);
lpparam.packageName = packageName; lpparam.packageName = packageName;

View File

@ -17,5 +17,3 @@ android.enableAppCompileTimeRClass=true
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
android.enableR8.fullMode=true android.enableR8.fullMode=true
android.useAndroidX=true android.useAndroidX=true
org.gradle.unsafe.configuration-cache=true