Skip to content

Commit 45ceacc

Browse files
cipolleschimeta-codesync[bot]
authored andcommitted
Use Hermes V1 by default (#56476)
Summary: The recent introduction of the `IRuntime` JSI interface moved `ScopeState` from `Runtime` to `IRuntime`, changing the C++ ABI (mangled symbol names). The Android build was still consuming a legacy Hermes nightly (`hermes-compiler@nightly`) that was built against the old JSI headers, causing an `UnsatisfiedLinkError` crash at startup: ``` dlopen failed: cannot locate symbol "_ZN8facebook3jsi7Runtime8popScopeEPNS1_10ScopeStateE" referenced by "libhermesvm.so" ``` This PR aligns Android with how iOS already handles Hermes V1: 1. **`scripts/try-set-nightly-hermes-compiler.js`** — The `yarn install` preinstall hook now installs `hermes-compiler@latest-v1` instead of `hermes-compiler@nightly`. This is the same npm dist-tag that iOS uses in `scripts/ios-prebuild/hermes.js`. 2. **`build.gradle.kts`** — When `hermesV1Enabled=true`, the Hermes version from `package.json` is used as-is (no `-SNAPSHOT` suffix), since V1 stable releases are published as regular Maven artifacts, not snapshots. 3. **`version.properties`** — Bumps `HERMES_V1_VERSION_NAME` from `250829098.0.11` to `250829098.0.12` for release builds and iOS podspec. ## Changelog: [ANDROID] [FIXED] - Use Hermes V1 stable release instead of legacy nightly to fix startup crash caused by JSI ABI mismatch Pull Request resolved: #56476 Test Plan: - Run `yarn install` from the repo root and verify `hermes-compiler` in `packages/react-native/package.json` is set to the `latest-v1` version (currently `250829098.0.12`) - Run `yarn android` from `packages/rn-tester` and verify the app launches without crashing - Verify CI `build_android` job passes Reviewed By: javache Differential Revision: D101247487 Pulled By: cipolleschi fbshipit-source-id: c006e76969bb1bc27a9305ea97d5cff4b504ff1f
1 parent 089276a commit 45ceacc

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

build.gradle.kts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,15 @@ if (project.findProperty("react.internal.useHermesStable")?.toString()?.toBoolea
137137
)
138138
}
139139

140-
hermesSubstitution = "$hermesCompilerVersion-SNAPSHOT" to "Users opted to use hermes nightly"
140+
val hermesV1Enabled = project.findProperty("hermesV1Enabled")?.toString()?.toBoolean() ?: true
141+
// Hermes V1 stable releases are published without the -SNAPSHOT suffix.
142+
// Legacy nightly builds use -SNAPSHOT.
143+
val resolvedVersion =
144+
if (hermesV1Enabled) hermesCompilerVersion else "$hermesCompilerVersion-SNAPSHOT"
145+
val reason =
146+
if (hermesV1Enabled) "Users opted to use hermes V1 stable"
147+
else "Users opted to use hermes nightly"
148+
hermesSubstitution = resolvedVersion to reason
141149
} else {
142150
logger.warn(
143151
"""
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
HERMES_VERSION_NAME=1000.0.0
2-
HERMES_V1_VERSION_NAME=250829098.0.11
2+
HERMES_V1_VERSION_NAME=250829098.0.12

scripts/try-set-nightly-hermes-compiler.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ function main() {
1616
const hermesCompilerVersion = packageJson.dependencies['hermes-compiler'];
1717

1818
if (hermesCompilerVersion === '0.0.0') {
19-
console.log(`Hermes compiler version not set. Updating to the latest nightly release.`);
20-
execSync('yarn workspace react-native add hermes-compiler@nightly --exact', { stdio: 'inherit' });
19+
console.log(`Hermes compiler version not set. Updating to the latest-v1 release.`);
20+
execSync('yarn workspace react-native add hermes-compiler@latest-v1 --exact', { stdio: 'inherit' });
2121
} else {
22-
console.log(`Hermes compiler version set to ${hermesCompilerVersion}. Not setting nightly hermes.`);
22+
console.log(`Hermes compiler version set to ${hermesCompilerVersion}. Not setting hermes.`);
2323
}
2424
}
2525

0 commit comments

Comments
 (0)