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.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();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue