Skip to main content
Question

Android Error: Software rendering doesn't support hardware bitmaps

  • April 6, 2025
  • 1 reply
  • 30 views

Forum|alt.badge.img

Hi, I’m working on an Expo/React Native project which is nearly completed.

 

On iOS, everything has been working perfectly - I’m using a V2 paywall.

 

On Android, opening the paywall crashes the app, with the following error:

java.lang.IllegalArgumentException: Software rendering doesn't support hardware bitmaps
  android.graphics.BaseCanvas.throwIfHwBitmapInSwMode(BaseCanvas.java:726)
  android.graphics.BaseCanvas.throwIfCannotDraw(BaseCanvas.java:81)
  android.graphics.BaseCanvas.drawBitmap(BaseCanvas.java:139)
  android.graphics.Canvas.drawBitmap(Canvas.java:1604)
  androidx.compose.ui.graphics.AndroidCanvas.drawImageRect-HPBpro0(AndroidCanvas.android.kt:275)
  androidx.compose.ui.graphics.drawscope.CanvasDrawScope.drawImage-AZ2fEMs(CanvasDrawScope.kt:260)
  androidx.compose.ui.node.LayoutNodeDrawScope.drawImage-AZ2fEMs(Unknown Source:24)
  androidx.compose.ui.graphics.drawscope.DrawScope.drawImage-AZ2fEMs$default(DrawScope.kt:587)
  androidx.compose.ui.graphics.painter.BitmapPainter.onDraw(BitmapPainter.kt:93)
  androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:212)
  coil.compose.CrossfadePainter.drawPainter(CrossfadePainter.kt:115)
  coil.compose.CrossfadePainter.onDraw(CrossfadePainter.kt:62)
  androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:212)
  coil.compose.AsyncImagePainter.onDraw(AsyncImagePainter.kt:207)
  androidx.compose.ui.graphics.painter.Painter.draw-x_KDEd0(Painter.kt:212)
  coil.compose.ContentPainterModifier.draw(ContentPainterModifier.kt:188)
  androidx.compose.ui.node.BackwardsCompatNode.draw(BackwardsCompatNode.kt:350)
  androidx.compose.ui.node.LayoutNodeDrawScope.drawDirect-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:110)
  androidx.compose.ui.node.LayoutNodeDrawScope.draw-eZhPAX0$ui_release(LayoutNodeDrawScope.kt:89)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:450)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:503)
  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
  androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
  androidx.compose.ui.platform.GraphicsLayerOwnerLayer.drawLayer(GraphicsLayerOwnerLayer.android.kt:271)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:434)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:503)
  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
  androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
  androidx.compose.ui.platform.GraphicsLayerOwnerLayer.drawLayer(GraphicsLayerOwnerLayer.android.kt:271)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:434)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:503)
  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
  androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
  androidx.compose.ui.platform.GraphicsLayerOwnerLayer.drawLayer(GraphicsLayerOwnerLayer.android.kt:271)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:434)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:503)
  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
  androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
  androidx.compose.ui.platform.GraphicsLayerOwnerLayer.drawLayer(GraphicsLayerOwnerLayer.android.kt:271)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:434)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutModifierNodeCoordinator.performDraw(LayoutModifierNodeCoordinator.kt:280)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.access$drawContainedDrawModifiers(NodeCoordinator.kt:58)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:469)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:2441)
  androidx.compose.runtime.snapshots.SnapshotStateObserver$ObservedScopeMap.observe(SnapshotStateObserver.kt:502)
  androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:258)
  androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:133)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:468)
  androidx.compose.ui.node.NodeCoordinator$drawBlock$1.invoke(NodeCoordinator.kt:466)
  androidx.compose.ui.platform.GraphicsLayerOwnerLayer.drawLayer(GraphicsLayerOwnerLayer.android.kt:271)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:434)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.node.InnerNodeCoordinator.performDraw(InnerNodeCoordinator.kt:196)
  androidx.compose.ui.node.NodeCoordinator.drawContainedDrawModifiers(NodeCoordinator.kt:447)
  androidx.compose.ui.node.NodeCoordinator.draw(NodeCoordinator.kt:439)
  androidx.compose.ui.node.LayoutNode.draw$ui_release(LayoutNode.kt:1000)
  androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.android.kt:1564)
  android.view.View.draw(View.java:23892)
  android.view.View.draw(View.java:23762)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23892)
  com.facebook.react.views.view.ReactViewGroup.draw(ReactViewGroup.java:971)
  android.view.View.draw(View.java:23762)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  com.facebook.react.views.view.ReactViewGroup.drawChild(ReactViewGroup.java:1030)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.views.view.ReactViewGroup.dispatchDraw(ReactViewGroup.java:981)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  com.facebook.react.ReactRootView.dispatchDraw(ReactRootView.java:285)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  android.view.View.draw(View.java:23760)
  android.view.ViewGroup.drawChild(ViewGroup.java:4556)
  android.view.ViewGroup.dispatchDraw(ViewGroup.java:4317)
  android.view.View.draw(View.java:23892)
  eightbitlab.com.blurview.PreDrawBlurController.updateBlur(PreDrawBlurController.java:120)
  eightbitlab.com.blurview.PreDrawBlurController$1.onPreDraw(PreDrawBlurController.java:51)
  android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:1176)
  android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3772)
  android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2465)
  android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9305)
  android.view.Choreographer$CallbackRecord.run(Choreographer.java:1339)
  android.view.Choreographer$CallbackRecord.run(Choreographer.java:1348)
  android.view.Choreographer.doCallbacks(Choreographer.java:952)
  android.view.Choreographer.doFrame(Choreographer.java:882)
  android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1322)
  android.os.Handler.handleCallback(Handler.java:958)
  android.os.Handler.dispatchMessage(Handler.java:99)
  android.os.Looper.loopOnce(Looper.java:205)
  android.os.Looper.loop(Looper.java:294)
  android.app.ActivityThread.main(ActivityThread.java:8177)
  java.lang.reflect.Method.invoke(Native Method)
  com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
  com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

 

Google has not turned up much useful, and I didn’t have any success with the suggestions from various LLMs. 

 

This is the same behaviour on the simulator or a physical device. Any help appreciated!

This post has been closed for comments

1 reply

Forum|alt.badge.img+8
  • RevenueCat Staff
  • 556 replies
  • April 9, 2025

Hi ​@finn-lawrence I responded to your ticket internally and will post the resolution here later


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings