@@ -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 /.*" 
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/.*" 
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/.*" 
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 /.*" 
223249        val  path =  visit.file.absolutePath.replace(File .separatorChar, ' /' 
224250        if  (path.matches(targetVariant) &&  visit.file.isFile) {
225251          visit.file.delete()
0 commit comments