software-mansion / react-native-svg

SVG library for React Native, React Native Web, and plain React web projects.
MIT License
7.42k stars 1.12k forks source link

App crashing on Android (com.horcrux.svg.SvgView.onDraw) #1394

Closed 3luyka closed 1 month ago

3luyka commented 4 years ago

Hey there!

I've got several crash reports. This is happens only on Android 10. (Pixel 3 XL / Pixel 2 XL / Pixel 4 XL).

Environment info

System:
    OS: macOS 10.15.5
    CPU: (12) x64 Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
    Memory: 65.89 MB / 16.00 GB
    Shell: 5.7.1 - /bin/zsh
  Binaries:
    Node: 13.8.0 - /usr/local/bin/node
    Yarn: 1.22.0 - /usr/local/bin/yarn
    npm: 6.13.7 - /usr/local/bin/npm
    Watchman: 4.9.0 - /usr/local/bin/watchman
  SDKs:
    iOS SDK:
      Platforms: iOS 13.5, DriverKit 19.0, macOS 10.15, tvOS 13.4, watchOS 6.2
    Android SDK:
      API Levels: 28
      Build Tools: 28.0.3, 29.0.2
      System Images: android-27 | Google Play Intel x86 Atom, android-28 | Intel x86 Atom_64, android-28 | Google APIs Intel x86 Atom, android-28 | Google Play Intel x86 Atom, android-29 | Google Play Intel x86 Atom
      Android NDK: Not Found
  IDEs:
    Android Studio: 3.6 AI-192.7142.36.36.6200805
    Xcode: 11.5/11E608c - /usr/bin/xcodebuild
  Languages:
    Python: 2.7.16 - /usr/bin/python
  npmPackages:
    @react-native-community/cli: Not Found
    react: 16.11.0 => 16.11.0 
    react-native: 0.62.2 => 0.62.2 
  npmGlobalPackages:

Library version: 12.1.0

Crash stack info

java.lang.RuntimeException
com.horcrux.svg.SvgView.onDraw

java.lang.RuntimeException: 
  at android.graphics.RecordingCanvas.throwIfCannotDraw (RecordingCanvas.java:280)
  at android.graphics.BaseRecordingCanvas.drawBitmap (BaseRecordingCanvas.java:69)
  at com.horcrux.svg.SvgView.onDraw (SvgView.java:109)
  at android.view.View.draw (View.java:21975)
  at android.view.View.updateDisplayListIfDirty (View.java:20852)
  at android.view.View.draw (View.java:21707)
  at android.view.ViewGroup.drawChild (ViewGroup.java:4432)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4193)
  at com.facebook.react.views.view.ReactViewGroup.dispatchDraw (ReactViewGroup.java:703)
  at android.view.View.updateDisplayListIfDirty (View.java:20843)
  at android.view.View.draw (View.java:21707)
  at android.view.ViewGroup.drawChild (ViewGroup.java:4432)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4193)
  at com.facebook.react.views.view.ReactViewGroup.dispatchDraw (ReactViewGroup.java:703)
  at android.view.View.updateDisplayListIfDirty (View.java:20843)
  at android.view.View.draw (View.java:21707)
  at android.view.ViewGroup.drawChild (ViewGroup.java:4432)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4193)
  at com.facebook.react.views.view.ReactViewGroup.dispatchDraw (ReactViewGroup.java:703)
  at android.view.View.updateDisplayListIfDirty (View.java:20843)
  at android.view.View.draw (View.java:21707)
  at android.view.ViewGroup.drawChild (ViewGroup.java:4432)
  at android.view.ViewGroup.dispatchDraw (ViewGroup.java:4193)
  at com.facebook.react.ReactRootView.dispatchDraw (ReactRootView.java:232)
  at android.view.View.updateDisplayListIfDirty (View.java:20843)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ViewGroup.recreateChildDisplayList (ViewGroup.java:4416)
  at android.view.ViewGroup.dispatchGetDisplayList (ViewGroup.java:4389)
  at android.view.View.updateDisplayListIfDirty (View.java:20812)
  at android.view.ThreadedRenderer.updateViewTreeDisplayList (ThreadedRenderer.java:581)
  at android.view.ThreadedRenderer.updateRootDisplayList (ThreadedRenderer.java:587)
  at android.view.ThreadedRenderer.draw (ThreadedRenderer.java:664)
  at android.view.ViewRootImpl.draw (ViewRootImpl.java:3767)
  at android.view.ViewRootImpl.performDraw (ViewRootImpl.java:3495)
  at android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:2779)
  at android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1745)
  at android.view.ViewRootImpl$TraversalRunnable.run (ViewRootImpl.java:7768)
  at android.view.Choreographer$CallbackRecord.run (Choreographer.java:967)
  at android.view.Choreographer.doCallbacks (Choreographer.java:791)
  at android.view.Choreographer.doFrame (Choreographer.java:726)
  at android.view.Choreographer$FrameDisplayEventReceiver.run (Choreographer.java:952)
  at android.os.Handler.handleCallback (Handler.java:883)
  at android.os.Handler.dispatchMessage (Handler.java:100)
  at android.os.Looper.loop (Looper.java:214)
  at android.app.ActivityThread.main (ActivityThread.java:7356)
  at java.lang.reflect.Method.invoke (Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:492)
  at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:930)
3luyka commented 4 years ago

Hi @msand, could you please take a look on this?

3luyka commented 4 years ago

This happens when I try to set something like:

<Svg style={{ width: deviceWidth * 3, height: deviceHeight * 3  }} ... />
stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. You may also mark this issue as a "discussion" and I will leave this open.

sushil5 commented 3 years ago

@3luyka did you get any solution on this? I am also facing the same issue.

Namnp1521 commented 1 year ago

+1 same

allpwrfulroot commented 1 year ago

Possible explanation from similar experience: your image gets too darn big, even as vector, especially on hi-res larger-screen devices.

We had a simple SVG resized to several times the device width/height for an animation and encountered this fatal error (in prod 🤦 ); we had been diligent about testing on older devices but less so newer flagships. Trimming down the SVG to only the parts viewable -> decreasing the dimension multiples required from 2x,4x to 1x,2.2x & adding a subtle transform so the animation effect stayed the same -> no more crashes.

Hope that helps someone!

bohdanprog commented 2 months ago

Hello @3luyka, If you still have that problem, please share a simple repro for that problem. Thank you.