Skip to content
Permalink
Browse files
If JSC fails to load when starting RN, expose that error to the caller
Summary:
See the comments for more info.

Changelog: [Android] [Changed] - Improve exception message when JSC loading fails

Reviewed By: tmikov

Differential Revision: D19917034

fbshipit-source-id: d846f542c31e9c94edcee240c2935d77d48d1f2a
  • Loading branch information
mhorowitz authored and facebook-github-bot committed Feb 18, 2020
1 parent ef021ea commit 65d3167a802b2ca04d4f05ff972c2d51765f1e0d
Showing 1 changed file with 27 additions and 1 deletion.
@@ -297,8 +297,34 @@ private JavaScriptExecutorFactory getDefaultJSExecutorFactory(
SoLoader.loadLibrary("jscexecutor");
return new JSCExecutorFactory(appName, deviceName);
} catch (UnsatisfiedLinkError jscE) {
// https://github.com/facebook/hermes/issues/78 shows that
// people who aren't trying to use Hermes are having issues.
// https://github.com/facebook/react-native/issues/25923#issuecomment-554295179
// includes the actual JSC error in at least one case.
//
// So, if "__cxa_bad_typeid" shows up in the jscE exception
// message, then we will assume that's the failure and just
// throw now.

if (jscE.getMessage().contains("__cxa_bad_typeid")) {
throw jscE;
}

// Otherwise use Hermes
return new HermesExecutorFactory();
try {
return new HermesExecutorFactory();

This comment has been minimized.

Copy link
@iqqmuT

iqqmuT Jan 19, 2021

Contributor

This line never throws UnsatisfiedLinkError exception. See PR #30749

} catch (UnsatisfiedLinkError hermesE) {
// If we get here, either this is a JSC build, and of course
// Hermes failed (since it's not in the APK), or it's a Hermes
// build, and Hermes had a problem.

// We suspect this is a JSC issue (it's the default), so we
// will throw that exception, but we will print hermesE first,
// since it could be a Hermes issue and we don't want to
// swallow that.
hermesE.printStackTrace();
throw jscE;
}
}
}
}

0 comments on commit 65d3167

Please sign in to comment.