Commit 3a95e0e
Summary:
Fixes crashes using <Image> component on android with props 2.0 enabled using feature flag:
```
enablePropsUpdateReconciliationAndroid
```
<details>
<summary>Crash stack</summary>
```
Error while updating prop source
java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: com.facebook.react.bridge.NoSuchKeyException: width
at com.facebook.react.bridge.ReadableNativeMap.getValue(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:3)
at com.facebook.react.bridge.ReadableNativeMap.getDouble(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at r2.l.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:143)
at com.facebook.react.views.image.ReactImageManager.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Exception thrown when executing UIFrameGuarded
com.facebook.react.bridge.JSApplicationIllegalArgumentException: Error while updating property 'source' of a view managed by: RCTImageView
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:144)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: com.facebook.react.bridge.NoSuchKeyException: width
at com.facebook.react.bridge.ReadableNativeMap.getValue(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:3)
at com.facebook.react.bridge.ReadableNativeMap.getDouble(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at r2.l.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:143)
at com.facebook.react.views.image.ReactImageManager.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
ReactHost{0}.handleHostException(message = "Error while updating property 'source' of a view managed by: RCTImageView")
Shutting down VM
FATAL EXCEPTION: main
Process: com.facebook.react.uiapp, PID: 23676
com.facebook.react.bridge.JSApplicationIllegalArgumentException: Error while updating property 'source' of a view managed by: RCTImageView
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:144)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
Caused by: com.facebook.react.bridge.NoSuchKeyException: width
at com.facebook.react.bridge.ReadableNativeMap.getValue(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:3)
at com.facebook.react.bridge.ReadableNativeMap.getDouble(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at r2.l.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:143)
at com.facebook.react.views.image.ReactImageManager.setSource(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:6)
at java.lang.reflect.Method.invoke(Native Method)
at G0.a.q(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:89)
at com.facebook.react.uimanager.ViewManager.updateProperties(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:33)
at com.facebook.react.uimanager.ViewManager.createViewInstance(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:12)
at com.facebook.react.uimanager.ViewManager.createView(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at q1.h.b(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:62)
at r1.g.execute(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:67)
at q1.b.d(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:71)
at q1.b.c(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:64)
at m1.j.a(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:100)
at com.facebook.react.uimanager.d.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:1)
at E1.o.doFrame(r8-map-id-1a92cc952529f7daea85f71c4ad30656f52b60c3e338ced74ff1293d461ae7b1:98)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2457)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:2468)
at android.view.Choreographer.doCallbacks(Choreographer.java:1693)
at android.view.Choreographer.doAnimationLoad(Choreographer.java:1523)
at android.view.Choreographer.doFrame(Choreographer.java:1438)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:2284)
at android.os.Handler.handleCallback(Handler.java:1014)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:250)
at android.os.Looper.loop(Looper.java:340)
at android.app.ActivityThread.main(ActivityThread.java:9911)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:621)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:957)
```
</details>
On android we pass the `defaultSource` and `loadingIndicatorSrc` as strings. however, when enabling prop diffing this causes crashes, as the prop diff mechanism is parsing them to `ImageSource` as defined in `ImageProps.h`.
W/o props 2.0 diffing we simply return the props as we receive them from JS (with those sources as string):
https://github.com/facebook/react-native/blob/c12806c4937ea76d65e89e6f0857e4c96e47c927/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp#L341
With props diffing …
https://github.com/facebook/react-native/blob/c12806c4937ea76d65e89e6f0857e4c96e47c927/packages/react-native/ReactAndroid/src/main/jni/react/fabric/FabricMountingManager.cpp#L309
… We actually transform them to the c++ object:
https://github.com/facebook/react-native/blob/c12806c4937ea76d65e89e6f0857e4c96e47c927/packages/react-native/ReactCommon/react/renderer/components/image/ImageProps.cpp#L210-L215
https://github.com/facebook/react-native/blob/c12806c4937ea76d65e89e6f0857e4c96e47c927/packages/react-native/ReactCommon/react/renderer/components/image/ImageProps.h#L29-L30
https://github.com/facebook/react-native/blob/c12806c4937ea76d65e89e6f0857e4c96e47c927/packages/react-native/ReactCommon/react/renderer/imagemanager/primitives.h#L47-L74
This throws errors and crashes the app:
https://github.com/user-attachments/assets/04d20369-f49a-4170-8747-643766fba971
I think the proper solution here is to pass the full objects down, with or without props 2.0 diffing and handle the objects in native code correctly. This way android aligns with the iOS implementation too.
## Changelog:
<!-- Help reviewers and the release process by writing your own changelog entry.
Pick one each for the category and type tags:
[ANDROID|GENERAL|IOS|INTERNAL] [BREAKING|ADDED|CHANGED|DEPRECATED|REMOVED|FIXED|SECURITY] - Message
For more details, see:
https://reactnative.dev/contributing/changelogs-in-pull-requests
-->
[Android][Fixed] - Fix `<Image>` crash with `defaultSource` and `loadingIndicatorSource` when `enablePropsUpdateReconciliationAndroid` is enabled
[Android][Added] - Add `Dynamic` overloads of `ReactImageManager#setDefaultSource` and `ReactImageManager#setLoadingIndicatorSource` that accept either a uri string or an image source object
[Android][Deprecated] - Deprecate the `String?` overloads of `ReactImageManager#setDefaultSource` and `ReactImageManager#setLoadingIndicatorSource`
Pull Request resolved: #55210
Test Plan:
1. Test that the defaultProp example in RNTester is working
2. Enable props 2.0 diffing mechanism:
```diff
diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt
index bb0a6b5..04fcbf4ba8f 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android.kt
@@ -11,4 +11,8 @@ public class ReactNativeFeatureFlagsOverrides_RNOSS_Stable_Android() :
ReactNativeNewArchitectureFeatureFlagsDefaults() {
override fun useFabricInterop(): Boolean = true
+
+ override fun enableAccumulatedUpdatesInRawPropsAndroid(): Boolean = true
+ override fun enablePropsUpdateReconciliationAndroid(): Boolean = true
+ override fun enableExclusivePropsUpdateAndroid(): Boolean = true
}
```
3. Test all image examples:
- Verify there is no crash
- Verify defaultSource example is working
Recordings:
| Debug | Release |
|--------|--------|
| <video src="https://github.com/user-attachments/assets/df5d75e7-4666-4201-81e7-39271c54fe0b" /> | <video src="https://github.com/user-attachments/assets/d64fcefd-6d1f-4d84-8581-363ff572a721" /> |
Note: this uses the example setup from this PR in the recordings:
- #55234
Reviewed By: cortinico
Differential Revision: D112105149
Pulled By: coado
fbshipit-source-id: 966afaeedee93b88a7767e6f46d1521a02902dd0
1 parent 917d97e commit 3a95e0e
3 files changed
Lines changed: 39 additions & 3 deletions
File tree
- packages/react-native
- ReactAndroid
- api
- src/main/java/com/facebook/react/views/image
- ReactCommon/react/renderer/components/image
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5313 | 5313 | | |
5314 | 5314 | | |
5315 | 5315 | | |
| 5316 | + | |
5316 | 5317 | | |
5317 | 5318 | | |
5318 | 5319 | | |
5319 | 5320 | | |
5320 | 5321 | | |
| 5322 | + | |
5321 | 5323 | | |
5322 | 5324 | | |
5323 | 5325 | | |
| |||
Lines changed: 30 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
| 15 | + | |
15 | 16 | | |
16 | 17 | | |
| 18 | + | |
17 | 19 | | |
18 | 20 | | |
19 | 21 | | |
| |||
133 | 135 | | |
134 | 136 | | |
135 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
136 | 146 | | |
137 | 147 | | |
138 | 148 | | |
139 | 149 | | |
140 | 150 | | |
141 | 151 | | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
142 | 160 | | |
143 | 161 | | |
144 | 162 | | |
145 | 163 | | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
146 | 176 | | |
147 | 177 | | |
148 | 178 | | |
| |||
Lines changed: 7 additions & 3 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
27 | 27 | | |
28 | 28 | | |
29 | 29 | | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
30 | 34 | | |
31 | 35 | | |
32 | 36 | | |
33 | | - | |
| 37 | + | |
34 | 38 | | |
35 | 39 | | |
36 | 40 | | |
| |||
115 | 119 | | |
116 | 120 | | |
117 | 121 | | |
118 | | - | |
| 122 | + | |
119 | 123 | | |
120 | 124 | | |
121 | 125 | | |
| |||
167 | 171 | | |
168 | 172 | | |
169 | 173 | | |
170 | | - | |
| 174 | + | |
171 | 175 | | |
172 | 176 | | |
173 | 177 | | |
| |||
0 commit comments