Fix some missing onPackageLoad on Android U because of inline (#2802)

This commit is contained in:
LoveSy 2023-10-11 11:20:08 +08:00 committed by GitHub
parent c5e1a544bf
commit cbee741d55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 9 deletions

View File

@ -32,13 +32,15 @@ import org.lsposed.lspd.hooker.AttachHooker;
import org.lsposed.lspd.hooker.CrashDumpHooker;
import org.lsposed.lspd.hooker.HandleSystemServerProcessHooker;
import org.lsposed.lspd.hooker.LoadedApkCtorHooker;
import org.lsposed.lspd.hooker.LoadedApkGetCLHooker;
import org.lsposed.lspd.hooker.LoadedApkCreateCLHooker;
import org.lsposed.lspd.hooker.OpenDexFileHooker;
import org.lsposed.lspd.impl.LSPosedContext;
import org.lsposed.lspd.impl.LSPosedHelper;
import org.lsposed.lspd.service.ILSPApplicationService;
import org.lsposed.lspd.util.Utils;
import java.util.List;
import dalvik.system.DexFile;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedInit;
@ -57,7 +59,7 @@ public class Startup {
LSPosedHelper.hookConstructor(LoadedApkCtorHooker.class, LoadedApk.class,
ActivityThread.class, ApplicationInfo.class, CompatibilityInfo.class,
ClassLoader.class, boolean.class, boolean.class, boolean.class);
LSPosedHelper.hookMethod(LoadedApkGetCLHooker.class, LoadedApk.class, "getClassLoader");
LSPosedHelper.hookMethod(LoadedApkCreateCLHooker.class, LoadedApk.class, "createOrUpdateClassLoaderLocked", List.class);
LSPosedHelper.hookAllMethods(AttachHooker.class, ActivityThread.class, "attach");
}

View File

@ -56,7 +56,7 @@ import io.github.libxposed.api.annotations.XposedHooker;
@SuppressLint("BlockedPrivateApi")
@XposedHooker
public class LoadedApkGetCLHooker implements XposedInterface.Hooker {
public class LoadedApkCreateCLHooker implements XposedInterface.Hooker {
private final static Field defaultClassLoaderField;
private final static Set<LoadedApk> loadedApks = ConcurrentHashMap.newKeySet();
@ -81,12 +81,12 @@ public class LoadedApkGetCLHooker implements XposedInterface.Hooker {
public static void afterHookedMethod(XposedInterface.AfterHookCallback callback) {
LoadedApk loadedApk = (LoadedApk) callback.getThisObject();
if (!loadedApks.contains(loadedApk)) {
if (callback.getArgs()[0] != null || !loadedApks.contains(loadedApk)) {
return;
}
try {
Hookers.logD("LoadedApk#getClassLoader starts");
Hookers.logD("LoadedApk#createClassLoader starts");
String packageName = ActivityThread.currentPackageName();
String processName = ActivityThread.currentProcessName();
@ -99,8 +99,8 @@ public class LoadedApkGetCLHooker implements XposedInterface.Hooker {
}
Object mAppDir = XposedHelpers.getObjectField(loadedApk, "mAppDir");
ClassLoader classLoader = (ClassLoader) callback.getResult();
Hookers.logD("LoadedApk#getClassLoader ends: " + mAppDir + " -> " + classLoader);
ClassLoader classLoader = (ClassLoader) XposedHelpers.getObjectField(loadedApk, "mClassLoader");
Hookers.logD("LoadedApk#createClassLoader ends: " + mAppDir + " -> " + classLoader);
if (classLoader == null) {
return;
@ -165,7 +165,7 @@ public class LoadedApkGetCLHooker implements XposedInterface.Hooker {
}
});
} catch (Throwable t) {
Hookers.logE("error when hooking LoadedApk#getClassLoader", t);
Hookers.logE("error when hooking LoadedApk#createClassLoader", t);
} finally {
loadedApks.remove(loadedApk);
}

View File

@ -72,7 +72,7 @@ public class LoadedApkCtorHooker implements XposedInterface.Hooker {
return;
}
LoadedApkGetCLHooker.addLoadedApk(loadedApk);
LoadedApkCreateCLHooker.addLoadedApk(loadedApk);
} catch (Throwable t) {
Hookers.logE("error when hooking LoadedApk.<init>", t);
}