mirror of
https://github.com/react/react-native.git
synced 2026-09-29 16:58:04 +08:00
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: https://github.com/facebook/react-native/pull/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
27 lines
916 B
JavaScript
27 lines
916 B
JavaScript
/**
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
// @flow
|
|
const { execSync } = require('child_process');
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
function main() {
|
|
const packageJsonPath = path.join(__dirname, '../packages/react-native/package.json');
|
|
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
const hermesCompilerVersion = packageJson.dependencies['hermes-compiler'];
|
|
|
|
if (hermesCompilerVersion === '0.0.0') {
|
|
console.log(`Hermes compiler version not set. Updating to the latest-v1 release.`);
|
|
execSync('yarn workspace react-native add hermes-compiler@latest-v1 --exact', { stdio: 'inherit' });
|
|
} else {
|
|
console.log(`Hermes compiler version set to ${hermesCompilerVersion}. Not setting hermes.`);
|
|
}
|
|
}
|
|
|
|
main();
|