1212
1313import com .facebook .react .ReactDelegate ;
1414import com .facebook .react .ReactHost ;
15- import com .facebook .react .ReactInstanceManager ;
1615import com .facebook .react .ReactActivity ;
16+ import com .facebook .react .ReactInstanceManager ;
1717import com .facebook .react .ReactRootView ;
1818import com .facebook .react .bridge .Arguments ;
1919import com .facebook .react .bridge .JSBundleLoader ;
@@ -126,7 +126,9 @@ private void setJSBundle(String latestJSBundleFile) throws IllegalAccessExceptio
126126
127127 ReactHost reactHost = resolveReactHost ();
128128 if (reactHost == null ) {
129+ CodePushUtils .log ("Unable to resolve ReactHost" );
129130 // Bridge, Old Architecture
131+ setJSBundleLoaderBridge (latestJSBundleLoader );
130132 return ;
131133 }
132134
@@ -138,11 +140,27 @@ private void setJSBundle(String latestJSBundleFile) throws IllegalAccessExceptio
138140 }
139141 }
140142
143+ private void setJSBundleLoaderBridge (JSBundleLoader latestJSBundleLoader ) throws NoSuchFieldException , IllegalAccessException {
144+ ReactDelegate reactDelegate = resolveReactDelegate ();
145+ assert reactDelegate != null ;
146+ ReactInstanceManager instanceManager = reactDelegate .getReactInstanceManager ();
147+ Field bundleLoaderField = instanceManager .getClass ().getDeclaredField ("mBundleLoader" );
148+ bundleLoaderField .setAccessible (true );
149+ bundleLoaderField .set (instanceManager , latestJSBundleLoader );
150+ }
151+
141152 @ OptIn (markerClass = UnstableReactNativeAPI .class )
142153 private void setJSBundleLoaderBridgeless (ReactHost reactHost , JSBundleLoader latestJSBundleLoader ) throws NoSuchFieldException , IllegalAccessException {
143- Field mReactHostDelegateField = reactHost .getClass ().getDeclaredField ("mReactHostDelegate" );
144- mReactHostDelegateField .setAccessible (true );
145- ReactHostDelegate reactHostDelegate = (ReactHostDelegate ) mReactHostDelegateField .get (reactHost );
154+ Field reactHostDelegateField ;
155+ try {
156+ // RN < 0.81
157+ reactHostDelegateField = reactHost .getClass ().getDeclaredField ("mReactHostDelegate" );
158+ } catch (NoSuchFieldException e ) {
159+ // RN >= 0.81
160+ reactHostDelegateField = reactHost .getClass ().getDeclaredField ("reactHostDelegate" );
161+ }
162+ reactHostDelegateField .setAccessible (true );
163+ ReactHostDelegate reactHostDelegate = (ReactHostDelegate ) reactHostDelegateField .get (reactHost );
146164 assert reactHostDelegate != null ;
147165 Field jsBundleLoaderField = reactHostDelegate .getClass ().getDeclaredField ("jsBundleLoader" );
148166 jsBundleLoaderField .setAccessible (true );
@@ -216,16 +234,11 @@ private ReactDelegate resolveReactDelegate() {
216234 private ReactHost resolveReactHost () {
217235 ReactDelegate reactDelegate = resolveReactDelegate ();
218236 if (reactDelegate == null ) {
237+ CodePushUtils .log ("Unable to resolve ReactDelegate" );
219238 return null ;
220239 }
221240
222- try {
223- Field reactHostField = reactDelegate .getClass ().getDeclaredField ("mReactHost" );
224- reactHostField .setAccessible (true );
225- return (ReactHost ) reactHostField .get (reactDelegate );
226- } catch (Exception e ) {
227- return null ;
228- }
241+ return reactDelegate .getReactHost ();
229242 }
230243
231244 private void restartAppInternal (boolean onlyIfUpdateIsPending ) {
0 commit comments