Skip to content

fix(jni) ensure correct export of react/uimanager headers in prefab#56215

Open
chrfalch wants to merge 1 commit intomainfrom
chrfalch/fix-missing-uimanager-headers
Open

fix(jni) ensure correct export of react/uimanager headers in prefab#56215
chrfalch wants to merge 1 commit intomainfrom
chrfalch/fix-missing-uimanager-headers

Conversation

@chrfalch
Copy link
Collaborator

@chrfalch chrfalch commented Mar 25, 2026

Summary:

When testing React Native nightlies, we got the following error from react-android-0.86.0-nightly-20260325-d1809f0aa-SNAPSHOT-release:

StateWrapperImpl.h:14:10: fatal error: 'react/uimanager/StateWrapper.h' file not found

The reason is that build.gradle.kts exports src/main/jni/react/fabric → react/fabric/ in the prefab headers, which includes StateWrapperImpl.h. That header does #include <react/uimanager/StateWrapper.h>, but src/main/jni/react/uimanager is not in the prefab export list — so the header is missing from the AAR.

This was introduced in #55288 where they modified StateWrapperImpl.h to inherit from StateWrapper and added the #include on StateWrapper.h.

This has caused Expo's nightlies to break due to the missing header file in the prefabs:

  • Internally (when RN builds itself): Works fine because all JNI source dirs are on the include path
  • Externally (when consumers use the published AAR): StateWrapperImpl.h is included in the prefab, it references <react/uimanager/StateWrapper.h>, but that header doesn't exist in the prefab package

Fix

This commit fixes the above problem by including src/main/jni/react/uimanager in the prefab.

Test Plan:

I have tested and verified this by running this in the root of the repo:

./gradlew :packages:react-native:ReactAndroid:preparePrefab
ls packages/react-native/ReactAndroid/build/prefab-headers/reactnative/react/uimanager/

Before the fix the uimanager folder was not found, with the fix it exists and contains the following files: ComponentNameResolverBinding.h StateWrapper.h UIConstantsProviderBinding.h

Changelog:

[ANDROID] [FIXED] - Fixed missing StateWrapper.h header in prefabs

Potential Issues

There might be an issue with exporting these files in addition to the missing StateWrapper.h - but it seems like this is an issue with other folders in the jni / prefab - everything in a folder is exported when included for prefab.

build.gradle.kts exports src/main/jni/react/fabric → react/fabric/ in the prefab headers, which includes StateWrapperImpl.h. That header does #include <react/uimanager/StateWrapper.h>, but src/main/jni/react/uimanager is not in the prefab export list — so the header is simply missing from the AAR.

This was introduced in #55288 where they modified StateWrapperImpl.h to inherit from StateWrapper and added the #include on StateWrapper.h.

This has caused Expo's nightlies to break due to the missing header file in the prefabs:

- Internally (when RN builds itself): Works fine because all JNI source dirs are on the include path
- Externally (when consumers use the published AAR): StateWrapperImpl.h is included in the prefab, it references <react/uimanager/StateWrapper.h>, but that header doesn't exist in the prefab package

This commit fixes the above problem by including `src/main/jni/react/uimanager` in the prefab.

I have tested and verified this by running this in the root of the repo:

```
./gradlew :packages:react-native:ReactAndroid:preparePrefab
ls packages/react-native/ReactAndroid/build/prefab-headers/reactnative/react/uimanager/
```

Before the fix the uimanager folder was not found, with the fix it exists and contains the following files: ComponentNameResolverBinding.h  StateWrapper.h  UIConstantsProviderBinding.h

There might be an issue with exporting these files in addition to the missing StateWrapper.h - but it seems like this is an issue with other folders in the jni / prefab - everything in a folder is exported when included for prefab.
@meta-cla meta-cla bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Mar 25, 2026
@chrfalch chrfalch requested a review from cortinico March 25, 2026 09:28
@facebook-github-tools facebook-github-tools bot added the Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team. label Mar 25, 2026
@github-actions
Copy link

Caution

Missing Changelog

Please add a Changelog to your PR description. See Changelog format

Copy link
Contributor

@cipolleschi cipolleschi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix!

@meta-codesync
Copy link

meta-codesync bot commented Mar 25, 2026

@cipolleschi has imported this pull request. If you are a Meta employee, you can view this in D98124025.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. p: Expo Partner: Expo Partner Shared with Meta Applied via automation to indicate that an Issue or Pull Request has been shared with the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants