From ca09548a8519eb366bd0ca026fecb0bd57b9b82e Mon Sep 17 00:00:00 2001 From: Max Ammann Date: Mon, 2 Nov 2020 19:38:34 +0100 Subject: [PATCH 1/5] Filter merged_native_libs instead of transforms Summary: * Execute vmSelectionAction before strip${targetName}DebugSymbols instead of package${targetName} * Remove .so files from merged_native_libs such that they don't get copied to stripped_native_libs --- react.gradle | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/react.gradle b/react.gradle index 5995ad5fbb32..e19591ee68c1 100644 --- a/react.gradle +++ b/react.gradle @@ -317,10 +317,12 @@ afterEvaluate { // // This should really be done by packaging all Hermes releated libs into // two separate HermesDebug and HermesRelease AARs, but until then we'll - // kludge it by deleting the .so files out of the /transforms/ directory. + // kludge it by deleting the .so files out of the /merged_native_libs/ directory. def isRelease = targetName.toLowerCase().contains("release") - def libDir = "$buildDir/intermediates/transforms/" + def libDir = "$buildDir/intermediates/merged_native_libs" def vmSelectionAction = { + logger.error("$buildDir") + logger.error("vmSelectionActionvmSelectionAction") fileTree(libDir).matching { if (enableHermes) { // For Hermes, delete all the libjsc* files @@ -340,16 +342,14 @@ afterEvaluate { include "**/libhermes*.so" } }.visit { details -> - def targetVariant = ".*/transforms/[^/]*/${targetPath}/.*" - def path = details.file.getAbsolutePath().replace(File.separatorChar, '/' as char) - if (path.matches(targetVariant) && details.file.isFile()) { + if (details.file.isFile()) { details.file.delete() } } } if (enableVmCleanup) { - def task = tasks.findByName("package${targetName}") + def task = tasks.findByName("strip${targetName}DebugSymbols") task.doFirst(vmSelectionAction) } } From 9c0f41e0dfd327fa1f6164c96fb3173d1b830019 Mon Sep 17 00:00:00 2001 From: Max Ammann Date: Mon, 2 Nov 2020 19:48:40 +0100 Subject: [PATCH 2/5] Remove debug lines --- react.gradle | 2 -- 1 file changed, 2 deletions(-) diff --git a/react.gradle b/react.gradle index e19591ee68c1..3a9ba82a6e46 100644 --- a/react.gradle +++ b/react.gradle @@ -321,8 +321,6 @@ afterEvaluate { def isRelease = targetName.toLowerCase().contains("release") def libDir = "$buildDir/intermediates/merged_native_libs" def vmSelectionAction = { - logger.error("$buildDir") - logger.error("vmSelectionActionvmSelectionAction") fileTree(libDir).matching { if (enableHermes) { // For Hermes, delete all the libjsc* files From 577eb2bf7f457e442647489391ce73b73e4f50a9 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 6 Nov 2020 14:14:42 +0100 Subject: [PATCH 3/5] Replace hacky library exclusion by using the android api --- react.gradle | 58 +++++++++++++++++----------------------------------- 1 file changed, 19 insertions(+), 39 deletions(-) diff --git a/react.gradle b/react.gradle index 3a9ba82a6e46..bc36f770cc0d 100644 --- a/react.gradle +++ b/react.gradle @@ -94,6 +94,25 @@ android { resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort() resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort() } + + packagingOptions { + // Delete the VM related libraries that this build doesn't need. + // The application can manage this manually by setting 'enableVmCleanup: false' + // + // This should really be done by packaging all Hermes related libs into + // two separate HermesDebug and HermesRelease AARs, but until then we'll just exclude them here + if (config.enableHermes && enableVmCleanup) { + def taskName = getGradle().getStartParameter().getTaskRequests().toString() + + exclude "**/libjsc*.so" + if (taskName.toLowerCase().contains("release")) { + exclude '**/libhermes-inspector.so' + exclude '**/libhermes-executor-debug.so' + } else { + exclude '**/libhermes-executor-release.so' + } + } + } } afterEvaluate { @@ -311,44 +330,5 @@ afterEvaluate { if (buildPreBundleTask != null) { buildPreBundleTask.dependsOn(currentAssetsCopyTask) } - - // Delete the VM related libraries that this build doesn't need. - // The application can manage this manually by setting 'enableVmCleanup: false' - // - // This should really be done by packaging all Hermes releated libs into - // two separate HermesDebug and HermesRelease AARs, but until then we'll - // kludge it by deleting the .so files out of the /merged_native_libs/ directory. - def isRelease = targetName.toLowerCase().contains("release") - def libDir = "$buildDir/intermediates/merged_native_libs" - def vmSelectionAction = { - fileTree(libDir).matching { - if (enableHermes) { - // For Hermes, delete all the libjsc* files - include "**/libjsc*.so" - - if (isRelease) { - // Reduce size by deleting the debugger/inspector - include '**/libhermes-inspector.so' - include '**/libhermes-executor-debug.so' - } else { - // Release libs take precedence and must be removed - // to allow debugging - include '**/libhermes-executor-release.so' - } - } else { - // For JSC, delete all the libhermes* files - include "**/libhermes*.so" - } - }.visit { details -> - if (details.file.isFile()) { - details.file.delete() - } - } - } - - if (enableVmCleanup) { - def task = tasks.findByName("strip${targetName}DebugSymbols") - task.doFirst(vmSelectionAction) - } } } From ebc683e413c4844e8a90575e8bb0248ef6e91360 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 6 Nov 2020 16:08:46 +0100 Subject: [PATCH 4/5] Try to use enableHermesForVariant --- react.gradle | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/react.gradle b/react.gradle index bc36f770cc0d..5d4157045488 100644 --- a/react.gradle +++ b/react.gradle @@ -101,9 +101,8 @@ android { // // This should really be done by packaging all Hermes related libs into // two separate HermesDebug and HermesRelease AARs, but until then we'll just exclude them here - if (config.enableHermes && enableVmCleanup) { - def taskName = getGradle().getStartParameter().getTaskRequests().toString() - + def taskName = getGradle().getStartParameter().getTaskRequests().toString() + if (enableHermesForVariant(taskName) && enableVmCleanup) { exclude "**/libjsc*.so" if (taskName.toLowerCase().contains("release")) { exclude '**/libhermes-inspector.so' From c40acdcc325057daf0f0cf08671c744013063162 Mon Sep 17 00:00:00 2001 From: Maximilian Ammann Date: Fri, 6 Nov 2020 20:44:00 +0100 Subject: [PATCH 5/5] Use variant name instead of whole variant --- packages/rn-tester/android/app/build.gradle | 2 +- react.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/rn-tester/android/app/build.gradle b/packages/rn-tester/android/app/build.gradle index 13c150cb30df..ddd143e716c3 100644 --- a/packages/rn-tester/android/app/build.gradle +++ b/packages/rn-tester/android/app/build.gradle @@ -83,7 +83,7 @@ project.ext.react = [ inputExcludes: ["android/**", "./**", ".gradle/**"], composeSourceMapsPath: "$rootDir/scripts/compose-source-maps.js", hermesCommand: "$rootDir/node_modules/hermes-engine/%OS-BIN%/hermesc", - enableHermesForVariant: { def v -> v.name.contains("hermes") }, + enableHermesForVariant: { def name -> name.contains("hermes") }, jsRootDir: "$rootDir/RNTester", enableCodegen: true, // Keep this here until it's sync'ed to Android template. enableFabric: (System.getenv('USE_FABRIC') ?: '0').toBoolean(), diff --git a/react.gradle b/react.gradle index 5d4157045488..7c0d461aecbe 100644 --- a/react.gradle +++ b/react.gradle @@ -145,7 +145,7 @@ afterEvaluate { execCommand.addAll([*nodeExecutableAndArgs, cliPath]) } - def enableHermes = enableHermesForVariant(variant) + def enableHermes = enableHermesForVariant(variant.name) def currentBundleTask = tasks.create( name: "bundle${targetName}JsAndAssets",