Enable Hermes in Android. Fixes #8952
Signed-off-by: Pedro Pombeiro <pombeirp@users.noreply.github.com>
This commit is contained in:
parent
e4eabd2810
commit
cc79cf3b3a
5
Makefile
5
Makefile
|
@ -264,6 +264,11 @@ geth-connect: ##@other Connect to Geth on the device
|
||||||
adb forward tcp:8545 tcp:8545 && \
|
adb forward tcp:8545 tcp:8545 && \
|
||||||
build/bin/geth attach http://localhost:8545
|
build/bin/geth attach http://localhost:8545
|
||||||
|
|
||||||
|
android-clean: export TARGET_OS ?= android
|
||||||
|
android-clean: ##@prepare Clean Gradle state
|
||||||
|
git clean -dxf -f ./android/app/build
|
||||||
|
[ -d android/.gradle ] && cd android && ./gradlew clean
|
||||||
|
|
||||||
android-ports: export _NIX_ATTR := targets.mobile.android.adb.shell
|
android-ports: export _NIX_ATTR := targets.mobile.android.adb.shell
|
||||||
android-ports: export TARGET_OS ?= android
|
android-ports: export TARGET_OS ?= android
|
||||||
android-ports: ##@other Add proxies to Android Device/Simulator
|
android-ports: ##@other Add proxies to Android Device/Simulator
|
||||||
|
|
|
@ -79,7 +79,7 @@ import com.sun.org.apache.xalan.internal.xsltc.compiler.Copy
|
||||||
project.ext.react = [
|
project.ext.react = [
|
||||||
nodeExecutableAndArgs: ["node", "--max-old-space-size=16384"],
|
nodeExecutableAndArgs: ["node", "--max-old-space-size=16384"],
|
||||||
entryFile: "index.android.js",
|
entryFile: "index.android.js",
|
||||||
enableHermes: false, // clean and rebuild if changing
|
enableHermes: true, // clean and rebuild if changing. NOTE: Hermes engine is required for Android 64-bit builds running on 64 devices, to guard against a hang in the UI thread after invoking status-go
|
||||||
bundleInPr: true,
|
bundleInPr: true,
|
||||||
inputExcludes: ["android/**", "ios/**", "react-native/**", "src/**", "test/**"]
|
inputExcludes: ["android/**", "ios/**", "react-native/**", "src/**", "test/**"]
|
||||||
]
|
]
|
||||||
|
@ -304,9 +304,11 @@ dependencies {
|
||||||
|
|
||||||
if (enableHermes) {
|
if (enableHermes) {
|
||||||
def hermesPath = "../../node_modules/hermesvm/android/";
|
def hermesPath = "../../node_modules/hermesvm/android/";
|
||||||
debugImplementation files(hermesPath + "hermes-debug.aar")
|
// Force using the release Hermes VM until the perf issues in debug VM are fixed in npm package > 0.1.1 (https://github.com/facebook/hermes/issues/73)
|
||||||
releaseImplementation files(hermesPath + "hermes-release.aar")
|
implementation files(hermesPath + "hermes-release.aar")
|
||||||
prImplementation files(hermesPath + "hermes-release.aar")
|
// debugImplementation files(hermesPath + "hermes-debug.aar")
|
||||||
|
// releaseImplementation files(hermesPath + "hermes-release.aar")
|
||||||
|
// prImplementation files(hermesPath + "hermes-release.aar")
|
||||||
} else {
|
} else {
|
||||||
implementation jscFlavor
|
implementation jscFlavor
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,9 @@ let
|
||||||
mkdir -p ${projectBuildDir}/node_modules
|
mkdir -p ${projectBuildDir}/node_modules
|
||||||
cp -a ${projectNodePackage}/node_modules/. ${projectBuildDir}/node_modules/
|
cp -a ${projectNodePackage}/node_modules/. ${projectBuildDir}/node_modules/
|
||||||
|
|
||||||
|
# Ensure that module was correctly installed
|
||||||
|
[ -d ${projectBuildDir}/node_modules/jsc-android/dist ] || exit 1
|
||||||
|
|
||||||
# Adjust permissions
|
# Adjust permissions
|
||||||
chmod -R u+w ${projectBuildDir}
|
chmod -R u+w ${projectBuildDir}
|
||||||
|
|
||||||
|
@ -145,6 +148,29 @@ let
|
||||||
'nodeExecutableAndArgs: ["node"' \
|
'nodeExecutableAndArgs: ["node"' \
|
||||||
'nodeExecutableAndArgs: ["${nodejs}/bin/node"'
|
'nodeExecutableAndArgs: ["${nodejs}/bin/node"'
|
||||||
|
|
||||||
|
# Fix bugs in Hermes usage (https://github.com/facebook/react-native/issues/25601#issuecomment-510856047)
|
||||||
|
# - Make script always include release Hermes VM, as the debug version is currently way too slow in npm package <= 0.1.1 (https://github.com/facebook/hermes/issues/73)
|
||||||
|
# - Make PR builds also count as release builds
|
||||||
|
# - Fix issue where hermes command is being called with same input/output file
|
||||||
|
substituteInPlace ${projectBuildDir}/node_modules/react-native/react.gradle \
|
||||||
|
--replace \
|
||||||
|
'def isRelease = targetName.toLowerCase().contains("release")' \
|
||||||
|
'def isRelease = true' \
|
||||||
|
--replace \
|
||||||
|
'targetName.toLowerCase().contains("release")' \
|
||||||
|
'!targetName.toLowerCase().contains("debug")' \
|
||||||
|
--replace \
|
||||||
|
'commandLine(getHermesCommand(), "-emit-binary", "-out", jsBundleFile, jsBundleFile, *hermesFlags)' \
|
||||||
|
'def jsBundleFileIn = File.createTempFile("index.android",".tmp")
|
||||||
|
jsBundleFileIn.deleteOnExit()
|
||||||
|
ant.move(
|
||||||
|
file: jsBundleFile,
|
||||||
|
tofile: jsBundleFileIn
|
||||||
|
);
|
||||||
|
commandLine(getHermesCommand(), "-emit-binary", "-out", jsBundleFile, jsBundleFileIn, *hermesFlags)
|
||||||
|
' \
|
||||||
|
|| exit
|
||||||
|
|
||||||
# Patch dependencies which are not yet ported to AndroidX
|
# Patch dependencies which are not yet ported to AndroidX
|
||||||
npx jetify
|
npx jetify
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue