@@ -19,7 +19,9 @@ import com.facebook.react.utils.detectedHermesCommand
19
19
import java.io.File
20
20
import java.util.*
21
21
import org.gradle.api.Project
22
+ import org.gradle.api.Task
22
23
import org.gradle.api.tasks.Copy
24
+ import org.gradle.api.tasks.TaskProvider
23
25
24
26
private const val REACT_GROUP = " react"
25
27
@@ -134,6 +136,8 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
134
136
is LibraryVariant -> variant.packageLibraryProvider
135
137
else -> tasks.named(" package$targetName " )
136
138
}
139
+ val stripDebugSymbolsTask: TaskProvider <Task >? = tasks.named(" strip${targetName} DebugSymbols" )
140
+ val mergeNativeLibsTask: TaskProvider <Task >? = tasks.named(" merge${targetName} NativeLibs" )
137
141
138
142
val mergeResourcesTask = variant.mergeResourcesProvider
139
143
val mergeAssetsTask = variant.mergeAssetsProvider
@@ -160,7 +164,25 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
160
164
161
165
packageTask.configure {
162
166
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) }
164
186
}
165
187
}
166
188
@@ -191,14 +213,13 @@ internal fun Project.configureReactTasks(variant: BaseVariant, config: ReactExte
191
213
preBundleTask.dependsOn(currentAssetsCopyTask)
192
214
}
193
215
194
- private fun Project.cleanupVMFiles (enableHermes : Boolean , isRelease : Boolean , targetPath : String ) {
216
+ private fun Project.cleanupVMFiles (libDir : String , targetVariant : Regex , enableHermes : Boolean , isRelease : Boolean ) {
195
217
// Delete the VM related libraries that this build doesn't need.
196
218
// The application can manage this manually by setting 'enableVmCleanup: false'
197
219
//
198
220
// This should really be done by packaging all Hermes related libs into
199
221
// two separate HermesDebug and HermesRelease AARs, but until then we'll
200
222
// kludge it by deleting the .so files out of the /transforms/ directory.
201
- val libDir = " $buildDir /intermediates/transforms/"
202
223
fileTree(libDir) {
203
224
if (enableHermes) {
204
225
// For Hermes, delete all the libjsc* files
@@ -208,18 +229,23 @@ private fun Project.cleanupVMFiles(enableHermes: Boolean, isRelease: Boolean, ta
208
229
// Reduce size by deleting the debugger/inspector
209
230
it.include(" **/libhermes-inspector.so" )
210
231
it.include(" **/libhermes-executor-debug.so" )
232
+ it.include(" **/libhermes-executor-common-debug.so" )
211
233
} else {
212
234
// Release libs take precedence and must be removed
213
235
// to allow debugging
214
236
it.include(" **/libhermes-executor-release.so" )
237
+ it.include(" **/libhermes-executor-common-release.so" )
215
238
}
216
239
} else {
217
240
// For JSC, delete all the libhermes* files
218
241
it.include(" **/libhermes*.so" )
242
+ // Delete the libjscexecutor from release build
243
+ if (isRelease) {
244
+ it.include(" **/libjscexecutor.so" )
245
+ }
219
246
}
220
247
}
221
248
.visit { visit ->
222
- val targetVariant = " .*/transforms/[^/]*/$targetPath /.*" .toRegex()
223
249
val path = visit.file.absolutePath.replace(File .separatorChar, ' /' )
224
250
if (path.matches(targetVariant) && visit.file.isFile) {
225
251
visit.file.delete()
0 commit comments