Skip to content

Commit 71fe19c

Browse files
authored
Use flatMap instead of map to make the getSharedObjectFilesProvider depend on the outputs of merge[Variant]NativeLibs (#2120)
1 parent 54a01ff commit 71fe19c

2 files changed

Lines changed: 16 additions & 14 deletions

File tree

embrace-gradle-plugin/src/main/java/io/embrace/android/gradle/plugin/tasks/ndk/NdkUploadTasksRegistration.kt

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.embrace.android.gradle.plugin.tasks.ndk
22

3-
import com.android.build.api.variant.Variant
43
import io.embrace.android.gradle.plugin.config.PluginBehavior
54
import io.embrace.android.gradle.plugin.config.ProjectType
65
import io.embrace.android.gradle.plugin.config.UnitySymbolsDir
@@ -42,7 +41,7 @@ class NdkUploadTasksRegistration(
4241
// Skip registration if NDK is disabled
4342
if (variantConfig.embraceConfig?.ndkEnabled == false) return
4443

45-
val sharedObjectFilesProvider = getSharedObjectFilesProvider(project, data, variant)
44+
val sharedObjectFilesProvider = getSharedObjectFilesProvider(project, data)
4645

4746
val compressionTaskProvider = project.registerTask(
4847
CompressSharedObjectFilesTask.NAME,
@@ -149,14 +148,13 @@ class NdkUploadTasksRegistration(
149148
private fun getSharedObjectFilesProvider(
150149
project: Project,
151150
data: AndroidCompactedVariantData,
152-
variant: Variant,
153151
): Provider<File> {
154152
return projectType.flatMap { projectType: ProjectType ->
155-
project.tasks.named("merge${variant.name.capitalizedString()}NativeLibs").map { task ->
153+
project.tasks.named("merge${data.name.capitalizedString()}NativeLibs").flatMap { mergeNativeLibsTask ->
156154
when (projectType) {
157-
ProjectType.UNITY -> getUnitySharedObjectFiles(project, data)
158-
ProjectType.NATIVE -> getNativeSharedObjectFiles(project, task)
159-
else -> File("") // ndk upload won't be executed
155+
ProjectType.UNITY -> project.provider { getUnitySharedObjectFiles(project, data) }
156+
ProjectType.NATIVE -> getNativeSharedObjectFiles(project, mergeNativeLibsTask)
157+
else -> project.provider { File("") } // this shouldn't happen
160158
}
161159
}
162160
}
@@ -176,10 +174,10 @@ class NdkUploadTasksRegistration(
176174
?: error("Unity shared object files not found")
177175
}
178176

179-
private fun getNativeSharedObjectFiles(project: Project, task: Task): File {
177+
private fun getNativeSharedObjectFiles(project: Project, task: Task): Provider<File> {
180178
val customSymbolsDirectory = behavior.customSymbolsDirectory
181179
return if (!customSymbolsDirectory.isNullOrEmpty()) {
182-
getNativeSharedObjectFilesFromCustomDirectory(customSymbolsDirectory, project)
180+
project.provider { getNativeSharedObjectFilesFromCustomDirectory(customSymbolsDirectory, project) }
183181
} else {
184182
getDefaultNativeSharedObjectFiles(task)
185183
}
@@ -201,10 +199,15 @@ class NdkUploadTasksRegistration(
201199
* We expect the task outputs to be in the following format:
202200
* app/build/intermediates/merged_native_libs/release/out/lib/armeabi-v7a/libembrace-native.so
203201
*/
204-
private fun getDefaultNativeSharedObjectFiles(task: Task): File {
205-
return task.outputs.files.asFileTree.files.firstOrNull {
206-
it.extension == "so"
207-
}?.parentFile?.parentFile ?: error("Shared object file not found")
202+
private fun getDefaultNativeSharedObjectFiles(task: Task): Provider<File> {
203+
return task.outputs.files.asFileTree.elements.map { files ->
204+
files
205+
.first { it.asFile.extension == "so" }
206+
?.asFile
207+
?.parentFile
208+
?.parentFile
209+
?: error("Shared object file not found")
210+
}
208211
}
209212

210213
private fun getMappingFileFolder(variantData: AndroidCompactedVariantData) = if (variantData.flavorName.isBlank()) {

embrace-gradle-plugin/src/test/java/io/embrace/android/gradle/plugin/ndk/NdkUploadTasksRegistrationTest.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,6 @@ class NdkUploadTasksRegistrationTest {
187187
assertTaskRegistered(EncodeFileToBase64Task.NAME, testAndroidCompactedVariantData.name)
188188
}
189189

190-
// TODO: Do all Unity projects have a mergeNativeLibs task?
191190
@Test
192191
fun `an error is thrown when merge native libs task is not found`() {
193192
// Given a project where merge native libs task is not registered

0 commit comments

Comments
 (0)