HSSkyBoy / NPatch

NPatch是一个复刻自LSPatch,以LSPosed为基础的免root的Xposed框架
GNU General Public License v3.0
510 stars 31 forks source link

[Bug] Setting appComponentFactory to null causes certain app to crash #13

Closed mkx173 closed 3 months ago

mkx173 commented 3 months ago

Steps to reproduce/复现步骤

  1. 使用LSPatch / NPatch对百度贴吧打补丁(本地,集成模式任意模块均可)
  2. 进入个人页面,点击头像尝试打开个人中心,app会卡死

你好,我是贴吧ts的维护者, 这个bug是这里导致的,注释掉这几行可以解决问题 https://github.com/HSSkyBoy/NPatch/blob/2c06d1cf6676b7e2d5dc974f63c4d71f56afb887/patch-loader/src/main/java/org/lsposed/lspatch/loader/LSPApplication.java#L168-L175

或者这样workaround

// In XposedInit
private AppComponentFactory mAppComponentFactory;

// In handleLoadPackage
mAppComponentFactory = (AppComponentFactory) lpparam.classLoader.loadClass("com.baidu.nps.hook.component.NPSComponentFactory").newInstance();
XposedHelpers.findAndHookMethod(
        Instrumentation.class,
        "getFactory",
        String.class,
        new XC_MethodHook() {
            @Override
            protected void afterHookedMethod(MethodHookParam param) throws Throwable {
                if (param.args[0].toString().equals("com.baidu.tieba")) {
                    param.setResult(mAppComponentFactory);
                }
            }
        });

Expected behaviour/预期行为

正常打开个人中心

Actual behaviour/实际行为

app卡死

Xposed Module List/Xposed 模块列表

N/A

LSPatch version/LSPatch 版本

04154c8

Android version/Android 版本

14

Shizuku version/Shizuku 版本

N/A

Version requirement/版本要求

Apk file/Apk 文件

No response

Logs/日志

Crash unexpectedly: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.baidu.tieba/com.baidu.tieba.flutter.base.view.FlutterPageActivity}: java.lang.ClassNotFoundException: Didn't find class "com.baidu.tieba.flutter.base.view.FlutterPageActivity" on path: DexPathList[[zip file "/data/user/0/com.baidu.tieba/cache/lspatch/origin/3396398446.apk"],nativeLibraryDirectories=[...]] at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3729) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3963) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:139) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:96) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2468) at com.baidu.tieba.zg$a.handleMessage(SourceFile:105010) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.app.ActivityThread.main(ActivityThread.java:8248) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971) Caused by: java.lang.ClassNotFoundException: Didn't find class "com.baidu.tieba.flutter.base.view.FlutterPageActivity" on path: DexPathList[[zip file "/data/user/0/com.baidu.tieba/cache/lspatch/origin/3396398446.apk"],nativeLibraryDirectories=[...]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at android.app.AppComponentFactory.instantiateActivity(AppComponentFactory.java:95) at android.app.Instrumentation.newActivity(Instrumentation.java:1378) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3716) ... 13 more
HSSkyBoy commented 3 months ago

已经修复了,同时发现本地模式竟然也能正常使用了...