@@ -19,7 +19,9 @@ import com.facebook.react.utils.detectedHermesCommand
1919import java.io.File
2020import java.util.*
2121import org.gradle.api.Project
22+ import org.gradle.api.Task
2223import org.gradle.api.tasks.Copy
24+ import org.gradle.api.tasks.TaskProvider
2325
2426private const val REACT_GROUP = " react"
2527
@@ -134,6 +136,8 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
134136 is LibraryVariant -> variant.packageLibraryProvider
135137 else -> tasks.named(" package$targetName " )
136138 }
139+ val stripDebugSymbolsTask: TaskProvider <Task >? = tasks.named(" strip${targetName} DebugSymbols" )
140+ val mergeNativeLibsTask: TaskProvider <Task >? = tasks.named(" merge${targetName} NativeLibs" )
137141
138142 val mergeResourcesTask = variant.mergeResourcesProvider
139143 val mergeAssetsTask = variant.mergeAssetsProvider
@@ -160,7 +164,25 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
160164
161165 packageTask.configure {
162166 if (config.enableVmCleanup.get()) {
163- it.doFirst { cleanupVMFiles(enableHermes, isRelease, targetPath) }
167+ val libDir = " $buildDir /intermediates/transforms/"
168+ val targetVariant = " .*/transforms/[^/]*/$targetPath /.*" .toRegex()
169+ it.doFirst { cleanupVMFiles(libDir, targetVariant, enableHermes, isRelease) }
170+ }
171+ }
172+
173+ stripDebugSymbolsTask?.configure {
174+ if (config.enableVmCleanup.get()) {
175+ val libDir = " $buildDir /intermediates/stripped_native_libs/${targetPath} /out/lib/"
176+ val targetVariant = " .*/stripped_native_libs/$targetPath /out/lib/.*" .toRegex()
177+ it.doLast { cleanupVMFiles(libDir, targetVariant, enableHermes, isRelease) }
178+ }
179+ }
180+
181+ mergeNativeLibsTask?.configure {
182+ if (config.enableVmCleanup.get()) {
183+ val libDir = " $buildDir /intermediates/merged_native_libs/${targetPath} /out/lib/"
184+ val targetVariant = " .*/merged_native_libs/$targetPath /out/lib/.*" .toRegex()
185+ it.doLast { cleanupVMFiles(libDir, targetVariant, enableHermes, isRelease) }
164186 }
165187 }
166188
@@ -191,14 +213,13 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
191213 preBundleTask.dependsOn(currentAssetsCopyTask)
192214}
193215
194- private fun Project.cleanupVMFiles (enableHermes : Boolean , isRelease : Boolean , targetPath : String ) {
216+ private fun Project.cleanupVMFiles (libDir : String , targetVariant : Regex , enableHermes : Boolean , isRelease : Boolean ) {
195217 // Delete the VM related libraries that this build doesn't need.
196218 // The application can manage this manually by setting 'enableVmCleanup: false'
197219 //
198220 // This should really be done by packaging all Hermes related libs into
199221 // two separate HermesDebug and HermesRelease AARs, but until then we'll
200222 // kludge it by deleting the .so files out of the /transforms/ directory.
201- val libDir = " $buildDir /intermediates/transforms/"
202223 fileTree(libDir) {
203224 if (enableHermes) {
204225 // For Hermes, delete all the libjsc* files
@@ -208,18 +229,23 @@ private fun Project.cleanupVMFiles(enableHermes: Boolean, isRelease: Boolean, ta
208229 // Reduce size by deleting the debugger/inspector
209230 it.include(" **/libhermes-inspector.so" )
210231 it.include(" **/libhermes-executor-debug.so" )
232+ it.include(" **/libhermes-executor-common-debug.so" )
211233 } else {
212234 // Release libs take precedence and must be removed
213235 // to allow debugging
214236 it.include(" **/libhermes-executor-release.so" )
237+ it.include(" **/libhermes-executor-common-release.so" )
215238 }
216239 } else {
217240 // For JSC, delete all the libhermes* files
218241 it.include(" **/libhermes*.so" )
242+ // Delete the libjscexecutor from release build
243+ if (isRelease) {
244+ it.include(" **/libjscexecutor.so" )
245+ }
219246 }
220247 }
221248 .visit { visit ->
222- val targetVariant = " .*/transforms/[^/]*/$targetPath /.*" .toRegex()
223249 val path = visit.file.absolutePath.replace(File .separatorChar, ' /' )
224250 if (path.matches(targetVariant) && visit.file.isFile) {
225251 visit.file.delete()
0 commit comments