Fix some missing onPackageLoad on Android U because of inline (#2802)
This commit is contained in:
parent
c5e1a544bf
commit
cbee741d55
|
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue