diff --git a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java index 351fd272c..3c8018848 100644 --- a/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java +++ b/core/src/main/java/org/lsposed/lspd/hooker/LoadedApkGetCLHooker.java @@ -103,6 +103,11 @@ protected void afterHookedMethod(MethodHookParam param) { return; } + if (!isFirstPackage && !XposedHelpers.getBooleanField(loadedApk, "mIncludeCode")) { + Hookers.logD("LoadedApk# mIncludeCode == false: " + mAppDir); + return; + } + if (!isFirstPackage && !XposedInit.getLoadedModules().getOrDefault(packageName, Optional.of("")).isPresent()) { return; } diff --git a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java index 830f68b96..94b6b90fc 100644 --- a/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java +++ b/core/src/main/java/org/lsposed/lspd/impl/LSPosedContext.java @@ -1,5 +1,6 @@ package org.lsposed.lspd.impl; +import android.annotation.SuppressLint; import android.app.ActivityThread; import android.app.LoadedApk; import android.content.BroadcastReceiver; @@ -7,6 +8,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.ContextParams; +import android.content.ContextWrapper; import android.content.Intent; import android.content.IntentFilter; import android.content.IntentSender; @@ -69,6 +71,8 @@ import io.github.libxposed.api.errors.HookFailedError; import io.github.libxposed.api.utils.DexParser; + +@SuppressLint("NewApi") public class LSPosedContext extends XposedContext { private static final String TAG = "LSPosedContext"; @@ -115,6 +119,7 @@ public static void callOnSystemServerLoaded(XposedModuleInterface.SystemServerLo } } + @SuppressLint("DiscouragedPrivateApi") public static boolean loadModule(ActivityThread at, Module module) { try { Log.d(TAG, "Loading module " + module.packageName); @@ -160,7 +165,26 @@ public static boolean loadModule(ActivityThread at, Module module) { } args[i] = null; } - var ctx = new LSPosedContext((Context) ctor.newInstance(args), module.packageName, module.apkPath, module.service); + var ci = (Context) ctor.newInstance(args); + var ctx = new LSPosedContext(ci, module.packageName, module.apkPath, module.service); + var setOuterContext = c.getDeclaredMethod("setOuterContext", Context.class); + setOuterContext.setAccessible(true); + setOuterContext.invoke(ci, new ContextWrapper(ci) { + @Override + public Resources getResources() { + return ctx.getResources(); + } + + @Override + public Resources.Theme getTheme() { + return ctx.getTheme(); + } + + @Override + public void setTheme(int resid) { + ctx.setTheme(resid); + } + }); for (var entry : module.file.moduleClassNames) { var moduleClass = ctx.getClassLoader().loadClass(entry); Log.d(TAG, " Loading class " + moduleClass); @@ -235,11 +259,13 @@ public Context getApplicationContext() { @Override public void setTheme(int resid) { + getResources(); mBase.setTheme(resid); } @Override public Resources.Theme getTheme() { + getResources(); return mBase.getTheme(); } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4414f2d9f..9551c8bca 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] agp = "8.0.2" -kotlin = "1.8.22" +kotlin = "1.9.0" nav = "2.6.0" appcenter = "5.0.2" libxposed = "100"