chore(runway): cherry-pick fix: wallet home onboarding Rive crash on Android cp-7.81.0#31106
Merged
Merged
Conversation
…Android cp-7.81.0 (#31042) ## **Description** Fixes a fatal native crash on Android originating in `rive-react-native`'s checklist Rive animation on the wallet home onboarding screen. Affects ~2.3K production users Root cause was in the `.riv` asset not being fully aligned with the code. The wallet home checklist Rive `onboard_checklist_v05.riv` had inconsistent State Machine inputs across its three artboards: - `01_Add_Funds` and `02_First_Trade` were missing the `Main` trigger input that the code fires via `fireState('State Machine 1', 'Main')`. When the code fired a name that didn't match, Rive threw `StateMachineInputException`. `rive-react-native`'s native code doesn't clear the pending Java exception before its next JNI call, violating ART's JNI rules and aborting the process (`SIGABRT` / `SIGSEGV` depending on device). Fix: - Added missing `Main` trigger inputs to `01_Add_Funds` and `02_First_Trade`, wired to the `Intro → Main` transition. - Renamed `"Outro "` to `"Outro"` on `03_Notifications`. - Re-exported as `onboard_checklist_v06.riv`. - Bumped the import in `WalletHomeOnboardingSteps.tsx` from v05 to v06. Verified locally: previously-crashing flows on emulator and arm64 physical device no longer crash, and the ~0.25s animation flicker observed on flagship devices is also gone. ## **Changelog** CHANGELOG entry: Fixed a native crash on Android affecting users on the wallet home onboarding screen. ## **Related issues** Fixes: #31103 #31103 ## **Manual testing steps** ```gherkin Feature: Wallet home onboarding checklist Rive animation Scenario: User steps through the onboarding checklist Given the user has completed primary onboarding on a fresh install And the wallet home onboarding checklist is visible When the user taps Skip or Continue through fund / trade / notifications steps Then the checklist animation plays intro → main → outro on each step And the app does not crash Scenario: User navigates away from a step and returns Given the user is on the trade or notifications step When the user taps the Primary button and navigates to the destination screen And the user returns to the wallet home screen Then the checklist Rive resumes correctly And the app does not crash ``` ## **Screenshots/Recordings** https://github.com/user-attachments/assets/0d84b394-10f3-485f-8689-ad847111ee65 ### **Before** https://github.com/user-attachments/assets/bc562dc8-305c-4e61-a1be-472d68e675aa ### **After** https://github.com/user-attachments/assets/0d84b394-10f3-485f-8689-ad847111ee65 ## **Pre-merge author checklist** - [x] I've followed [MetaMask Contributor Docs](https://github.com/MetaMask/contributor-docs) and [MetaMask Mobile Coding Standards](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/CODING_GUIDELINES.md). - [x] I've completed the PR template to the best of my ability - [x] I've included tests if applicable - [x] I've documented my code using [JSDoc](https://jsdoc.app/) format if applicable - [x] I've applied the right labels on the PR (see [labeling guidelines](https://github.com/MetaMask/metamask-mobile/blob/main/.github/guidelines/LABELING_GUIDELINES.md)). Not required for external contributors. #### Performance checks (if applicable) - [x] I've tested on Android - Ideally on a mid-range device; emulator is acceptable - [x] I've tested with a power user scenario - Use these [power-user SRPs](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/edit-v2/401401446401?draftShareId=9d77e1e1-4bdc-4be1-9ebb-ccd916988d93) to import wallets with many accounts and tokens - [x] I've instrumented key operations with Sentry traces for production performance metrics - See [`trace()`](/app/util/trace.ts) for usage and [`addToken`](/app/components/Views/AddAsset/components/AddCustomToken/AddCustomToken.tsx#L274) for an example For performance guidelines and tooling, see the [Performance Guide](https://consensyssoftware.atlassian.net/wiki/spaces/TL1/pages/400085549067/Performance+Guide+for+Engineers). ## **Pre-merge reviewer checklist** <!-- Reviewer checklist items follow the same semantics as the author checklist: an unchecked box is ambiguous, a checked box means the reviewer consciously assessed that responsibility. See `docs/readme/ready-for-review.md`. --> - [x] I've manually tested the PR (e.g. pull and build branch, run the app, test code being changed). - [x] I confirm that this PR addresses all acceptance criteria described in the ticket it closes and includes the necessary testing evidence such as recordings and or screenshots. <!-- CURSOR_SUMMARY --> --- > [!NOTE] > **Low Risk** > Binary animation asset plus a single import path change; no auth, payments, or business-logic changes beyond fixing Rive input names. > > **Overview** > Fixes a **production Android native crash** on wallet home post-onboarding when the checklist Rive animation runs. The app already drives **`Main`** and **`Outro`** on **`State Machine 1`** via `fireState`; **`onboard_checklist_v05.riv`** was out of sync (missing **`Main`** on the fund and trade artboards, and a mismatched outro input name on notifications), which led to `StateMachineInputException` and a fatal JNI abort in `rive-react-native`. > > The change **re-exports the animation as `onboard_checklist_v06.riv`** with aligned triggers and transitions, and **points `WalletHomeOnboardingSteps` at v06** instead of v05. No change to the checklist flow logic beyond the asset swap. > > <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 1945d4f. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup> <!-- /CURSOR_SUMMARY -->
Contributor
|
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. |
Contributor
🔍 Smart E2E Test Selection⏭️ Smart E2E selection skipped - PR targets a release or stable branch (release/* or stable) All E2E tests pre-selected. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## release/7.81.0 #31106 +/- ##
=================================================
Coverage ? 82.98%
=================================================
Files ? 5606
Lines ? 144394
Branches ? 33543
=================================================
Hits ? 119829
Misses ? 16497
Partials ? 8068 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
tommasini
approved these changes
Jun 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Fixes a fatal native crash on Android originating in
rive-react-native's checklist Rive animation on the wallet homeonboarding screen. Affects ~2.3K production users
Root cause was in the
.rivasset not being fully aligned with thecode. The wallet home checklist Rive
onboard_checklist_v05.rivhadinconsistent State Machine inputs across its three artboards:
01_Add_Fundsand02_First_Tradewere missing theMaintriggerinput that the code fires via
fireState('State Machine 1', 'Main').When the code fired a name that didn't match, Rive threw
StateMachineInputException.rive-react-native's native code doesn'tclear the pending Java exception before its next JNI call, violating
ART's JNI rules and aborting the process (
SIGABRT/SIGSEGVdepending on device).
Fix:
Maintrigger inputs to01_Add_Fundsand02_First_Trade, wired to theIntro → Maintransition."Outro "to"Outro"on03_Notifications.onboard_checklist_v06.riv.WalletHomeOnboardingSteps.tsxfrom v05 to v06.Verified locally: previously-crashing flows on emulator and arm64
physical device no longer crash, and the ~0.25s animation flicker
observed on flagship devices is also gone.
Changelog
CHANGELOG entry: Fixed a native crash on Android affecting users on the
wallet home onboarding screen.
Related issues
Fixes: #31103
#31103
Manual testing steps
Screenshots/Recordings
Screen.Recording.2026-06-03.at.2.24.41.PM.mov
Before
Screen.Recording.2026-06-03.at.12.13.53.PM.mov
After
Screen.Recording.2026-06-03.at.2.24.41.PM.mov
Pre-merge author checklist
Docs and MetaMask Mobile
Coding
Standards.
if applicable
guidelines).
Not required for external contributors.
Performance checks (if applicable)
SRPs
to import wallets with many accounts and tokens
performance metrics
trace()for usage andaddTokenfor an example
For performance guidelines and tooling, see the Performance
Guide.
Pre-merge reviewer checklist
app, test code being changed).
in the ticket it closes and includes the necessary testing evidence such
as recordings and or screenshots.
Note
Low Risk
Binary animation asset plus a single import path change; no auth,
payments, or business-logic changes beyond fixing Rive input names.
Overview
Fixes a production Android native crash on wallet home
post-onboarding when the checklist Rive animation runs. The app already
drives
MainandOutroonState Machine 1viafireState;onboard_checklist_v05.rivwas out of sync (missingMainon the fund and trade artboards, and a mismatched outro inputname on notifications), which led to
StateMachineInputExceptionand afatal JNI abort in
rive-react-native.The change re-exports the animation as
onboard_checklist_v06.rivwith aligned triggers and transitions, and points
WalletHomeOnboardingStepsat v06 instead of v05. No change to thechecklist flow logic beyond the asset swap.
Reviewed by Cursor Bugbot for commit
1945d4f. Bugbot is set up for automated
code reviews on this repo. Configure
here.