fix: remove RiveRenderer.defaultRenderer Canvas override on Android to prevent Earn onboarding crash#31475
Conversation
|
CLA Signature Action: All authors have signed the CLA. You may need to manually re-run the blocking PR check if it doesn't pass in a few minutes. |
🔍 Smart E2E Test Selection
click to see 🤖 AI reasoning detailsE2E Test Selection: Key findings:
Since E2E tests bypass the FoxLoader animation entirely, no E2E tags need to be run for this change. Performance Test Selection: |
Description
Removed the global
RiveRenderer.defaultRenderer(..., RiveRendererAndroid.Canvas)call inFoxLoaderduring app init. Although this lived in the splash-screen loader,defaultRendereris a process-wide setting that forced every Rive view in the app onto Android's Canvas rendererSurface.lockCanvas path. This caused the Money/Earn onboarding stepper to hard-crashSIGABRT/SIGSEGVon Android when the Rive view tore down during tab navigation, the worker thread calledlockCanvason an already-released Surface, leaving a pending JNI exception that ART aborted on. Tombstone confirmed on Pixel 6a / Android 16. Reverting to the default Rive GPU renderer removes thelockCanvascode path entirely.iOS is unaffected (already uses the GPU renderer).
Changelog
CHANGELOG entry: Fixed an Android crash when entering Earn onboarding caused by the Rive Canvas renderer being forced app-wide.
Related issues
Fixes: #31166
#31167
Manual testing steps
Screenshots/Recordings
Screen.Recording.2026-06-10.at.9.14.14.AM.mov
Before
Crash on open
603585807-7134de62-dd23-40dd-862a-b2234e10cb0a.mov
Crash on close
603582891-910de198-bdec-4acf-8f50-50529c7b9dd0.1.mov
After
Screen.Recording.2026-06-10.at.9.14.14.AM.mov
Pre-merge author checklist
Performance checks (if applicable)
trace()for usage andaddTokenfor an exampleFor performance guidelines and tooling, see the Performance Guide.
Pre-merge reviewer checklist
Note
Medium Risk
Small splash-only change with process-wide rendering impact on Android; fixes a production crash but may reintroduce any original Canvas-renderer motivation (e.g. splash geometry).
Overview
Removes the Android-only
RiveRenderer.defaultRenderer(..., RiveRendererAndroid.Canvas)setup fromFoxLoaderso Rive is no longer forced app-wide onto the Canvas renderer during splash init.That global override affected every Rive view (not just the fox splash), which led to SIGABRT/SIGSEGV when Earn/Money onboarding Rive UI tore down during tab navigation (
lockCanvason a released Surface). iOS is unchanged; Android again uses Rive’s default GPU renderer.Reviewed by Cursor Bugbot for commit a212356. Bugbot is set up for automated code reviews on this repo. Configure here.