From d93934ace6a726bbe6bf2563cc88980881e1525d Mon Sep 17 00:00:00 2001 From: sunnylqm Date: Wed, 18 Mar 2026 10:44:53 +0000 Subject: [PATCH] fix: Dynamically load JS bundle (from update or assets) to prevent NPE --- .../modules/update/UpdateModuleImpl.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java b/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java index c62294c4..195396c1 100644 --- a/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java +++ b/android/src/main/java/cn/reactnative/modules/update/UpdateModuleImpl.java @@ -150,7 +150,26 @@ public void run() { } final Context application = mContext.getApplicationContext(); - JSBundleLoader loader = JSBundleLoader.createFileLoader(UpdateContext.getBundleUrl(application)); + final Context application = mContext.getApplicationContext(); + String updateBundlePath = updateContext.getBundleUrl(application); + + JSBundleLoader loader; + + if (updateBundlePath != null) { + loader = JSBundleLoader.createFileLoader(updateBundlePath); + } else { + String bundleAssetName = "index.android.bundle"; + try { + ReactInstanceManager defaultInstanceManager = ((ReactApplication) application).getReactNativeHost().getReactInstanceManager(); + String rnBundleAssetName = defaultInstanceManager.getBundleAssetName(); + if (rnBundleAssetName != null && !rnBundleAssetName.isEmpty()) { + bundleAssetName = rnBundleAssetName; + } + } catch (Exception e) { + Log.e(NAME, "Failed to get default asset name from ReactNativeHost: " + e.getMessage()); + } + loader = JSBundleLoader.createAssetLoader(application, bundleAssetName, false); + } try { ReactInstanceManager instanceManager = updateContext.getCustomReactInstanceManager();