From 5a16a34cd89729c7dc6c303868a0e6a87e3794d8 Mon Sep 17 00:00:00 2001 From: Nullptr <52071314+Dr-TSNG@users.noreply.github.com> Date: Fri, 4 Mar 2022 13:28:48 +0800 Subject: [PATCH] Fix null classloader --- .../org/lsposed/lspatch/loader/LSPApplication.java | 13 +++++++++++-- patch/src/main/java/org/lsposed/patch/LSPatch.java | 3 +-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java b/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java index ffd498b..b256e0d 100644 --- a/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java +++ b/app/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java @@ -165,7 +165,7 @@ public class LSPApplication extends ApplicationServiceClient { XposedHelpers.setObjectField(mBoundApplication, "info", appLoadedApk); var activityClientRecordClass = XposedHelpers.findClass("android.app.ActivityThread$ActivityClientRecord", ActivityThread.class.getClassLoader()); - var fixActivityClientRecord = (BiConsumer)(k, v) -> { + var fixActivityClientRecord = (BiConsumer) (k, v) -> { if (activityClientRecordClass.isInstance(v)) { var pkgInfo = XposedHelpers.getObjectField(v, "packageInfo"); if (pkgInfo == stubLoadedApk) { @@ -182,7 +182,16 @@ public class LSPApplication extends ApplicationServiceClient { } Log.i(TAG, "hooked app initialized: " + appLoadedApk); - return (Context) XposedHelpers.callStaticMethod(Class.forName("android.app.ContextImpl"), "createAppContext", activityThread, stubLoadedApk); + var context = (Context) XposedHelpers.callStaticMethod(Class.forName("android.app.ContextImpl"), "createAppContext", activityThread, stubLoadedApk); + if (config.appComponentFactory != null) { + try { + context.getClassLoader().loadClass(config.appComponentFactory); + } catch (ClassNotFoundException e) { // This will happen on some strange shells like 360 + Log.w(TAG, "Original AppComponentFactory not found: " + config.appComponentFactory); + appInfo.appComponentFactory = null; + } + } + return context; } catch (Throwable e) { Log.e(TAG, "createLoadedApk", e); return null; diff --git a/patch/src/main/java/org/lsposed/patch/LSPatch.java b/patch/src/main/java/org/lsposed/patch/LSPatch.java index 0d2a7a7..afaa245 100644 --- a/patch/src/main/java/org/lsposed/patch/LSPatch.java +++ b/patch/src/main/java/org/lsposed/patch/LSPatch.java @@ -223,8 +223,7 @@ public class LSPatch { var pair = ManifestParser.parseManifestFile(is); if (pair == null) throw new PatchError("Failed to parse AndroidManifest.xml"); - appComponentFactory = pair.appComponentFactory == null ? "" : pair.appComponentFactory; - + appComponentFactory = pair.appComponentFactory; logger.d("original appComponentFactory class: " + appComponentFactory); }