Skip to content

Commit 0ee0608

Browse files
committed
fix(Android): update not working properly
1 parent 763b06b commit 0ee0608

File tree

2 files changed

+14
-19
lines changed

2 files changed

+14
-19
lines changed

android/app/proguard-rules.pro

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,6 @@
2020
-keepclassmembers class com.facebook.react.ReactInstanceManager {
2121
private final ** mBundleLoader;
2222
}
23-
-keepclassmembers class com.facebook.react.ReactDelegate {
24-
private ** mReactHost; # RN < 0.81
25-
private ** reactHost; # RN 0.81+
26-
public void reload(...); # RN 0.74 and above
27-
}
2823
# bridgeless
2924
-keepclassmembers class com.facebook.react.defaults.DefaultReactHostDelegate {
3025
private ** jsBundleLoader;

android/app/src/main/java/com/microsoft/codepush/react/CodePushNativeModule.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import com.facebook.react.ReactDelegate;
1414
import com.facebook.react.ReactHost;
1515
import com.facebook.react.ReactActivity;
16+
import com.facebook.react.ReactInstanceManager;
1617
import com.facebook.react.ReactRootView;
1718
import com.facebook.react.bridge.Arguments;
1819
import com.facebook.react.bridge.JSBundleLoader;
@@ -125,7 +126,9 @@ private void setJSBundle(String latestJSBundleFile) throws IllegalAccessExceptio
125126

126127
ReactHost reactHost = resolveReactHost();
127128
if (reactHost == null) {
129+
CodePushUtils.log("Unable to resolve ReactHost");
128130
// Bridge, Old Architecture
131+
setJSBundleLoaderBridge(latestJSBundleLoader);
129132
return;
130133
}
131134

@@ -137,6 +140,15 @@ private void setJSBundle(String latestJSBundleFile) throws IllegalAccessExceptio
137140
}
138141
}
139142

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+
140152
@OptIn(markerClass = UnstableReactNativeAPI.class)
141153
private void setJSBundleLoaderBridgeless(ReactHost reactHost, JSBundleLoader latestJSBundleLoader) throws NoSuchFieldException, IllegalAccessException {
142154
Field reactHostDelegateField;
@@ -222,23 +234,11 @@ private ReactDelegate resolveReactDelegate() {
222234
private ReactHost resolveReactHost() {
223235
ReactDelegate reactDelegate = resolveReactDelegate();
224236
if (reactDelegate == null) {
237+
CodePushUtils.log("Unable to resolve ReactDelegate");
225238
return null;
226239
}
227240

228-
try {
229-
Field reactHostField;
230-
try {
231-
// RN < 0.81
232-
reactHostField = reactDelegate.getClass().getDeclaredField("mReactHost");
233-
} catch (NoSuchFieldException e) {
234-
// RN >= 0.81
235-
reactHostField = reactDelegate.getClass().getDeclaredField("reactHost");
236-
}
237-
reactHostField.setAccessible(true);
238-
return (ReactHost) reactHostField.get(reactDelegate);
239-
} catch (Exception e) {
240-
return null;
241-
}
241+
return reactDelegate.getReactHost();
242242
}
243243

244244
private void restartAppInternal(boolean onlyIfUpdateIsPending) {

0 commit comments

Comments
 (0)